pax_global_header00006660000000000000000000000064145267317150014525gustar00rootroot0000000000000052 comment=2ada87c43f1aecd67e5919ae6675e0a9be614914 pairtools-1.0.3/000077500000000000000000000000001452673171500135425ustar00rootroot00000000000000pairtools-1.0.3/.flake8000066400000000000000000000006711452673171500147210ustar00rootroot00000000000000[flake8] exclude = __init__.py __main__.py max-line-length = 120 ignore = # whitespace before ':' E203 # too many leading '#' for block comment E266 # line too long E501 # line break before binary operator W503 select = # mccabe complexity C # pycodestyle E # pyflakes error F # pyflakes warning W # bugbear B # line exceeds max-line-length + 10% B950 pairtools-1.0.3/.github/000077500000000000000000000000001452673171500151025ustar00rootroot00000000000000pairtools-1.0.3/.github/workflows/000077500000000000000000000000001452673171500171375ustar00rootroot00000000000000pairtools-1.0.3/.github/workflows/python-package.yml000066400000000000000000000023511452673171500225750ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Python package on: push jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.7", "3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip wheel setuptools pip install numpy cython pysam pip install -r requirements-dev.txt pip install -e . - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | pip install pytest pytest pairtools-1.0.3/.github/workflows/python-publish-test.yml000066400000000000000000000016531452673171500236310ustar00rootroot00000000000000 # This workflows will upload a Python Package using Twine when a release is created # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries name: Publish Python Package to Test PyPI on: release: types: [prereleased] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install setuptools wheel twine cython numpy pysam - name: Build and publish env: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | python setup.py sdist twine upload --repository-url https://test.pypi.org/legacy/ dist/* pairtools-1.0.3/.github/workflows/python-publish.yml000066400000000000000000000015501452673171500226500ustar00rootroot00000000000000# This workflow will upload a Python Package using Twine when a release is created # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries name: Upload Python Package on: release: types: [created] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install setuptools wheel twine cython pysam numpy - name: Build and publish env: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | python setup.py sdist twine upload dist/* pairtools-1.0.3/.gitignore000066400000000000000000000022501452673171500155310ustar00rootroot00000000000000# vim undos *.un~ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so *.c *.cpp # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject # cython compiled C extension _*.c *.DS_Store # VS code settings .vscode/* # Files generated as the examples examples/* pairtools-1.0.3/CHANGES.md000066400000000000000000000115641452673171500151430ustar00rootroot00000000000000### 1.0.3 (2023-11-20) ### - [x] `pairtools dedup`: update default chunksize to 10,000 to prevent memory overflow on datasets with high duplication rate ### 1.0.2 (2022-11-XX) ### - [x] `pairtools select` regex update (string substitutions failed when the column name was a substring of another) - [x] Warnings capture in dedup: pairs lines are always split after rstrip newline - [x] Important fixes of splitting schema - [x] Dedup comment removed (failed when the read qualities contained "#") - [x] Remove dbist build out of wheel - [x] pairtools scaling: fixed an issue with scaling maximum range value https://github.com/open2c/pairtools/issues/150#issue-1439106031 ### 1.0.1 (2022-09-XX) ### - [x] Fixed issue with pysam dependencies on pip and conda - [x] pytest test engine instead of nose - [x] Small fixes in teh docs and scaling ### 1.0.0 (2022-08-XX) ### This is a major release of pairtools since last release (April 2019!) #### Post merge: - [x] sphinx docs update with incorporated walkthroughs #### New tools: - [x] parse2 module with CLI for parsing complex walks - [x] scaling and header modules with CLI #### Fixes by modules: pairtools dedup - [x] finalize detection of optical duplicates https://github.com/open2c/pairtools/issues/106 and https://github.com/open2c/pairtools/issues/59, also related to https://github.com/open2c/pairtools/issues/54 - [x] chunked dedup by @Phlya - [x] improvement of dedup to include reporting of the parent readID by @Phlya and @agalitsyna pairtools stats/scaling - [x] split dedup stats and regular stats - [x] output chromosome size to the stats output https://github.com/open2c/pairtools/issues/83 - [x] pairtools stats: YAML output? https://github.com/open2c/pairtools/issues/111 and https://github.com/open2c/pairtools/issues/79 - [x] pairtools scaling tool which takes into account chromosome sizes: https://github.com/open2c/pairtools/issues/81, https://github.com/open2c/pairtools/issues/56? pairtools parse - [x] parse complex walks engine and tools: https://github.com/open2c/pairtools/pull/109 - [x] stdin and stdout reporting defaults: https://github.com/open2c/pairtools/issues/48 - [x] flipping issue: https://github.com/open2c/pairtools/issues/91 pairtools phase - [x] make work with both pip and github versions of bwa: https://github.com/open2c/pairtools/pull/114 pairtools restrict - [x] Handle empty pairs with "!" chromosomes: https://github.com/open2c/pairtools/issues/76 - [x] Problem with restriction sites header/first rfrag: https://github.com/open2c/pairtools/issues/73 - [x] Suggestions by @golobor: https://github.com/open2c/pairtools/issues/16 pairtools merge - [x] do not require sorting? https://github.com/open2c/pairtools/issues/23 - [x] headers handling: https://github.com/open2c/pairtools/issues/18 #### General improvements: Headers maintenance - [x] allow adding a header to a headerless file https://github.com/open2c/pairtools/issues/119 or broader addition of the headed module, draft: https://github.com/open2c/pairtools/pull/121 Code maintenance - [x] transfer pairlib into sandbox of pairtools lib - [x] separate cli and lib - [x] Remove OrderedDict: https://github.com/open2c/pairtools/issues/113 - [x] Clean up deprecation warnings, e.g. https://github.com/open2c/pairtools/issues/71 - [x] Fix input errors without explanations, e.g. https://github.com/open2c/pairtools/issues/61 #### Specific changes: Docs improvements - [x] pairtools walkthrough - [x] phasing walkthrough - [x] parse docs update Tests proposals - [x] add tests for dedup @Phlya : https://github.com/open2c/pairtools/issues/5 - [x] add tests for stats, and merge: https://github.com/open2c/pairtools/issues/5 Enhancements - [x] add summaries: https://github.com/open2c/pairtools/pull/105 - [x] support of [bwa mem2]( https://github.com/bwa-mem2/bwa-mem2), which is 2-3 times faster than usual bwa mem: https://github.com/open2c/pairtools/discussions/118 - [x] I/O single utility instead of repetitive code in each module ### 0.3.1 (2021-02-XX) ### * sample: a new tool to select a random subset of pairs * parse: add --readid-transform to edit readID * parse: add experimental --walk-policy all (note: it will be moved to a separate tool in future!) * all tools: use bgzip if pbgzip not available Internal changes: * parse: move most code to a separate _parse module * _headerops: add extract_chromosomes(header) * all tools: drop py3.5 support * switch from travis CI to github actions ### 0.3.0 (2019-04-23) ### * parse: tag pairs with missing FASTQ/SAM on one side as corrupt, pair type "XX" ### 0.2.2 (2019-01-07) ### * sort: enable lz4c compression of sorted chunks by default ### 0.2.1 (2018-12-21) ### * automatically convert mapq1 and mapq2 to int in `select` ### 0.2.0 (2018-09-03) ### * add the `flip` tool ### 0.1.1 (2018-07-19) ### * Bugfix: include _dedup.pyx in the Python package ### 0.1.0 (2018-07-19) ### * First release. pairtools-1.0.3/LICENSE000066400000000000000000000020541452673171500145500ustar00rootroot00000000000000MIT License Copyright (c) 2017-2021 Open2C Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pairtools-1.0.3/MANIFEST.in000066400000000000000000000005641452673171500153050ustar00rootroot00000000000000include CHANGES.md include README.md include requirements.txt include requirements_doc.txt include LICENSE graft tests graft doc prune doc/_build prune doc/_templates global-include *.pyx global-include *.pxd global-exclude __pycache__/* global-exclude *.so global-exclude *.pyd global-exclude *.pyc global-exclude .git* global-exclude .deps/* global-exclude .DS_Store pairtools-1.0.3/Makefile000066400000000000000000000012661452673171500152070ustar00rootroot00000000000000.PHONY: init install clean-pyc clean-build build test publish docs-init docs init: conda install --file requirements.txt install: pip install -e . test: nosetests clean-pyc: find . -name '*.pyc' -exec rm --force {} + find . -name '*.pyo' -exec rm --force {} + find . -name '*~' -exec rm --force {} + clean-build: rm -rf build/ rm -rf dist/ clean: clean-pyc clean-build build: clean-build python setup.py sdist # python setup.py bdist_wheel publish: build twine upload dist/* publish-test: twine upload --repository-url https://test.pypi.org/legacy/ dist/* #docs-init: # conda install --file docs/requirements.txt # #docs: # cd docs && python make_cli_rst.py && make html pairtools-1.0.3/README.md000066400000000000000000000217631452673171500150320ustar00rootroot00000000000000# pairtools [![Documentation Status](https://readthedocs.org/projects/pairtools/badge/?version=latest)](http://pairtools.readthedocs.org/en/latest/) [![Build Status](https://travis-ci.org/mirnylab/pairtools.svg?branch=master)](https://travis-ci.org/mirnylab/pairtools) [![Join the chat on Slack](https://img.shields.io/badge/chat-slack-%233F0F3F?logo=slack)](https://bit.ly/2UaOpAe) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1490831.svg)](https://doi.org/10.5281/zenodo.1490831) ## Process Hi-C pairs with pairtools `pairtools` is a simple and fast command-line framework to process sequencing data from a Hi-C experiment. `pairtools` process pair-end sequence alignments and perform the following operations: - detect ligation junctions (a.k.a. Hi-C pairs) in aligned paired-end sequences of Hi-C DNA molecules - sort .pairs files for downstream analyses - detect, tag and remove PCR/optical duplicates - generate extensive statistics of Hi-C datasets - select Hi-C pairs given flexibly defined criteria - restore .sam alignments from Hi-C pairs - annotate restriction digestion sites - get the mutated positions in Hi-C pairs To get started: - Visit [pairtools tutorials](https://pairtools.readthedocs.io/en/latest/examples/pairtools_walkthrough.html), - Take a look at a [quick example](https://github.com/open2c/pairtools#quick-example), - Check out the detailed [documentation](http://pairtools.readthedocs.io). ## Data formats `pairtools` produce and operate on tab-separated files compliant with the [.pairs](https://github.com/4dn-dcic/pairix/blob/master/pairs_format_specification.md) format defined by the [4D Nucleome Consortium](https://www.4dnucleome.org/). All pairtools properly manage file headers and keep track of the data processing history. Additionally, `pairtools` define the [.pairsam format](https://pairtools.readthedocs.io/en/latest/formats.html#pairsam), an extension of .pairs that includes the SAM alignments of a sequenced Hi-C molecule. .pairsam complies with the .pairs format, and can be processed by any tool that operates on .pairs files. `pairtools` produces a set of additional extra columns, which describe properties of alignments, phase, mutations, restriction and complex walks. The full list of possible extra columns is provided in the [`pairtools` format specification](https://pairtools.readthedocs.io/en/latest/formats.html#extra-columns). ## Installation Requirements: - Python 3.x - Python packages `cython`, `pysam`, `bioframe`, `pyyaml`, `numpy`, `scipy`, `pandas` and `click`. - Command-line utilities `sort` (the Unix version), `bgzip` (shipped with `samtools`) and `samtools`. If available, `pairtools` can compress outputs with `pbgzip` and `lz4`. For the full list of recommended versions, see [requirements in the the GitHub repo](https://github.com/open2c/pairtools/blob/detect_mutations/requirements.txt). We highly recommend using the `conda` package manager to install `pairtools` together with all its dependencies. To get it, you can either install the full [Anaconda](https://www.continuum.io/downloads) Python distribution or just the standalone [conda](http://conda.pydata.org/miniconda.html) package manager. With `conda`, you can install `pairtools` and all of its dependencies from the [bioconda](https://bioconda.github.io/index.html) channel. ```sh $ conda install -c conda-forge -c bioconda pairtools ``` Alternatively, install non-Python dependencies and `pairtools` with Python-only dependencies from PyPI using pip: ```sh $ pip install numpy pysam cython $ pip install pairtools ``` ## Quick example Setup a new test folder and download a small Hi-C dataset mapped to sacCer3 genome: ```bash $ mkdir /tmp/test-pairtools $ cd /tmp/test-pairtools $ wget https://github.com/open2c/distiller-test-data/raw/master/bam/MATalpha_R1.bam ``` Additionally, we will need a .chromsizes file, a TAB-separated plain text table describing the names, sizes and the order of chromosomes in the genome assembly used during mapping: ```bash $ wget https://raw.githubusercontent.com/open2c/distiller-test-data/master/genome/sacCer3.reduced.chrom.sizes ``` With `pairtools parse`, we can convert paired-end sequence alignments stored in .sam/.bam format into .pairs, a TAB-separated table of Hi-C ligation junctions: ```bash $ pairtools parse -c sacCer3.reduced.chrom.sizes -o MATalpha_R1.pairs.gz --drop-sam MATalpha_R1.bam ``` Inspect the resulting table: ```bash $ less MATalpha_R1.pairs.gz ``` ## Pipelines - We provide a simple working example of a mapping bash pipeline in /examples/. - [distiller](https://github.com/open2c/distiller-nf) is a powerful Hi-C data analysis workflow, based on `pairtools` and [nextflow](https://www.nextflow.io/). ## Tools - `parse`: read .sam/.bam files produced by bwa and form Hi-C pairs - form Hi-C pairs by reporting the outer-most mapped positions and the strand on the either side of each molecule; - report unmapped/multimapped (ambiguous alignments)/chimeric alignments as chromosome "!", position 0, strand "-"; - perform upper-triangular flipping of the sides of Hi-C molecules such that the first side has a lower sorting index than the second side; - form hybrid pairsam output, where each line contains all available data for one Hi-C molecule (outer-most mapped positions on the either side, read ID, pair type, and .sam entries for each alignment); - report .sam tags or mutations of the alignments; - print the .sam header as #-comment lines at the start of the file. - `parse2`: read .sam/.bam files with long paired-and or single-end reads and form Hi-C pairs from complex walks - identify and rescue chrimeric alignments produced by singly-ligated Hi-C molecules with a sequenced ligation junction on one of the sides; - annotate chimeric alignments by restriction fragments and report true junctions and hops (One-Read-Based Interactions Annotation, ORBITA); - perform intra-molecule deduplication of paired-end data when one side reads through the DNA on the other side of the read; - report index of the pair in the complex walk; - make combinatorial expansion of pairs produced from the same walk; - `sort`: sort pairs files (the lexicographic order for chromosomes, the numeric order for the positions, the lexicographic order for pair types). - `merge`: merge sorted .pairs files - merge sort .pairs; - combine the .pairs headers from all input files; - check that each .pairs file was mapped to the same reference genome index (by checking the identity of the @SQ sam header lines). - `select`: select pairs according to specified criteria - select pairs entries according to the provided condition. A programmable interface allows for arbitrarily complex queries on specific pair types, chromosomes, positions, strands, read IDs (including matches to a wildcard/regexp/list). - optionally print the non-matching entries into a separate file. - `dedup`: remove PCR duplicates from a sorted triu-flipped .pairs file - remove PCR duplicates by finding pairs of entries with both sides mapped to similar genomic locations (+/- N bp); - optionally output the PCR duplicate entries into a separate file; - detect optical duplicates from the original Illumina read ids; - apply filtering by various properties of pairs (MAPQ; orientation; distance) together with deduplication; - output yaml or convenient tsv deduplication stats into text file. - NOTE: in order to remove all PCR duplicates, the input must contain \*all\* mapped read pairs from a single experimental replicate; - `maskasdup`: mark all pairs in a pairsam as Hi-C duplicates - change the field pair_type to DD; - change the pair_type tag (Yt:Z:) for all sam alignments; - set the PCR duplicate binary flag for all sam alignments (0x400). - `split`: split a .pairsam file into .pairs and .sam. - `flip`: flip pairs to get an upper-triangular matrix - `header`: manipulate the .pairs/.pairsam header - generate new header for headerless .pairs file - transfer header from one .pairs file to another - set column names for the .pairs file - validate that the header corresponds to the information stored in .pairs file - `stats`: calculate various statistics of .pairs files - `restrict`: identify the span of the restriction fragment forming a Hi-C junction - `phase`: phase pairs mapped to a diploid genome ## Contributing [Pull requests](https://akrabat.com/the-beginners-guide-to-contributing-to-a-github-project/) are welcome. For development, clone and install in "editable" (i.e. development) mode with the `-e` option. This way you can also pull changes on the fly. ```sh $ git clone https://github.com/open2c/pairtools.git $ cd pairtools $ pip install -e . ``` ## Citing `pairtools` Open2C*, Nezar Abdennur, Geoffrey Fudenberg, Ilya M. Flyamer, Aleksandra A. Galitsyna*, Anton Goloborodko*, Maxim Imakaev, Sergey V. Venev. "Pairtools: from sequencing data to chromosome contacts" bioRxiv, February 13, 2023. ; doi: https://doi.org/10.1101/2023.02.13.528389 ## License MIT pairtools-1.0.3/doc/000077500000000000000000000000001452673171500143075ustar00rootroot00000000000000pairtools-1.0.3/doc/Makefile000066400000000000000000000012571452673171500157540ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @cd ..; python setup.py build_ext --inplace; cd docs @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)pairtools-1.0.3/doc/_static/000077500000000000000000000000001452673171500157355ustar00rootroot00000000000000pairtools-1.0.3/doc/_static/hic-processing-pipeline.png000066400000000000000000001514661452673171500232000ustar00rootroot00000000000000PNG  IHDR~3sBIT|d pHYsgRtEXtSoftwarewww.inkscape.org< IDATxwE׽IH#$!B)Jޫt/ "_"_JP;kBzr~|v~3g={MxGNi O+ "l hmuDDzǀG[\l l 涰^",6KG])D`1Bb@`w`LwVJDd LmTf_fX|2[aJuoQDz3m:X0v;ZJ\ Z\NJ,[x8[b7KDdIq8vӮ؁7F~zuAw_ %`zc" <+iFliVmLޛZ\/I,߈Mj""K[X`=X|pHEqx|86dF~YWł<""v\݁wUm6}u- KEDDDz''&f:k'g;u`=c%ʻ1G˾l&QD$;fM\ $H{ץ;^⺈t'Bcs 2;t-"Yݓ̐Jneezs-"RO|A]L/❋kq]DDDDsI+H/Փ'NngUuR""u܉GU콝z, FY"K4@DD6`M`p66)3ؚQZr7l^,ՁLEXP{q:Xv[ xȊȒ?0({< XP``5`%l䍃eym3 XXkzc>3l?YeGewg >,}iƭ[$"Kdn/&,2Q_f(u1vBG+Ў^`,vlX;_#ۿ2ul _r =3{`;`&AP=;&ŽAb ?;^C ۧHp6x$ax<́lMRξ_Ifཛྷ&WD'%pAcTW=yKF$X:Wbñ bj78䍃s~&{ĶΫ׳ǯǽ&eDN0pubX_מ |-OEς/a=S܄|XЭٲe|߃e 駲$eh;+ 7'EV̼D]ATHD&|{t#5낉koVFѲeĆ*jÍ'4X`.>}F+#Û{pXNpS#{2bC@,bw0u]QM4XzHOuvG[..?o\n^@x8x]bƚ2="Y|~> ꇲICu us'#cEˆaજ߂VrA9 Oc#ͩHoˎ6/DͽÂɻaAX<v[NѲ}_~7^)R+9W=;n]PN"f`9e6Ʒ5H,+[5zm;OpmnjSY&a޸"-n,ڀ(;.8G}|-Zvh,o菝2߉f0BD' Dn ~8q=^+׮ %YTOHeSr\Ph'eqrLؙ>R\j,˷H, ?*(75+L0F T| _r'eMKrM~}}Lb=Ûe `YniTbo ǹG/X66g'g|*i2+x3v""""=Կ0un( ;̔=ZV쬜IM%"jc8-;έ~8E2J,,`MP8d8q؃g,$?+`+5u(yhǃeGNnhqcm^|CaOe;ˎ2g:E>y2W?愓`n X'/=eo`'Q}cr6+Xz޶Ԭf8-sC?_ "k{ zqqֵgs=,N]yaRCչsu궘Iw)afU>H? v2s yu {ryLuwC=u 5Ed 6k!Y86#4 qbv JDqD %6xh"<=~`.33d Aq`+u׽)"vDuy=|@Wug-]Ò.BEh#~:BNd&aj8nOR=[wzκòky|y늭$qV-cλiZ4dƚ[GT t #SYDzٿIg'Cu7diq} ύ( XwԾ=LFѸj""=kRX^!x<`}wco&3?Vfm<'?|bq& SMmFlEc-{<  N:F~6έ):oH?q j8E^OXxwk n.:8Trߣ-;qF"iLm\9o\N'[3eePEZ&iE'js9 QD/X:_8o>v:΂mgcP. q22P$x\/+l{1q%~b('AlmƮwA_Svؘ`3;zyX\NOEl¨:Xw띕SXV_!< L|߳epcJنrFOP8ۋp蝑Ī'cݰ=jX ~3}@wsvXnx?\7Ac? &uvz]W]MTaǰSI3PT1b2k}:8 ̻C{MHYnM,}cě""""-7NNffa'SfdNz !5>.ƭrjMT쵂w}Vfv2*"Ӹ ޴L 5DխK믁ex{?x.BnbNƏv5+7K(hk`]͝=뇙3u-8s"ngbNjishm2'l9?9uEf=UⱮ6<c%6u+ޘV ;,geNN,?4{G`ߜ튈Pq`Bua3w|^^,m/80,`uVg%%gԄ""ֆ8/VCGS&`cͶ>sa|Tv޺.gak͂OvP(";do.6T.%(Ol`Yv`7+Uo"p.qCSfk|fqvMPt]QdY>RNnfV7^-y ; x)e~:}neƪ+6Bp v|X.{hea=#oځ+1f5 ]WԳ! ߗ1g,<~ +a1gaåT{,ߍkQ>H:n=61Tߊ4(̪u-x^}.}3O~,_ܧf ISf~"' p7Hj5"""""""9&΍QDDZlx`cp $~Jlґ%yW-&""Ӟ!1~SƍG^&i9M("=a1o c>Mf&""=N'X9ֆM6;DNwR=Q,}@`VWBDDDDDDDDI.muEzk@%׺jH/p#pF""""""""K)XVW:h[W5ƷApz`_7֫+gb7XOjq]:$gb$⺈ȒkV1`ץ.Ǝ/_nq]DDDd)zݴd]`>|.?5Rz5b9`嶤&]Y.*߶i~qLMp\WVJDjķ%.]ay%R""ҷ.MpsݾoNNma]DDx7xRl؎#ED: 8,VhuZh߹o[Y.ձazF)WtI4[[ e;*"g`m /Z\fkxU`'Hus} i&bVWDD$SoHAKZXqTED]w<ꊈH""""""""DCjHOxh`S` l¢$6c&a?V˖\:J;uSe/`ԭ &wa38{cCS籬_bcc6bx#XW/W|;QY>}sVvޛyL?Kguүn]: o+%~/̉zÁ}m5X[92d#l\屮|n~h~ k~ ˌ? <}ҹǾ+bk~< < 7_/a`6XJln#9Xs)w#c=9~WS]wۼg_>w6ֵ/Xzl:{>Wq^xÁӲw lJsc;_Z=\dva ޾ `{9`cazf?ґlx3fl`-5c$pvCX uX[^\I͊?p0,{EYbD->@83n};%~Kyv2}7 1,w>KDe"KX pv.=;H;g;?[;=vzD}Wcזع?=y,㿱9kx-#3u.M:^mrFwN*vwud`}( ~J,_[s:o` ֫`OwH.> leO]eYSamcթX r?v,w/9܎'r[`^ NB.IJ>RoeCY;X< O{{9:ytkVTTaDg4v18?agyYݝM Dzb#b2G`'o/?.xm`[vGak2bK6`,,Y N,k2D F_,K9uaٌnkm N>v,ӱ}X,l-{r!6V#N=^Y.@a7t8'|%sTVϏc=*3X`m2>xֆ|ם3|6oeb߉;/c&m 콺 .}~[ÂK'' l ׼ Ѹ -m3/cm }_~ñTM{>}ڱE9^+R\83W[Pp7|7Xcv,y.]=kW~m;/s,s=v,8k{g8Xnw"3L²Ďñ,-عY8w֓ ?zVk+u#0 k/ηǮIq_C/Ŏ ^a ֖;ރms{ ""D37Sv8v`)Eۨ|`, H:/| ?idw'Se:>Fcw Fg~ ;t;& |OljE:vF CXvZ{%|?^[p Ӱح>N#č?߭O`An#۞  }߁B+3.o9awKufwev^ǛX(ԆݰpH0{!n2ĶgNt*X;UbgQb41~V,`Ne891XNjV>%2*mIA}{f8G_\Hwf8N,_Xc۸t}kt ~ؐ<2VLyԶ3a^|cc >3AoJHtg9 (sebH|{4KRHF' ,pg] Lb {L-VFDDd H9 &q=EF/ ,0Y4rѰh$|Yry'a)MܛX^6܆eȜrhY#}`2XP|=^,ghY7\f1%XvQ[` ȖŲS ],%=(c^ re 2.ZvD,/<2Ҙ3gvX3͛ qsP.. 8%ʤziu3te !^xP3azA6K\ƋUHk_e>H%if~|[7Z_,Ǖ$\x^˶+x"" Ȓ?b]S'ېƲ`&/WmϦt7z^GmhWꇿZ' E'wWoHLJ,K˚k܈0H^NaOq p6v2YOlQ*&+> g_Qv'o#+X[< ƿgȟ1wwt8oLGesC|.Jl]qg;M ǹfƂ.. ›kqKaƺCܟFѱq?q,{[OYV"Α瓟ҕVurhì5TKx]z"!$"h gY꺛'-enuaÏk79R=`l\"vAWt>OYgr.?LXP޾,)1Io,C/eX0 q}h-3؉jXfgC㇂eƠ7:9N2 (~z=(yLヌsL,n|aaO7N)ӎ [}_\3os\6:~̙ݔK-ߑ\`dcn[ L ǵ@݁ݸ^榪9k)IU\WKǎ#VkSbcx\@βXI[rTtLWkpE[ ,v`u{6&ϩ>h0^v]7S`y,;p^!x7]}uT;㸛 >.&?;{CqN-U,&ѽg{бQx5.gkƤuImʖPݩ,lt]u<x#)y]\&SfaXEǵf,90{p<,0-"זopu]WM{5{q&s1v0n_lϾpG8ˈ@z<03-87fkaV| eʝ=*,6iWvFº24;Y6" ]Nz"fu%] 6hpӂaE5K+Y/Y&Q=Ӱq1iw.`.*S .i䷲6T^ wxE,Ua,cCF*z]yhl# Xkܰ7 hMզpZNXkzkʼɁUmblx+v켱pDtQ"w-ո =w?nzV>uؚa`:eϮN`Dahڱ.py_ǞnջA;t1.U z];*ޯaT ,=CXҀ;M$lSѹsȧ==>XފJ0ۑsfH[wv\k z@x)כ3n ;~ݨ骹'D\:g5?TVOkz{ڹcN:iTDzeifom.ÏALdPnX PP[㿗G.ڇ~Ȋcoҍh ?ߦz"oo:mlڕ3ˮqrm7wH=f6:l5ߐ>+؆c]`1/3|lws:n-l/S~0nN!L)(EejpdNY"}\: s ՕW`דf"}|#{\>u)~Xfβ49{,6_w|D ~Xg(.kpj/př>)a'X)AiCǿgQ,vlwa ϒhԹ ώ~Z:{;a˰퇿`ewÂFyu'ҁ69>Hu6eJ72  ;Ul2)Xwj~O;ep 5)ew{  uXf`J8!#B(w#j4;''QHL)"]+uE]l Ǔ=O玏`筱F ;95UfAY6UDri gYL2|.N ~eF݆͞>[;ZbǰA C:`؝>|EAb8$vB4c>9/Xb'`(> 8j?ރ3۰}b'Ckvr>N,|.m2$IVbXݏ²_QX0x(pb]2^a㛱.`߉! pw:˚v~l,R,sPV{XXPfK,~|/^,vnb<ƺxe޵+,,=vq#Zw`C(SX>,?@+}ڄ@m7n2gfy.ڄXI~;zS>ca{C,~/kxʇnw݄ v̜}>uC=ƆZ ^֖cU؍%q7և_0b7DtvǴ`ǎ3c-)v6PnAع;vSFb=aM"3]v"v&vYþamo߆]}\\;W ǎ.x}v8,v>oQ>c,uHS]&*(c_)[HmVi,U{0g%_ȝQb[)eֹ`{өkd[%:6dOm$Y-`uw^b݃凖@_j\ff$9[8)zX&qOi&aSgGXfȭg,~wX_P~'X;u1(҆M9`ϒ?|^A90(2 =˚Kw`IxFcG=s s nO{:۹ ~w7.(j} LmJ9(W44MY{Yކ˼7$c<76"(sqN6h˸+u|^5X6uYc> =:o g`܂u}h46 hKC@ȇ)odɷ*6"lț矣ܤ""""""+&X5Ui_Q7Eu\MCKk$" mL,"""""d}XLMw ,Ƃ`_?MXajdM4v̺LODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD9/ܝY Di#7&қҰ_3}V Jt~ס"""lnV̞[xX\Ңz4o`ץ'ikuzU[9F-HO2 F/ݙX[6;~ 6iDD:|ik[Xq-XI`d 8;GavB87  k {35 ۵c좴e]o+-Q͡=iFyel{a$""]m7`14l5:~V'k~xLεzCy0ݯD}>x#ڗ NŒ+zu &iq]RޡiFv,{O`&l;uE`'4i""yڜ^Kp8߮uXJV)\7_sYXD3vޢ6]N:aT)XvHo5k3*T3;;lnͣ:U6,8Rb7>EDخ-Ks;pOVH# צ2k)\kx`.Y][{cCy.B._nq]lπ| ۜFuVgcvmvEDBm-KW)g4N1?n IDATpsZ x 1gw}ThÏNz~+yzfvbhsDzƺq TzR xK@VGD=AD́oXo@^OV5 ƃXc(ez21 = lR][[mvVMڔ tC764vMH66^f6g=kdO\\l ?u%8vE]cuaѮ}\ZDَ} {uڰwd Mݕ]ðcmG!V.{:s/"""K؉B,p0?"૤/T/nnY]Vlp+ 1Ď%a;? f Jc﹈,' | Lpww/oe)L|jz=NBCuo1ڊ2nNZs OQ|섴(qu<pSq0dF|jXIdyyaF ğXف[9:4Xc7=S/c?=-Ur_hm~Yb3=mq))p~Q4qݯ'2 :2伿8; `ԟPܩ?S&^}(g݋wbWe/IDDDO N)bcq-hf> ʜSO`iXX7ma힝ݎΏbe/C2s}⃸R3k?$==Ӱ7|Q)Q epˮͩgc=yzkq]Dw9e 8 L. kV[: 86$ >lXX%V)#"ۗU ]]6їvs:Ι;߽XOm.g೯c-;`rk}_,?K{?NƮb Y9^"""8?,Lp'lm O6 L}wY"+3ޣy㞅lw'Elj Msؚ@" g|qb̓ݳ-kt\CnGK&|Ip45⺈t) 8&+",ۀ co~O%cԑر}XƯʯEM }u,x/Hٯ&"&6N~ j 8(1'Qc?1R;Iq {x}۸ 7]VxlkA|G4U "3mm}`]6+.b,H-vq{]Xm 6˔~X)(mҋXwオȟ4lGmE,Cl5؉j_,!哰n#~Xv`/!LcITrtm.e AG+BonPj!cNlg.p#ĉZv0_]߉t!Ԏ1X[eYu7xn1v 0 MƸ8#,o@VX(x|gVz}o](|O^jY-D_}'Ǟulq;;1l+rwx.\aTo'Uzn0 4 ò۱@ba]4Xw o 獜ۻktߒ>>k`y[t"=[ Ռq+'FۀO=]`tZ쩬,PqˁR}nUyYDe̯U ,ղ+ IJvC2{#^b>$ <&wb[Ǻ8%7 'o"ݯǞբ_P}.:kC‰V/n\u8[=-+CvN09ƬEm lؑP^F7. l¿``7C?"p'T("&wq/Nk L:< a2ՂuW:aCuxv]D:MleO CXw*> n{idMwibIml㉩\cYX)+R;ՃG`nOcjPțhu!l0Q(;'=lXkYP}AR4SҦYǞ!Nx_EuU:eo0j?pv=[vBӱ WǎաT0QDTmQNw;Y2fL[ack<s \wT`4 0O,o٪e,\X>W@QPE}52`ew sLq* 6 mPuFDJqOC^D6r,!;F\BD֧xnʯ=kbm||3fWE۰Oʼ ?:Wߵm͛Q>nְseL,騇y_*]wn;sb8>"x|<_w{*yˏ&ww;ܓXp]7e+?;\~7HE (|(bGEE"(("]D H=@H#g~ݝSu͙lyg|U\Ъy= MWz܏>7A.!{O+C=*fl_6߃"/?O~s<{{j%Q`3FpΟQۻ  u((][ KTiNdEE`s%EaC:Ffo]ǩJ?<&c؜03k(4u\S6zTOXٙa\>O|e`]ڛ/B#ޓs3^>?_6BT]=n icmqscwϺifffCІ$OPϲpU9{?6"8l\€sca֨.p{yqgOQ;Qj ΠE# ~#;qjcҏqyB< [^`R66z_mGfCJgmLyjgY$8yAZ6H&Yth<^hsA啟6 2yBԎ$l4?Y+ mX߇P[(?K/>=7;>O[ "YV}5$^D?seKff8ue2U9}Ehf!,B +Q"nGoE=O|M(A\d4 5NC'ynv/F5)~td,V~ }3[|BF8I9ˑ,u%ًm[z}|=4T%(ʥ~D~.ږgI^oWhgzd,Mq(dMgR?|o(Y4 6]HTa0fYM." 7vB:h('{Ѣ;|g%_ʊ'P~v7wtjB]FkHujf5zl:Pʺ%k BZ}CwHؒdOWw]7-HnzWqZl ܃?Uf[Q+GW333X_vEC'%g>t l n* kh[6ͬ6Gk،:!CF7N5`c```"0XoYSMuت.'fS[N<ʉyMufX-wqTVLFx')3wt3fff6، l X矇7ס P9&TV,nBeu(`ffQ.OZ^󛙙Yz&uq75L_N|+ܡl x/{Gi13\!6j?p V_=z<*k(0?:ǒ1+!իqy磊^~؁iOGy4T>XQ/PyQTN<8x+23NvF{дy^D7/D@S2FSMV] K,Ϩ]qlfff1;+`!p+p2;L`T|5'аRx03z p0v(N#́O礣8Meffݵj34ppx4@knB $t` jAvl6[㬛F i^Es`03֍F7n%;nV,崍v~Y{/̆-_Y[Qn[ 8ƒcpiffff-*{ϑݓ!hU w <6umf6\C=!8 M1:=lh33k]YAGњ,TzS|ZJ z|+VӁSQl [84} lffY*]`RW=݇pp7&F+zQҜx޶ԙ p#EP|BekM/Zez54ՆW63+0Z/>ЋU^+-+[gkV єD,s4/Q gYնM}CB9꩖!03+c {,]]fE4&x T]̪p>b<|zjvB W^ ffi+gS_N<ojnXt d#єvө_8{ uTVDϧC +p͟FU럋S]4Eki4P/^tLff7wQ_.B[V0]ݲGoT^:̬ik7PhǙ _D=/s\a̪4 F'g#v0]ff{ l_a3QkfffPܫ9h 5I&_1433+#՜ry8[ k045fGK~9-_YcЈtAx333¦R߫y6=zjg?fZ IDAT}v2Qff]*exC^U&̬FҽSd-ԏ*̆}_h1$pWb̬S^~zU&j|r"T U7R|D pE`*efff֪qϨ½ڞE37=ͬ?DSWs~Qљ!15m_\v-\H"'v4nifffj+5UAh< P϶v-Zp6̬;_r*5CeBj8 t>3f><8D RS?f4F|0333k3 55~(ܿu~tp.32̠6O; 65S?(_g,hfMS9ygYgО 5p>3333z 4, \Bm5W9<,u-F3"=hnwp`BΣ~mz@|3ffemG}_ᛓЃʆt'+/:433n 2j+,W!P+g|2s^ifVc"jh0^{}/^G9e '(Nz#mf/P_^ikJlxچg+M1)YhFN'R|5akGj(Z|  Q%.:X3n6LFS_H^./ffffA*MU9]iՁ[bc~PtzѕTPj|X o6K<,ˉOu%f6lAm38 o#oR[Ej?;d333F?/`*e*'R[9 _I}! Z̬Y=SVrb.I9 \Er1T'03]]u`JSdQ$c>Fغ 733e6zl0Zڛ\.')6}lD٠w?e*M5F3Sd333&(,4E֌4wj3d3dn'74E֬h85h:&4j̆{H* +M53^)CIy/3㛒_3>e=9̊?6O4L^e]O (S q`g)fmA*}p3 `!-8 7Aepmp>oy崛Dsv㡎fVos`:'f{TkHW;ʉ̲%3NA&=JrlxضXΣ}>4Gf?/'=ͬˋg9Y_fl͋0333Y A+}N]33v,xG:Δgw:̬wЙJa]u(f:WN\ٽK13+/+tR̬U?s>4wZ]33korba׮:e`>-3ڵ1333 >ӝrݺ 33%|y0KdffffMZxW Q%It23t5Su̬IJSkО`gѰl33\S}+p33XT6dS|{P̆̆%UJd`192  ^/\2̬"S[N68sjKUm4*e v%"̆&W@33Xj dsyU%^t._`ߪhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffv7K*NK@rKU33kl7[@oi=еꄘ B ꄘY \ Я'0,j,~_qZ:+WN;Z8-ff6>p<0ⴔuI=C׹ꄘ BW[v-E]sҊI)׀J#cӀ+NY7=(y̦1;nO2^=x}R^k0V: L m$;ⴔsc7@o/BgS (pQ`&^kMgfC$y'*NKY8YEQ(X%w1]p9ɵ|ⴴ$?TpŬ&_[|>m0+ؾg?ӷ;`Qpμ,`~`p0xx}f8-O7T бpI^~z`߽/Fϧ'8x_Pp7GKgfC(3FKh6htcÅ yy*KEEhܛ>p0~fU8M>lJ𷻁ŀ5mQ5x7XF̮:!9Baa{`R{87OpJץ9 |F(/wi\{Ͻ+Ma4Wm9p(p>p7N({spo>cPi6F/Σ`p+W}ػQ2,rd_kAھڿ-"2;gQõԮ>Fv;^g^tmx_s\DE Y'r~pLVN3CsSjA>H: ̺Iuwyjp+LmEN/8: Wrn9uߟ)5>B~0 Uвr_"QzZ_{J 5R$9G79c^V>vp 9'-Pc7/yS"MSܦs`plI9~^0jcʵ-n 7\h[?}'? Gi8^:lT畏_.w α m{`VSj\lBV-_F/uDGp:u\ϽʱSIzBqC}^(o=Iuf)5Eӏo_ D-}k$_CDՕ x"'kVy]π3.?:Wk2{gy + 㴓}Gߑkx\QPfl[yHuk5 d7Jߋ[~ܫy&A3g/ՙ7@nF^蚮EՀ,D-~2?q&kWeA>4DOZ#;V1glOGk5_3c}ۖ3k0}M7*ḑm5<?dxa`tyjgȒu!63U]OX[k׌G\OvՀ ԾWjC2 +PϴP~}_ xJZvS[Q3kN[ظ wY.݀z4:{vp}&7 8/Ame_a~_εWW:k#OΛōd-E=Bm9.E碀A, 8Axhi~ڃR[s|ޘʭksq_s2oAFOǴ;F&q9 Y#.Ү9{P|(~e`ChMHj{{s0Tj[/py>#P^7'2gl_gS$2 -*6I%c֟eyo 8_m$n }Hp=.8 QG#Jy ȋ/|f^esє"0\1Or#֑( w:< 3hf6T6܃zM18%#8ߒmIH*FR?;cEjհ|u*M=yqmI*U𺰢=H {%pޒܟF} $tTW٬g kLۑscM8倳YpHM{h&{4߻HovElD;C {2AsyƯqs4p>zSp_MUmf lp~wXR>g#lol}sz4 έ<p^%8&-k Io\zPG8Z=Qj?E'`sej[I3McWFΠr!.˯9NJ$u}\aԶFgxE߇R -HE$M7G 8_uzHe.eibԶwt|;3Z0U%=H~9N^p'$_ "UAڃYp!dCN7OPopi7ۖ.ƺpYS}6 o{.NXG fY$n?V&lޟ_Ґg!q6U >xA KZBEGSbɄ㏐_KgYOҕy_CЁ"\бl%zhf=Qߋ=f}$Y=-2 95=ɨ3,DP{St<ܡOPɳeT\6/A2ٍ48'xJuɂU2j1iG7̬ "k̟?@f;M4DHN%頴qgJ'm@YrGFTɿZ/{r=}hW[<3|HxܽjmM2ZQ/ٰlI],A{o*n(6'ͼh{z*Vާ*dh$,ط' 0AtO3ݮipkQt`2Ci.?L#ٍK`2;Fx;뇫dN!|'ɪ8^ӱcP>Ita,٫y Dtp;+nw[xuv}ReWR7R$#P6ni3ΚG^x۠FQU|->dv ˨ÞVa޿Ifh֥/^+k+\,'e-De]rZV3ѨG,him8窨.*I/0/TtC0vE~o@=y:x)9M\dM4Wos̚17KT>g<m;Dt"i]KM0 yӚҟc^B^?cQohh$ӂ^Ӭ#?:-wjFFVȜE™H0.nM?#(oY#jZyP#O>hx"4+13nMƋC7EtƢi8F#|fX訁7+A/ao/ HpZ4ͤ;(;w,3)It%^^ `Xd~ IDAT(c,Cǜw/v8 $a-gǠKaѼjBKv`ߴV'wj}v ?eHFX6"QpԴ!/PY4T1&v 5w[eѼyGR܊}vVs3=, %~.g/ūuC2'd-th~x\=WA?Nxx z5f7FϧP;J.$$ rihEҫz:ZѪi4Y$"θ; U6x~%ioA% ^ܗ^ :%g?oPMezOھ©L^ݫSyٙDZ(^DvyHVm] uq9…~Bk=6ʈ3^|3uZx?w/Ds Gm"$C~G)<"@CIͬ9K]!ql2jZ)*7FypK|ߋH;P06>_$E?ݑ)(z-Vv-cFӑ~{ *.|˛sFӭ~Mw{)J'$qєۋ:PnL=)$km:6# L$pgtcXwH*>ߏ?<Pt:ur;7'R}>_^ot#laCwz_l_CIOzB#m{goQײ" Xe.;/ǧ5@Y|etieA(C<'s({l/qhآ5 ˺+xv}6nj?> e^_燨0z)اS4`ߝ 19u~l۾b? bǙY^&=Qpeo^s?*oA= oTlKWUZ֥6O I(Pp={0PE](~;p8r{x{FU.M=8hߣ}KUs%е>m/oc=Wa I~ ;u/ _ͪCN8|d2?-gpfַ9087]oPK8>N.Ho +oP,=vn>I3t(#}K`A?PownDž퍢!W5$9 /o$eޣ w:p+ysMmйѣBA?NIcНjut|AwGc€ҨgA t73f5y5' 8=&C\ 8nȾX"y.kzZi ffێ3LS4ဳY+Wo)a( A\Ʊ=λY_mpe5j"Zecى34~I=7\ Qts|1K6x>>&jH.8f ::t>lL=A9nhs(_|{S}~W+WԱpBjw@tԑnnby L8*|2cQ>(}fY yFD7پ6 ߈:¼ާuL}o0EPMdKPhFtWg72gXϠJ(\4'Ok{Ep;+';fh[^"b +^/cGi_Q< ̢YhĵWpא=Z$YVI~^P"zUm濹@2Yh;R~);(K6! TXǯfV^p z|)˷h({ ʇsYvo=^:&i)4tTZPyq{뙏ˀ/ѿbPs3ql/mHޗ>,اZ=Ĭ5ϣg~hh*Qox;5gdzC=dAuMsy,?ScD:zFCmR<-B}fC=]j? 5/Cut{ ]#׃=Q} j_կO ] Q#졹rE='Fi}<ϡ@|a{c?"`! 6B2 _a(nf@w@hơ\#НNfSU=k53Zp]SeK[ D#&DiJq<(Tfz|YcPC**'xߺuf6o, tQnaq4+lFSmo(Ԏ[jIʎ2C#b}\ vj$I5ff8Yg33 +lff_8G!O8ME < GC>܎;ffffffɅhܔϣtif?"ز4ޮASՙ0瀳 %K9`h: 4vh! bfffOaff03xVG Х=/ܪ3}?!lfff XN"YxHz12GIC+皙 B*NՊ^-:M0t vBw'i̺mD 0~ 2333맛Izs[qZ '<I򯬀xm|8ꄘ _fp^=)y̑1Jm[=ڐ5:wXa>233KqgkM*K uBe xOi1|#IcBcnjIm{_5?LߧQ,#K#33fY.fT33nG ⴘ G7wп] f,}MױV}RpfWW33ffVJֲrcaZ5e\zcXF/lW^yQ=cI`C}eSwyZdYocf 鏥u{֢#CCʍ'6؇gB@yJV>w^ M=\zR݀{ ο3Ivd~oF pJL`׎ڛqG3|,ڞ.;1[: Q(!;d:{e7D=ċ lu[=nCyhZQyUǟu{4y=8_m{ɴĮ ߩEGL9G<2^0lߞ:$wx74x/̆hn zi|:")pGwǡ _&u +n׃ 8l*1Ps9؅2w@PðsҸű=mz0uLـ=MtR{tmt}G=_S軶NwPơ" ?CvO^kxM+$7\0؁dAoO:`]hDVE90f7_*'IB_".ދPOHn'{:ߨ7[Po]Aթ$+(?\ : ϠU߾}Snm"<[_-g:SDž?Q~0 8'jmM6c{pΛkq^_ _xc"^Eـe9oE͚bOU9od, ^Nv;>oO dj[/cjO:43fEƒv#LcqtS1m?ۯ@ld=$yfUIYA0Z#Q]>Wۏ.$md4 TEE. ΛZd/KQ՜/E2%<5 baO9<'G[zL =Iw/ 8qHjG)Co T䝷fl 8O$3Dzќ67y>iwyTz:%8o&Ͽ Ie΍ϟ`_33-oJN > ǐl C}@toaTFO24TkMA>NA nNK_ǂǢUoP@8koJ!dD/I~j'4h΋rQha3,#H]ltPϓػ8t*E=.No!}}.ف't@j7 ta=ԛ4gi':^yY_\,z$nMgQ/ePpyelCplmH{P<%KF߽f3uý><›:R$#AӶ5zM ϳP햙hd_4?iR8I:=/]vq 4*^* TkFt=coR?gViѿ)n-Qya; 4z9Mjy xSO8;"4#iڴy;˳PXw?M bff6(A٬h3Q0ۨ7ND46~~[x4wynX3x~9VE.B< {K¹#LWy5?@ӕHz/L-b XY& lܧoߑ{e IG=u@om6|} FzJ IDAT(B45FU˒L}1S?eS, 7Ni%Cގ%{Xx,Ѩ1]74>9V^)t8ܯ]€h˰ϤWyApfh,58{-+2d4g{T[u`yڛDEu&H|OF=WF[;/ȧpf(2_784z>PVy;܎^zB(ދbÊ*UkZEk/zQQE@ EtI%̝v>'~g?gΞf֞Ϛ߬1x F[C1'9|d$c 8Ct1؊H;kb|廒 :;"ߌ5^~ a?E^b51vJԧcW7Zξok7 P/ӈ.U3rKқ{kS41Tbl}<szNZ{:PA<ͭ,_Lwv.7:b,iפA'{c"w;ѩ|#MznJgu4Vc׭:c&16p0'ƥĽHyxusҹR%iu}5;ꂸcU?Z\5ǰX6D~$,% 1d"}q?9b~CI:π3XXsCH9xńy阓_pMyޢst·A2U+)&hIi'YE] 6aқ/R݊/!.$&R [ :$ $g{zqˉbRܲk qt?-3nJӖC?\6D:ӪgDnN徙Y;ƇOHlxYhՍH/:9G54|z s]C%WusnGDyZb櫉F A#@<lJ[׾^uDzNݞ豕?x5p*pؔgg8X!D{SQ4; ѥk駈]Ҡz8?NiNS3Bdb F7\g91D7׹rM!oC:|O=C2~?Ѫ8bcn{%ZAKjeSL6qÞׯLWdK?YF-. #\ow!ךDsgeCw͌L9}(,ڪ*]J&m zm"͹({}hl;-<*wP+d۩Yy1n725y_D^G~S&d?p,u("s-!/@!^U%I35i`+֖8[RYenV:=Ímt C~AmwVs2#8M1~x6hIyV҉^eV7@Rf{0n_[1"ɑf\4OzשJX2!ZzOJ֮3C\Z T୕)zfqW5cנha۸ x3E5mRr:sD|u눇eiKFvӱ[~r@SӿɏG([J×&y.IZ"ұNLD7'Q>H)Dn<)kp:wuiG)u4NOp߷I̛vӛþg˯foʯWoCIsug\o ~<12 toIq߀ 1sH}V>GLZEj'ԯ??6Ǣ(ZIN?=74lN[~0q>TF-i / +(ߣNǁ_a=$ƺN '[D}cs|w*5ZC!`z׺S{-|W77O+u U4 ߉'Od]_YĤi;J7(nˎ/{0-r XiD'dZ{1W--#Yn  5x?/)moBH4G}$)o7 :k5h*?֊|siˎ-mIsUɺ_~9{ %9ĘyAimvtq㼔;7#l̫&__BSb^_Pz=JQo/,;"$bgY@Eo'뷬)6cx虖ቬ RWvfZD%7Sҝy+q^98ߖDEˈ`xn&rU3U]^{b]nd/''~K4'֤4IShlu߽UV!$I tS(΍w!y2%ݏ- <gK֗J~"Y{}RGܛypCW9*sx (ΙC-(M?r8=[I;q}i U&K2߅i]ʟ= $ZA w}q+f;$^A,n7uͶ&foOZn@\U[IPΓ+U6* MG"P_J/F+ >q]G{/\ۀ3*{$ U[gʿ{ym,ETewZ 7Dk*7R+Z7qiD]TWK[?}ϱbDhZ6gףp3}"ߖ Z_ .88=f ΛXFt>^g,_cvg]!ZR_bj ,Bdc O,[RthݭNL1ǟiCfG[ǨQoi "zx0|l+2̣8:+ry%ZZG3w#6ԪmL5[ݓMmb:w>cfINÔap!!x8Ue,YDຉ$-|+r;gU +l]ImJ|?='ͱ\K$]:Ed]z޻b$ ~@ѕ҂6!fي87=D.8N#ken'zG܀4v O'O#;(ZGu:r~iFlbED0)ƆIv!u2a9ڙAԝuts/"/7mĹ@⼲A9!Z=\AL9q]B7YT~[v#O#SD|9iw}"Iư|ȏ-?; 5$uVS|/sY$I##oP$ik@cbu~ybIa}"\5bHwgN|$I$4&$Mt)\t`D8ICG..s!6ҭއݐ%I$iTpX 1&D`4ˈ?2Z$93=W=dNV$I$iugC3;WMs1IDk (&';xIr)KYSf狵VηChMwJƟN˓I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$k}0i]I$I$IZUxa1ZVz``>Q/$I$I$[}.hű8d$I$I$IZי}- 8 ܕ >Œ$I$I-zsYFS]%Q,$I$I$[S}.hkpQ*$I$I$[h>e 8ؼu$I$I$IֵD@`R2'wgi6Je0H$I$I!lkkSP:1y"$&0 +("} 8#[ rۓ$I$IU{)xs,nԼs( 6݃_n DK*Z8C)Ơխپ$I$I/J/qGe+S Z0 T2"[YgAD8X+da[z|qAۑ$I$IU߉o ,ɶ Oyf<ˀC*< XY<"͟)Z(M4U餅3Iy/mN$I$IV[:$ϱҺg$.`p9$; 8_M:I$I$IZ-Mƞ6h<l68KبӀYL>R$I$IZ3Y~V\N܉28z2[U n(9@L2؋L gI$I$i䥭u!L"&XA{ v۩F7c+qƀ$I$I4+Yh$:̳2I0Mfvэ,cY$I$Iy O0$ߜo,/Ynt ;g1Ȁ$I$I4:n~nBO܍=v]"ݺؿ~.묈M&QL6xk 8K$I$I `a$hH N.;bhA*/vΖ>E$I$IƥCc.HM $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IVIkcw> KƷ9--ʐ ؿ߅4j>lBa_"ӁIm^< /ixm ױi}،~D$)E Èr`s\41ٻe1D,Fۉ=\h]`)q~a<,W?C}.UODraxR`Qt:X?$Iji?"8~ED: 2/nWo1ǭ 8e46"߯8c;({ plK[IwSԛsY:5(tx=i$I838Y"(.l6OM"Z=sne' -c>e~@YsY$RR٧eVwY@~U8H#4=lUD w<؂8OD$١Eo2eAm\CuEw>eĀ* XFe6V'Y#>J`>Eq:Y}.K7&%}+Q oI5\I\ L2ޚa.p - r |,DV-ߡ߮e>HqCYOKfMbpQҋIӉ1&Q w"WI/>˼Sr p~>1H16h$Ҫe##B:ﲼ:!Z|7Ė}-=k\E}.$I,ǮjMݘX"xفZn\>&cE/$( uʶxE9D ޵m?FLw[}^l0Oj-n׷($`kbi{w3W?RJ>ؐ{ 1~(.>e8͈%zΚĹa 19D=+{M#&mJ!&Eԉw\`lW npE $)q&S;ȿqgax=TJ9},e >ee|=#Id!lg bȿ{(:1k7&8ԙIԁ ެ%QoAViw!S{;H#B3[A$iM"nMn<)FI٪t+S *kOLU6[WPM]zxvMxil %ZލJy$5y<^v>K[&i:^La 8弊>U'$lj*(Z|I2mcgS\Wn!Ljz?kԟ'=Vn{ߢ|'#˝k.8 %I*bOۀu0FZɥt.Ҁ;n^4728y뷇dEˑv$eM{$hn<9&o$nȃDwDk4|Hă˃)&Nj7眵%43jip>$Ή{gSݲ{q،uU 8ϮXo}<7IsF 弙[3]c$ӀDAI@k4wXvI8CNnFt7&yzup~ST.K6&c؜d@&" [m3B'EK- ~en[&l@1ɘkdsB^wM &݇av|g DWoqu>o( pOű;^PL@[wf5i$J~..K]۩N浩$IR 8KJGy*V7#),pLdy"ݍ?S|OgtkRxVM;$dTbȆn8M$ꢼpݹSe?7jQ;?ڟ"nG ߤMI jcSb+)u+T Iu:cM~G@a3L!CG8?&z<`=,I҈0\/9]A< ZILq?1Dghu t88[vkBlwDݸ?"լL_cx[Q #j~{2Ug^C~*a ^ ܘ.1 D7J#"h$-dO 9aEn?&{:1ޟiI?x[њkg.ږhu#Chm0򭛡!p =D;sQDPyݫNW;g8JZ}Ylahn쒶,D 36%E 2 Γ[nU%IR{zWmҞ[b_ҴL)+1ks^SKOKٮ?,Y> pqJIb;{$~Ou 4jK_^L0m3H  Q?64 +}?n]Ϗ%iZ̝Rl݊igd?k6W-rP?EY;*4)CC4uEqzVvMM[tO\/޿ac]Y +֝dTbHe牝*K=G$a z7';ִp7T乥d "p;hez=Eknޟ~@ۙ,K}50ևƆmi aҺ:?7C?^-O1)HxF|v^cMg,Sؓޟl]jR2=2b HσĤe齝$ kՅ DCjZ 6Smy,t loqmek0QbE}츴[]ML(OOZ{HãW4]y}453lHE*7ne*j;?|>?^[0'ʯ)gA$;Iݹh:bhVnԍC?V'$K)oʶ3ܙ] 9a dݷ*>_iDA\ۃ*=SN[n)k]Շ1.ɶ8:Y`}I_ҡ2F x *n@L Lhm: As.Rl BŃ'|8~ 14sjKRusPC9TSyHyfӒ472=3YUP#9]lGܫy~E|{AsI &JUk;1 8ܝo]n^%K=F| m¾o".dyˍR'K1۵N6 b܇;+i4-D eɺ_u U9uGC^d bxtLDFE[8Ϣ|^7uoP{7Qݕ|ˊQ 8c&$1kMz# 8(ܭb{CW ('u#pBq8B %~s cԮ$I҈ؓ?3D˵7Ui@"1gp97"8Z~If?9N~OAR\.y"S@z@Зupx7yU-K'`hNH+AequuDQ"mΛC:ѽĹj DV!E=z;yWI#[>8<  ĹbIE9i#\q8T婲9rND~"Oz,:`ŘHmBs8 ԽDùDx;$]g_ z=.msަ5BRu^ؔD=A1znqKg[C ]$iHx }.XJH[8އrm@sYIZ5G14\~ڌ\x-Ź$um֯"_#P.E$ ΥIܡMYUy"\ab%(i|KǤc/X/sYƃR/ 4TS(XH0@esya/sY$I("%-ӱL?ߢHakW,n;$ͤdxǠN=b:̳s(`ٵő$iWWnޟ-ϧR~ѷRxX.RSXk8n`ldxZ XҒ4T%Fi c7[U},$I' ?c]GLtq(>klK4:'zt2 dw_YK.B4o͖/!&]K$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IrNIENDB`pairtools-1.0.3/doc/_static/hic-processing-pipeline.svg000066400000000000000000000563741452673171500232150ustar00rootroot00000000000000 image/svg+xml paired-end DNA sequencing reads(.fastq/.sra) ligation junctionsaka Hi-C pairs(.pairs) paired-endsequence alignments(.sam/.bam) Hi-C contact maps(.cool) align reads to reference genome(bwa, bowtie2, ...) identifyligation junctions(pairtools) bin and count junctions(cooler) pairtools-1.0.3/doc/_static/read-vs-alignment-vs-pairs.svg000066400000000000000000011223441452673171500235440ustar00rootroot00000000000000 image/svg+xml side 1 side 2 5' 3' 5' 3' reads (.fastq) alignments (.sam/.bam) ligations (.pairs) --report-alignment-end 3 In cis pairs, we reporte the side with a lower coordinate first In trans pairs, we report the side with a "lower" chromosome first Pair reporting order Reporting chimeric reads Other options Unmapped reads Reads can have no alignments on either side ! Reads can have multiplealignments on either side When reads have multiple alignments at either side, we need a rule to select the one to report By default, we report the 5'-most unique alignment at each side Chimeric rescue --max-inter-align-gap ! ! Some reads with three alignments mayin fact represent Hi-C molecules formedthrough a single ligation event UU ! NU ? MU ! MM ! ! NM ! ! ! WW ! ! WW ! NN ? ? ! ? ? ! ! WW UU UR ? UR UR pairtools-1.0.3/doc/_static/read_pair_MU.png000066400000000000000000000410371452673171500207770ustar00rootroot00000000000000PNG  IHDR%sBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxux?(A!$+BԨS[گWzNFP$!.+?Xlv"z<]֟[e|N5^c'bK%~2CqcKR yQ%i3}ڦwo mL=ۼAqq\l<v2h 8G gܟsY[O[ y8fhBS̢l汃Ŗ$U.p3?;lIL9lh xs#_Ht`z>1-߰}{p,/pVnZW۲d]8*\ŚWoډهu8TmYn% ?)lxk_S%nhr>#dC:i7(gGNb7_k).⍵& OGj_M Gi%yqJ[lIc;Jxnr[lIaeYNS_U]ǥoQ}17TdųWiP^> ˣtĮ2VL^y"{2'l\ջY9m F[u哶⮭bŴ)k+HJ HG 9e` L/Yoۊ{S8=}~u*~.j-Ǧ`Zuki[lҏs3hwÖB[l9o glXW lEx.V=ue^CiFU/\O] @ &gsFmj/@ư-3,#[^D=eaI6ekhŖBPnq%/zw| *iƍi.w/Wbu9#K% h-Ss׻~pB.Ŗ+g3O_?[I{p02j'6x5k DɖM銟KGZ-fiGRœXny"6}?[l81HTW =wjݮ`rqϣt[B3h@w*o/:PF^mǨQ{ExlczKk<Go--?N.sao(Ezܕ v.M3iG_FCβǖ?v#.gb?>32ƌ8yܷhvHj""n˦ ɖp{ªJ[Q\x8x2/Tȱaa<8 "skQDww*7dݛwkH;:[l*\7m:l-yJƓqRS5U%.sμ[[Q EŖ=aK񈤞\=Bk\a 9Iܐ)ֺ5bR\dvl~v^^[2,ܱW~vrT]$;GD$՟6 \x 0YWs\Hj* {}38ltU٫qU^dMy[öe215Mk?r9 vlŖqRZ~qJmf-S8-=Ckv5$t;.ugedj7֮fN=Bc0Y6BWV66)Fk_7ב{O|Sovf@I|E$5Q$uEj ' O?-k_GH(YW?MDB1ؚ޽nE%%Kp'e~=)\^2y%+mr}7kOC&GLw/kqͷ-?FY-6YoSLpxM ǎE_k'6cf(CJ|rk--a[g\PYcKhɽ|x-l?KkI=&[ *ypB5\EH#ym9<(MLj\.3 $EDGi`Rv3uZXSbD/O8Q暹Y].p^p$)px|Zo5=|6fCj`>;Hg{÷<8FNq6V?=ocCȉdOy֖$i Gzp,9S-גG&ksIE/ؖkgisه{ëeZC[qb˶?f+m#pggKG\PCN7^ۖ,:bkU%ZGppm]D}W{a^Bqu+|4V빃8e"sݬ@IxUvz[$z(Oډݖi9 3(]#_<?{CLjC/~/-1GY5RW6~۔{"LYe$ݺd% x^[YE0"ɞL,o[Ï[lWƤ$潼u4d.g?-)I!/7\cIJ"tOy1}I.Iʄ{9Zۚ"9t~ֶ&&SHY뱦|,9߽l-F2=%߱mGZC._el{l ڻVΥ'mHwo]mʔtˈMkM"rIg. xMF$pc_nWg&4#\>,TIa-a^Z akl[lw&qƏkJTL? z\gOPG[l}i;b髧ٱp-hSqth(! b\^/5."SiTjE[BN-JXMBˬ@tWwmrt8aK-dKHdbKomÆin0/x<Mc7b\ǖܸOCzmBw6IAhyd\\ de|~vXAhqaJϜn=>'4>~:;Fri5V.]$SPbd/LB7m4;b(4=wrQ_fXvM6vgPwX"v\|b^+QAKչzGN_V`9M.Bw$uIso%ʳ㋍m씠[*m|eC^Ah4T7\{FZ,İ]QV%拦Uhka@V&ND oR B{UnCz[/汌 (,:З:0֣n=3u{(7~D=8 B A#fu,}Pt {7no'c'ty2Q+o\[~ºBp~j.!UI`~Wf>eme-'{ם,g9C' x kJ"!`JCMqM>^}*hn(WFDr V5n?ڞxEu^`AT Poi}X4V=~zB0pŽC+^YwVơ)AojN`pӁ肉Wh: ^ FM9>ϭWGj(b3Qڊ =`|c, e:$OGƗ^՗2u2}ٸ{ `tF {E[SOw"h:\ N" g(o܄fc{s9%UFL**'1Pf] @%xAT jT'o< 8Mv'&r[Ò&h}`-}ӨnL4 %gwB'%U2o6>^T,{v#,I#5hC%507gZ3da>AmQKÒ5X^5HJ7p)j`7~5*znCڀ8esF4R=GӋпDoB\]'wލ aM{Q1sQ)$~ctlߍ؁Uo"LP?FW]aI2n)B2e759.zs1f[š4=6E==|Bu~4kdV#ݓpW A0ZCi.Gl]XlKpNQn֎yEF)7_618o-=4Yc;NT{(/XGu/P't1](U;):Ul}1z?F`?ǾD4v8x566s9וKf\2[hznJTG{O#',芺Gm%8Q;o:C,pԅVJ KDl`?I(ϐU+0u/[|d ~B!:l%$*HG=Mduw@˝-tOVaxΟZvŨd$1OyͶEO?QtQ l|!QnnhcqͶ09atn{Pi߀CM]T׽6ґ\;(XO JH$竰'{|/8QaEjl,YK=nC: w.MDspc<|]#,)PRnCdtRwtj>%c}(MЍ n-lԨ_A{?b5%mޛEg§nCOOT֤\IIP٩|'ȝ6ґ CeU8|SQO֋3(;Q] :5>oC7݉J{+P'< $$ iPE֚$۝󀂰7 C Q㽽(Z_#]5Z w Qњ/,G;vf,{:1cԵx:cwU-B GG]0_{| 7mЩlպLQ( *B?6^2p+ @y23 X_QDx)hj^PixzA@a r-t3{zՠ7 BPٝ![(!_k75w(1IT;+žY؍5 . s=݆t@bQ#&HA=a B؂ YH*T4ROEHmC:@؊n D ]|xEZAA[6Ġt7GmHnon:hAԨA2i t^Qޯuv tM G *='^*$d$, Ay6߷ې=rb!D j=Ĩhj U(ynneAWZTeeBCITlx?SPYAMɈ8S&z%$Wx\YIIM ^ot4105VVz %;u'Vir vю|V.AEO8W;ha26:(FiFTzbg7ƌc&xtm q }W*+xp8%I#$~'x\l9 OCQ{٦o=ɀG3_Υ?hL&O)A6;GD&4EuzDHƨq[, ,/>JjPn1_~ȶكΰfN+vrt"C3A|x إUU OHd@uu:MY{[XMs5wq 7Uʖ8_ÛOO\ yE/.QHNK4=kw=LzXGtG54f IDATבDm`#^jg%$ÖBG+vr Cϟ|W_ԍ|ou+iTs"L1$ Gwz9 aŏ?d,sعGwsCMm nݟKM>8ꕦ|zl,7_mmt˱~ec=Hk[u z^_M|>e^}X~& \igبБH;Z"R੯qGkht* ƐO;ӚMlU>2'ߍ3T^>Op1vOP:TrPsQIMS]W s1u1g!7`#rFTnDcK5|>i`:+kVQZǫ̌Lpvim z^^coO-_U ߱hX՛oLJP{;ùt~#˯(&#&o3+!(Q;J(Μpy^L&6]hӚk W.[;Sg]k,3#s P z 0_E@qzPN@{juSgӚԅ[KKwskRjEwS+ɽ84I&ˇf|oetr/{;>-HÍc}c~{;22dpghqgq=ys 7͜F].HJ!+vy"JBBN2ɝYܜvfwi/aI5Qk~ʂZύtᖏQZZP9d`t3q~\Frj vqjz6ƊrM9|7%9R=9Ą65"hh &4Iz謄$>-؈ lχ%e+w2i`~?"j*2'TYi>M{;9)-P53nmn*ۃ7+^CA},޳ ʌˡ 2Gmp#5^n $;Ǹ̑lc5Sq1)5"R.@VXYÉHT34Иv݄DDٱe^೴NyBe ; :g}a *-~vmg/=4LAQTΓ/; BPnj#dm0ДukV?$!Z{YN~Z}7x;EKgz4/ޣǑNń((ZX?|֔i`Mƙw޽zx *g>GN} -"/iN?7,b/8jnήf?wv.8̛~IP&t 2 rb/#.:ZV;Ӌ O^M˨u7I=9wVѡ\eZ]}Xe:Աֽ[xc?,;k{B%<.Oڕk18dp>OC-Ǵ_MdOݙÇp͸A=vۇTlSkDDq_v]V e߿ЙANT)9+k;>.5Mk[zYdHWe]oBym-qe __wv?lюfeB9a@Xa9)1kjԂxaYfoaM{Z{G]H˥3{| $۵vݮb }Ѵ4ɝ3s]lYL4ΉyxSpQ\KL HהM\ns/<w+Svi$ICfn.`.A:r8p\]zPdYԴYwR@ -=lEP&toGM4) Z;<.ڕVP1_ѿMx=)IqlۼOL2Shxˉl:oR mϯZAKL'0p3 숐dYoOn^I|TkM.VLզԱ6w{o_KI.bixﺜ&w wCϬ\frg ݛsQu5ჇMsywFK#-K3,3x]Y1~δ3nΖs` +$&; wF2;jk5h>znF?h}t^:ͷwTi~zR(N 5.XԼBCIջal` SqXd-bjR\ljg'&m+6MoĄ129Ykob!нNbsɷ]k+w>7Pigz_ț^O4%)%Ju՝]Y|JDsp'9abx|9_k ~M|^ojO[Xj 415M75f#֔$DCK u:9a@Bm[sqF zEN&tf\` 0ˆذ:=ѕóM >.'8~ >pETsxtLSn,9!$ M$1lUyEKix_M|^ϺݺҡM-UUQަtV"k FhZ\4-bpf opy<,VN=J"ºb6ϜICz0ͭ 4A #AgiulS{B& 2,dcr5UZ;5(l%J?~AJ?~q\2܁ネyl֮CXQnrҏ{Eó+I\4D>xn * F?l)dN}JCLSBP }M`\9w*ĩD$ImJlyE1';zƐO㏅.O}lX0&vd;n 0gYhhUCgiͮV蕂œN1Z@ֱ %3b8y`i'/J 9L5}^: ϫr.cf-g/O倞psμWd1 ݝ߼` E8vܯ5A2sYC&6|YRh׽yBB'~0&"VU򑡂Ϙ^֔i6ZXV9+#45:^\m2byVf1Kx~?ap?+3gZv`jb yAk Iq+XtXK0B$@,[K0kT-o-(t /p^V1(<~~ֶֶ=oмmbDlZǺݻb>b=_F&3 ϭEYIMFϭ\NUcH/]ip?[KjkxҖcye9nF pk0Fcەߚ20Ԭ-uÈ5=6S,'/3<"ֳRwy^5B$Q>oQޘR":i+-f3+goa-rlͨцdZϨU\jq?tam& ƓD @: ]D-%1\mu9#REC9aH5/u6iM_=cLYecovaGm~=~G^dG6~:MSo&GЦQkgm<Fk|C6df `X_/6k#R3.nh)n >ԁgZ~77*6]4d},gcZI=9^W~ *Kf5kŦrF AyxGN^kOŴ/B?3k/.Ik;"b-Wn6}֎NLʄ񛵉\J`q0 p#u<Ѧ'z Pwsgp1pDc`!V 1ƈ9JKZ-)nSܚX-u BX  4UbqL7\f-T*C-K\xtr/&C|xm6L#<91F7yLi7#h̳#xG/k{`!PNߨAjG13 h9g5v:4-,6T9&--.Ϧ ڮmfMY^^TSw:20^S:Blo\N9|bR Wn 辙;b66LݟשڢG z a1μhE?{p,9񛵉GЫ[Y7||^4˨v xhX j\߀Tn}:8KZ£z@n &4d:P\u !iQR߸PID-.Z׋ HڇKڰEt@1tƂ tibRӍ.FdXv4={ }w9PpAv pCk9Bxo(!%0joX.ODB_R̸hJ|T4@/Hg,B`S K6.z(T3C8pNuhWXnAHd i']o\Eۄ?Bu~ӀE{tƂ tR?E16#9{XƿvHg,B ![┅΋x}pub~66!qKCY3;\&B du8=hX>n &3<춴](% m$nHr0.UI輼s<%xzߔθ`팭mAZICE)ml2G e/5,7.jθ3Qfib tfOC.JC * 1\g7.[ n]B:΃u$, ek~gOfdX^38Hhlމ^={ZQtM-uo^ZlIB`5 >=4SBFƝ >RSl/0.b9B '7K q-3LX-k)Ey 6#o24 jK[Qԝρc v"uoߍ׭UsWi)~@ϸUƾ'O ͭ,q硸%B:]/4.7Mn%;}6;FKS_^BWIDAT1.JU==k<#x5b#22K{pUWU6#tN7J{>jx!PD #bm-@:cA,gcL7QZAh+/PDTkO\JH,wriZs)j.B ֿcP &s#9 WKZoQ8Ԉzg`j,t1P1tƗ}U x#z'; z\jBDӴcn522QU?ī?Ӂ/JUݒZBXĬC}I 0N%dd,Bgת_` 3+xn#%dd,Bgg-05^J9QSȿ:'IENDB`pairtools-1.0.3/doc/_static/read_pair_MU_MM_NM.png000066400000000000000000001250171452673171500217630ustar00rootroot00000000000000PNG  IHDRsBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxexWր_;8 NN1-oq˘eN)M))lymگRJI@ӆf;fq,lHw$y$#y=3xIEWLK$Ci E12FQEQE?]T hKx)`\X 7-(Q`pmcvV뭁9ÀMK$SFEI&F%G* hNqKS`ik4x)P,#RKqE]yFAgCj~@]“L.yQ޿(JD5((({MK(Jh`R?N&18FKx%ہ}((ԉ ((((Vgҁ+UۅӘYfU. \&@4Af9{-Ⱦ˶9YosiI22{DY@mel%4ex2Ǽ5(0f^kQI9eJ>e;w4={KO(zs/./m 5ŭ%~q¥&( wDc[wmeҧcE䭻ZIKҧ_]=l3Y\R?GvqD' !ZSP:WdWy99iisW2SSX+^/_YŎ2uťIZG''VT[1G?Gk,^vCi!.@C. lh9 u|y\V>ͫTKDnD≷BB:1o .Gņ]Gty3u90Nv=i=FgҙlVC'w.ː#wAmrN>܉ݺsRTQAQEw}GjwnݹewEvtq:[.?Fp\s_vC0y4zߍui9\ie<{v^ <طº\.~~O l3$ \VgW AѸyڄ˙juQ\OM{J|2II^vnbKQc.'\̟p%ފj~FŔK8bRl݄{EJhv=+2.mp S7;v,ޱG (gۼX3:v#O7:v#Py?rSˁgvgs9iEi]srQ36os%)w t0o.A.37obQpQKy66{F:ˋ1o~=ae(e./{H'|E qDKiEIݶK |rA;mr"!Eq OHkҜWHjV'O;U.Y@jV1\r(5^]\R1]o݆KTof[2k\.rps|^L(x p5>o%z wPe ^6T=̻Tl\vL3S9}ٻz%zc.gv8˶⭥msy{b>_ʐK{.y+?JJw%5 F?OZfF\xm&.Jb %sbZiٶFrym.c\00m)uQƒfǒIOݦ!{رjIf\޾Ѥ}/#.KÎ, .5)'ݗtX޲9 ՜ӻ/tTO.gZqs~wo\QYy㯠bh֊W.qQŲb©iҡw˶y?t5'XX`oUow;ZZ3.S?dݬWow=2&xԏ7-cP3.~ȟbХ6b:(n^D?Cfvf\^E]°՛(\5ri2̸,~ WIOJQR<:UJ*+mT věs@VVrSa{1Ǽ6Nگ^|~;\ܘ_U.\#52 LzzsQD!pj=obH!pͥ\3r7}^p\iEt]m-+]̸Ǣ7-Ws.uii<8brZZN덵 ii ge;Ws.{3yqKkdE1Oњ,~]Ң~t;3.k{:ae,|F˾t?F#.JXv7l5re_1C. '9yzLaVݽ>'/˂),j_:<3. \:r%:nޜ ޞi,Z.5ACݴw˿ l֜]⢘b捿dwߥOIZX]d@ch'sʒB8H?4&B]A:M0x}5!n~U |˕Ѥ}>"ynrp2qZ q"c47\knᵆp;C;Nf%~f086dڀ¹]Ϲ9\etك>tǥtv yfQuA%٩ sm咐E ׼koe޶m|iK-iNm+]Zq!۷e3rxs"H0$7t[jx6(E M2/ ^Ml:%#ϓk QlKz&sy:77@'޴ \20ʐ$B\Yۣʄ*9y A\"m3G ĥM#j}l `Z'U[:qX-۾:.*6-.CKt3cSKw5t^vl F\"ؠ@zJB!aB]-%wKk" +?'۪{z)N3e@n%%=K]&][-SosD{+z|hAz+\8{W7pn|-.vZl}>VmIZFNjo^ETovOn~j%!.voeڐɠBl]yԟCHqt-]yfϋ[]LHsc2[vEO0p{κ.c O2eU9%/{9O][I᪹rYzpc˵O֝v3҂yw\oȋ.u9sjfkrB7w)6w2e;7r{d4jU`]gۜ\5L'\?&SsSrl;}\xՃii6d+\RӸ}pc.̚Q="35[SsyU.]Ğ]sC,u\:{H]sXt,Ɋ=Ac7?Ug9/.X',xGbߑ>μGǮsQc֠0G.qy2B`^o*O%UH` aˢZ^X~嵱8;$|W}4~]5Z!.]<%.߽).#O?yʉerլp9niuڍ<#.`dP 8ۀ\ *!.y-nO3.ws]1xMiނS1v3NTQۏ8;nU /CeMf^; FM`g(h|~ ."e _˟iexf?VR$ЄKF./@wQ˄se@:x(=&m. F浥TˍsyahL~5<x"6WlGk<֌\'h};ƟHU=GnZ kZkye<9 h=h3.gWXr 0rVfW/ϋcbjt:bLzɸhEߐ1]m߇mpC]m;u^i>w6^%">z':p-Ks9Ҵt=v߿&S?3.^Clych6ܼKytGfwk#Tvɀ]LwHS.tms_L/$Zh>zĂuiyhf=[Y,8m"M a9yzҷe_櫗tc(=O%ocsĐ,ynqk&D#._'o-&7ݫt-?|\ՇC;qaҳk\H)qYǿ/˧HNcK`GH4yŬ>Fǩ=O5 $4WoI^4;.=N5]z9{q96g©]N,n&C#.O?m]3x޶ /]x$ $d .&ϋbO /ǬObxK7a4Co89f<)d:Tb x{c^4cқpye \l祢yϏ6R1},ڱ ߛ6ٱUz>rJg[ɂdj#.V\vݳeK&]ƸEqT*b6 AP]R nfQ_\ᢸf(9R$Q,|9ȱ.Loπ+_$%=rf\r(5rٸyIib("IOHW lW"8`@b优ryRoEqMVݾ` ?xĘK\Naev=w.;LgfK%3XfDfnyVh#:u=cuZ]ԙS u C]غ%ֱ3eEq')\1<ʋ1oh%p?J]3)5zcEvq)+Njx}>1dfFJ*؛N%?.syp ViEqMToo>{Π˃.g%z YN5+?}ƌKSEG#.+aHuQ Y\ f.0䢸VC E'F\A#.\&Ħ_'s9r˿0L:eW/s GL6siTVͺլ97JZgJ;Bkecq1:ڥ K$Vi<)cp\q;\VS e_Tˢ7M< qh?oX_}kA\g:+ %.tyu|[.;i)?{|gdx?q92Μ>'sWN|:ɢ 6ElۏtXyԠI ǀw %.'7Eq1=N^MU @|c23ry% y%QRed^Ll+5RrSRR ;[iz:py\b[Zۏn'Zu S?dOuƩworٗ'mrm*NuhA{rLp9{O͈=L۴!n=8֠+.qQMмpyY(޸E{\7r{b(d'xx {5 HrRKC d ؀ˏ}^oW1 ~R}lg!t<4[2n.$UrLfZ xaRJQ;2'͇T*!pQ#yHz0PX+x_ٶ5%|?zNj ֞VbK Sh"rʪ5/Izxn+s95%O7/242[.5;!b$퀛H  [e $=5A*%d&ۄ-w!1T LaEq_~ `&ݜZB x5Կ(N+Vx@:/7LBOU۵uĮAꂭB(ьTz3xl;&8 O)?ߊc 68Vq? (ܬHOg*(Bm:ʪZ:"bp!i[V &A?TҝUFkx4ٿL % #緶lYHPC3dPj3'4zcj_y?{3nX,*d~ۊVgSm#z @y-?6=NCWǵ'IQS!: Xwxȗjj瞉@L 9T{d IC:Y*gLaEm9YWK$v|q%co>p!'+wQ~CG'k)XB‡ go]iWl.6$}O@' 2?x 7 !/%i\Ykw"9q:)VlƩ)I?> d-3>>9jJ=ؗ끣)FRFL$p&Xz|305C*P`|HH%U]5%yw a R( Ϊ'6r}ggc;75\MCǑՠb>*rQ#CTϵǣ%absr:=?s?JM |_֗HXNj!%RZ 3|?C*!hVMzajrQ6y7;يwO9!D? \M; 3%HI>,'۬XܯH~<JL+8œېk9΁}Cc߃-Jv2s_sq~:-0-p:#>$GcѤBbF7 wfk H!h 6_@^FTB+fLف'ؗ}?dT}¿(I p,>q{U M$ȊdA&]Q )"2_!a4H]џ? jr3RNR uJ)C3i>q#nژO>RR'J䴍Aݐ.sѤMJd|LX9i+\kk6:PINRB+Éؗ9v7R$x y+nD'MyHJgj_W?6"a1LL+.kډEu.Q:[ґ$Bːf x(ߘ|ⓋTʂlBZ:|V'd m=ߡ2=+>2$u`Œl#B*5)iE+~&_ hMҁb 2YJ| LQ*>dIEt yO2$V{8p'9n Z(!);Zg͌Q 3>Fsx]Cfu&sI8Cbt|UڥV41q1 iXKU5`DXO0 b$Lfu)3~D?+J,W8T̑tnAʇE36|624Gq?atθ|6HGpS%pySXH LcZcWǎ wNM%>IC&' ƙ KB5~UrXz#a҃s 4 vt'|?f%x6#'V`Ӱ2(Ѡ VLXuB6uW #&VxݾKi5U ?Һy2l1?ԏJ9L`n }a!m~Hy\D wk'G ̩% h[pMHɍrNDM(>,EJ+;R& LCJM nljؑ!`Hv͐DY\0dؗY`o(5 j.j ͐R/{poCB,nfU{ aO`%x-!E8Q|ACuR{$ EmX27vV< `6IW/Y CA(\dZD*ÐY-ng:#/?:ч ރ4v. I|3]"%x5fuvHY` RƸ}XN*6܅uqN3B'+b(HZI_#c (2YRqڙթBODxrB;gykN7> 蒕=F8!*6"D+" W ϿC[DX_:XFMgٴHL)EffV''YcV'UnE- ׽45U$1 s}< SbK}ƴH"dŭ[o6<$4y,;BB#63]dVK"N;$⠠n샶Xy5b.p$Xg"Ed"1&m'e-L$j#þ]n#+ώ&{Ek,Ss"DBw~' (l q#HsWFvX_譐NBa2Hw6j -r,6b rB%CDADp=0!eRH$g~`7vIa.ϴA/?eZ4trE'+)MB:CIn@M9yӬN %qWT7k `-"aX,ƇyݍK" Ҝd ԤJ0 \B[|W2LJ9+xmNƙy{WT3-#C mýzC:X,A&d3gvI"E\@s׿mVVڸca]a Q|iP㑉Y]c IHA:)bGB*\\=MT6 l_sI; h#^H:y8$o ?&2$w#`% N |s-658-&^1 )G81"73-$@f5\E nQ,X.cЉU& %6x1J'~š$v62hop&%ƿƼ}fr'+ݰ΅&T) 0 NQIEB >{2HYJ*:_ANX!F<jZ$Eʊc p_5/RNF^ĽU4.8M+BdUV?.D?B'K>Q}5EC?^di$ :dٸvZ &~4ɤH(0R] M D_pOlo?mO|2Ei,o# n/+ZF~UE\L$:=fUavo@wǾ2F?Ā1 !,yʜ⾯a%97(Q#Ei*wS #͐y?"u{"A,C;Npu!r h[p_ckT |HԌY}3.KΡ %W ?'6%V G4E(͑v}D$OcB #eYcdOI2= W?j_~lpR(8\S+%~AEQC R?xkUY uz'"kq:4ni "KR|yF?C欲(6. 8n?%p 2WԶq>_\Khd3:($B̹U N,! GWZu%d#sV%+^ː%y (A/Yu|2%s+q6(xﰾwEQ:ETbh) FGw}g!H}󺊢a+NAOEViJ.EQEINr6c=(IP2fHp#IQbCQf_ <p g=pt4}(J l*uH:s*Yz$+ÑDė e׾)'n@c+(p>F6,;Va5ϩgJ +] xץ4MWQXO/T.8WW$ȯ~|c(q;i+??"t#1VI"7C:Jh(Ӆ`dAyE?=" 7(X[{vW#~(&Pƿ?P?z$d+\L$U^BW l J9ߛQӐXzñVH~Ua"}Y,i,nBˢ2m`?sjqXR%u7nZE ӐKppW<+us]tK =ҨDӰqo_?F"Kk>34}gN:^"XG.\F*7%k *B+ꋿii~ IDAT%a52$7P3wgj1rRQUd}v}ejr9K s+ꇿa<8~j(X_\?uP q EZ7Hل_Y|!/;dɵuñ$O6v2/||gґ/L 1) li%e1dA/EWzc}n0#HC.$νȸLrֹj%H!4DSقhPXx.n0rxg%_MarYWL\92R>ك~QJ)e\2-%yH`z ?nXHE Z9j_]8:g $:eӭ H=ٟSd!+ˇ$&mƍX+8'DP{cG`yzV/d}0(3މ:?j". [TzQ"ն}jy9O[L(qC3\d nD B͐їc%( ʳHy]V6XX \Gc|g aUb]ε{%hj(]}]܂u2 (Ɂ (=%2N=)$h/6Ch3m(+J5ާ,oGhrȹrbf~ z4 M DBp&!(}hx8m-E:I>`)Rrν7_"s25h%5]g C:Δ p0@;hCOjQ͑B;SG$;+%>}H${>d&n }D5b^HIXI:nNˤĜ,d .BTv w^G:A(u dr)#zvH"`NA 1㍣Ers<]E\@>2cl >n\zX}@(s<MdP[Qљ@ 0WugE 0rS ϐi :vQ̓5ЁmX]msm_Fo"AM?"咉J6HXFv ` Ϳ]& yi%tFG{'L#[+(" 1' Y%8~cͩ՛ 4ds2Y!Le௴|1?Q LϤx{c<+=)`UJp6!8|18n2;>pWDGaXs4eS%7d"2'295# :vIt L"a%2!/"m-\xGr"( uiFdB>̜48,!t}\NºHGv5M8 ÿ(8:'&Tu/F##,?u(J(+Wv5J7uNm5gɶ6,.yôHĥ[N`",Ʊ@'sj1!NEQ9)_26fZPsh2:֡cE\bݔOvHӴN;1DI$lswa^ +NCbf{qӉ(t߉H:p*k#15݊5O$jNX%]ϑ<մHL($n̢CGb$oD(2kZ"r6R{Nb׽A:OBB2n_Luh, DX"nj5,$|5~D c-eD S (au*YWD 1CFE^ErrBlŲA~g "1)H!w$1x xH[-;.8԰K48 z~yY՘d#m"M2k(8RBD:효?Eq72?"$(Hh2:> /  p2H S9lH\}KJu@Wy8~4AC Li1!!#3ˑq<tBL|gȽۗІYb!^0 [ | l,YHRxxiBYRH(Ne? `>RY u>9D,D 9.D$HrDYI^dkXk!/t? Y]4-*YK|@$dN*( g;XvE&d+c7Qd~5(IdpC((ed۹PGf~^Ƚx.+ZQ%l@LDF~lFbFVv6YHGP2%VEW$Xi8oxj\R ӀO_QE c=&$ ["  $PҐk.4D(VQUO$E׹fuFtdպ( :_DVb2"s[x!uj NA_"3Ϭa!us;?e+CC耄"sbM2PEQC ZiZ7H Ɛx,̀I^JΫ5&EKt,Sܳ5:g2)ٴ~ ZU^{|׋ǓBv.v(/TSM"a>'vnZdRҭyśVyߦejQd@l}W &R #$_=rD液+HnJf~ǐ|[w1oy}%n=SgSXST-Hx8C'Y ezvWT0$5ss_|Lݸ%teh;h6|@vZtD˿7RlߑuAπxSGl9`@͸o|ss`}:W cpeή~}xacte6_/gQR)xyݫOثtMO=ZwkV|*vd&v|<ZCNI9Ľ]$97!ԟ w.JSRhT8{DFՌ4SRR|z{x<rBfKyUIZZ`mۗ|㟣 T6JTkv.*Ys'%xd^/wdGYssi$k ٰ{7>yFx}[i)+ wQž-#JK"U犳-/l\H!-'RO|^/)除\?II%-EH@e.G<Ҳ=f+?|nGjfr[II[5G0+{elD'!>x6to[ԗ uO,);lޚ^?`3j{[ط߼V= sxۻ-aͤN3U3ޣSHnֹV h"eҷs,2i- SA lmf4`չRRzu~dƘ'RRxHϱ,TbRzq7y߾dsWT͈~5'|}#3=CnO虖Se%{\Y< MeW^N6uH 7o $L7dd\mx.@:+^ndS*z9ۯ]!]+ w2v}IFe5WڢBnEٌwϟ?OvbsVTj3‰B?hjké#FZmAZ/?*YӤ>_~֧jnUɣqЧ~~;aСX: x.$Yl1TAC0vѿ`d}NX-ZbA18~xWdry效n5cvp8]/maףmcnBbVuP'h]>mAez[Tm|S7X-meY+O_1M3  C1#.AoQR L&>ޘQԄ3Jq焉n XoIazCjv=Gyg"q jTٽv`6J1/8y\·'5--x>i7A::c7Z-FYQ هPPەTԟoY+O7^>7ڂ8}U&䬒 75B[S=zH5*詝;ou*Àh? 10]` m-CpE|خOka oe iz)} cbG}kRcl`<.B7S\w)ǶbmvMK ^/OyҧHSGFJ}UYȩJ6[CsQ,|Ҁ@աq'c'Ҁ@[c4hVVm0+],/B]q>07 73JA|a}GUNg@ดl[+KPM=lҀ҆F¡98q3Y$ZJ'G~/9悛82a=K  }Hhl 8 @D=<_,wc!k_9h(gkYGL*uMgAKQo;g^Wf6&3w 6Ǟ:ֺJozVoEo$/=^+z$4SvĔ:ژ giiDΚ'h$b.;/ghܡ&A& 췍 U-Kߍ6Q8IZW@?mćF{'G4}:Lץ?wQC3޴V|@=0tn'Fl} MBUfnM m`q$ۧX,xvo_"'w1 E%z$%_+mAڂE}-gݐTD9_o܌m_Ao7UʺoC[/~= w1B-Sm/\aТphlJUuNnU>ŹQј1Bo>dק^Sl)0}ܓ6ISs{䘮2IRE1 )H}SGlO>/G[y5X+}6u59z#(=$ ?٘E;o FHa_5]`vԴT >Ru}Ö9Z̩7EW+E|;< yḱ#5:ij䋤ʠLJU1l13ڂێv {vኈGEz\^i$%_']TcVAn Gerl'; wd ̦yp=-;\}u"NENƣFz/ǡ /WGģ!ӝBcc ✚jl˕O[,O9!:y4bߛVc8&NoZX_YҌwH@iqB)?+? gCs,I<[V,KEz|nB /߫@-T~]ZˎgMVꏢtu_=A?'8VG|~8kţҌ)30tiz㗤7{k|>vh/TCz5"ljG}}F :ːApҧؠ /I3ֻiXlܧX)eES\+) ҧc,ol;~6jbX8΋6&l)k͸USaҧX)vKNHgק`)=\ا蓲W=KK1!eR{ɶ3g#U7I"#qՠQ9B7{-û{aDڀև1y,ׂK:{@Ez;<ʘQZW'w"[7> $}<ɶ}Y0o±_ ovX58UL@i hS IDATdlq?-LD;բQ/l҄ĥbT`6Hz:_xz']-j+;Sf<(g?iS *=@` \. ydݩF^gus3/m,fhZ()xbH5f\3"0 TbXQ$3tSG,!`uJ( \"|QWۨ+2.%P33fBb'HjPW hy=eE'gC._̂Wh|5na}fqPSKUbH}sqj%RYQf!fp33C])X>+KbۍJ3{,b!qc^m (1C{i'^߀`_qMX*ȏ{mJo+crg̩wЃٻ.: |8X 5 7Pj]']@OؾjpQ58hp^*k vV5Mec.w1W=$Qwaሻ\YwF[XMu²]kh\hqB=VX_@"UgBَvԹxk]h :Aټ=;b[*; 3^gz&Cˇϩy-L^6 mV3ؔǯNy`{qnT4`Ø$&N?j?rÂ|}3{0ud^gZ!lz-f_":-ZI0Z,=fhTs>'! rWEb A4p%-|n[.kQ{`A"bL}mʸ-Jnm [V?Ym3$^Hsܬw V<X𤋮@^h u;MJ;ݪyZuh=D 3?#F`Hl?\ X [̐-J&=fhNBK&/>s{S_<> 20-j^ cS~.ೢBIH‰Stu)c9?OSX&)f'b]1X}An)ݶuƌRG@%_"lq*d![\X?rg_O@z8*l 6 Zj*ICT6 ?yYLV W }CW\wărmVw!cW;ÅeXH^r{7_ X/ۡ]r;c(%m d kţWAH}__h3Dl'3CW5fv3H/K#Ԙ; k|}qx˳Le5fh!5`Tp0T" zC C7qc][LmSʁ}*z@B{aGQfȅ:ݖY>f(a\!OMYd] 1>n#]hwu0Q$ ӗ1C:0fȘR fzjn }ՠ1-&T * z.xO dLPs ?h7f}jp1O ޭ(MB6R!,[BDOw[j@ W@g`?caYrQwXmHLUGDžX XkPcLn :p;XGЪzQLZa̐ pT $@Z fHcuc01,\oy@ZQE /R" - Ubh`Dz^~aBǝ.%_c3'T ֗Bܙp9f i:ڰJem8BQLp X^{׫n[FSy0b5bЧxA*}S>3TM>>g z 1CrqH'o29BoGOnaYjp4uR58I߻caYr (kcxcsVӨP5fbG4ǧ 'o ,YD@;6*haق_CNˆS+#WcߕX7g̓bښꑻΈè nW#O7AǛǎt1##q|uNrj hC m[$hI$hrш MG]kK7_޴:]c12#yv4'q^F *  9Euux?BzrfFo7ץm<_@Ph%W8oSh~Gi!mڡ-fq@ N=х%o;NZfY()+)KHOt4 ҆QFbKA> } [̐hqD 2ɳwj(sLb`p(f.#wݓJrOIU1, 7WAr9} ˒v@ѣ,h TKh(3s{zm~:Vo2CGOvU3hQ6wa/4Z ܩ²FY1tiz҈5N]O/\XK@*%t AsUN0y4xA4ϓre1irR5f(HC0SAНHG1C䚱hT+mG1CNieJ$J̐ H9 1C4Ey%36=-F!Ezr8˧z[xHok1COIH}-QZ@{P)@vڧua4F'f?j|a]-VUݣ -#)&&kKJt klk?|VT_ۮ B̐m-@:)嘡/KjYXۋz|LHZxop $,,jPXzQ e?lj9y;X Xը53.B|}wO܏q&^9˙!FIoLJ1C?[%@(f6'1CDɑjTy"e*O">t.f*'1CK O+բ4|v[crW$Jߔt.]m-fH^=iFP[+V1Cԯ@h>HSt͈KP#Pd\ DO}̐%_R̐8Qz_"9[˜X ,(f%fB9fhI3rqNcZ^Xc6=F#ꜫpOՠ;; R z[:Ko[Z֨4d8WCTaҎ gt9C=ízvi[;w| L.}UI9yXȩsX:{Ro;^8,-uo/bG /s^bnjR"nR#!rMI1NVU#aW̐Qi=1,fkvϥ!ʄn"ye yZ[~cK1CKŘ y>>ųJ&)4l)P!vK1C,-yRPٌ3J"}jiCG98q3Qcԅeժ oKEb퉅ebb w)3sV jЃ*ԧnw8K'_nl0Kn!| t²%Ugby?YZph:H}JiI$UG~HoG}cơ #L?h1,a175fkr:z6C>{Q#_crP]2Z:~_t(f(㘱0 Ҥg3Ԩ}~kj$#L~oV Lc3#$ΘY4W㦁q>F][cEҕm1C3 Ԙ!AtLpk'1-mEfѧ6ᖱFPQ]]ݩ!O1'! >+KK u S_ؗV>f{B__1_(f(M.x:c3qBtᛙBg@uEP ZZqhaܵOt;[ΪUYGv} oc*KQ'zAAk lyMFqZ5XuGIo vs[x>@JڣgۚXC2k&_3Cǫk~CvwdqeRbVc0P^|}hߓ#;7}vN1x10pWB' 12|-V+[[-#bRDdBLQR҂# s']-\SҊZaa 6bdafd`>؄a~DxM C "aE/|Ld•F|Us36A$A]7FpNatƭ#D"^DЇ0`rV =ʚ;*w80í$~ 6&V@X8Moo}S*< Kv]k)W?F6#{1, \Kq3HEs7Q#Η|ԇ_J}R'뤙{鯍Uy&^{3Ae;SЀrڰ0ϢTX927‚z ʏ\ 0ĩ? ^2QB`ycf*@̃(`,`LT_ݟI#(ʸgmmAѧmI:u|f41G]x9hٳe߯ۃOD,uB,Q_pۯíz\#"<@-8;! bCiC=.>ܮxaCl6cz|P<>k³"0QXb" I(⾽RZT*?ūSF#t-.ollc6Ʉaa8'*} ~#M^7i`ɗ`ZD ;vMnR?" 9k6٫!Ug]zTŗ/ 3HU|@Pd2 +lE];'ikEoIN>BqZ7z, k`[9hn(˳{?O^p1EJDaPhx.9쇤ƺEjD!yVpxDPo!Zo4Oz[m(|ш ZqfaҵlCC wKxo=ONxu!Y53^#XXndqDq0މ'̪*l7%ϋS-mxNV|~oڣ5|)ດ1 QIٳB~70w ~cT ZZEA} R&~WuU#{māJy-1qHfT5*k٨ {$KN%pʸ|qҌ:o/+O5Ϥ/LkDهPXgTX6>!,U,cMmmAD@ mu|ܛ6 |#vm^V*E--M3` *,$> #ONga~J7_J5qTBo|$, ZWHH;)0k\~t)P]<+q}0 NY++(6,]KgАሻz6?5֢Т& J+KدeRӃ&Q=GyQsil< xIXx8:(خiaaubX#M5W.έ\c亥~>;jeesD 5*+IQ]==&ƶ6}S3vKLKxN?c_Q$-(RsT `7 $3ZmX*C{0HȆZW)6҃7cn:܊ȍ|LH^nI^|36<]MP͸[oחd %/|P/X,瘃C)D+m<$|(%JY#@ĥI)O0(Xh:VB%fCċy&aKӍ )/-8mTH9)@C횖r8y93vB@o2,džbzep1G]p.@Ŝ˔A&ج-^Vx1A0l c/M0lЇ$^!|Dbپ6>El[yDž-$~X3Ը§%j\I藤N%?) $$!y.9b ?=V}r\%"_<QACycN&@lmWHާMn9Jۨ3VUa\& ~!cwm^:1CĖ{/\oٻP&|/7#g爽N 5²W=. M, l[<=7 WܫPUMízq1dh#"" {~^mߣPs$/3RaR9W#?1CY߈hcxΘ=v1PF̐s&RPh1C yd=~%|S~w x dLu WZ6 f}R|/OJ[Ԙk 1 ӭ lԼ9m_#&_.]$4JYI( $ՓPNCGAbhf-Tbԙd(36J7o/Ycd˟2<g @mV+V okLQ&׭ʔbnw E`},U,D IDATJ,uJ,sJ, {Gň@F_F'\svg78qBUXm^~v1CBU\jyZ!`_q51CBF+iP{>cĘuB)f(R̐'}Ď6$"r7ظI;Z̐0fhR0뷝 ||61Pj ]r '/ k9K1Cn`gqԷNb;ێc##XV 47W60ݕ&eJƳX 5yi2D[KQ!c8X 2MTr?,1WF}yz ~Ug90q diK4hmn/e_Bp!h tx9CQ*>zB ~ @K@ xQX{bd` .I Oڂ.=>ERP';ڹ.f(i8`9 >|AGcs8ǦR~o>b̐X9)f?, 1ެh3a%f)$AцP /ցccb>yWuőKM8 aivo(B6"r#U8bԘ oq3ȩ v3M4S{WMڍ@f wr_k >.Cxe x;Sh $Vw,^̹;Xx@1ӕXcb,bAͰM^ T@qps:QhS;>X r,@J,PMK ^;` *$ Hr Qji!蚔1R,PYCUb. m3Mmf3n/yGJ_BOPT νVo*2c6/h2՘\бO^FcpiА1C߭+#WELO(@FJ?쟤5Ř!j/;fzo4 I9EZ! U j;ڐ\;b}f?д+ a \# g8$3t%h94M4Hk1d3ݎ^ M#-9!r|yJ;@H1Ci3t,}1&כ"avSE `3th#Ҍ7O?AZh 6$"r7al܂ƹ3/z3ȹ)Pb"}qޯQvQcԘ!%jIJ̐i=hp^k]?|k3Uq(kw].7` .X5bBc9 kTݓqXV<MuGƳ ,HmbF2?Kx@'v m؇nX>(cC>e]k ^*Gc ,:+\_qj노³"p/!fJ@:A,gEj,QWcqU<=h(f_dF^}!K1CuOȳGvnA36/Ĕ@wXx:]~ X7X!C1#.A_*4? wLO5McJ\~شXoq T].9<ECǞ!u  ME/ 0>wtڊbHWw ^̱r|3OIX:QA@^Hxɶ+4*W>a!+2 L4ƛv ?Cr4Ъkmf8g %:..hC^DZ@- %qhB\XKXV_Z$neFjqg ċvɗ6 EP -=3֊UjЍrz9f((z4"Z~ 8gxsLƛ3p6톺5;5ꂛ8ҘՕT <ӘW&T^o(Ti1Cy50J̐8fchdh(F7E@:Xƾ*B; ZqAQ/87 Hae:hу^mfqN}eqZ뫑A[PdxDh1Cߐba[U_ޓ e׭`yP SMAtۙPMK ^SbfM7b t^(Lb-m{?mL 9]q_t ^Xes{Rq'a\@mۡ03eCѦ+1P4f˜ 3@b5CD @dA^zGgQTm9Jzӯ[:n=?!ݿl[)S`;47`op-x轇Qu* ozF `ԑ5DW#A[:ض'U6 +~BX9n~/lTHF7!s\+sA o? =6M*X]o돛2Sh,GsXWh `thU8m?\AR'M?7j k dVUJOj}fAC[+^N"lV!X Ʉ#ǷިBʌ ~9,T d5x◟`ZPeQn_:RLhj_~/. -N}, E0}td Pg b.cfʱ@yI, BKzjNp!@ۉ|h5.ЪlW  #:'Wc&G-Ubq 4Q*kj[FCqy\|7_aق/b|0;! _`_^zil<66 Xm  -V?5QlYüddWigĎ|fv)rY/''^kȩǃc7 m5̷@҂?C FQVq[-8?бKy0B)hv'Т-ShGV+Z뫜n6td}Eɗ!0B{5#_Հ{QM3qL I: .ű?Uf[umBƵ߷“Xw""|A9PeW^aj>w:ٷՂ\Бk?E[EPRh @8@>?<0g [:&v꬝q.$V7 nuCG{QЦis`\MӭЦ CX_pӭ79~]k֦[- N܈ XZk(i֊ XN"#^зZRWZVCIf6-VA4Ե͛jV-UxO m``pFȕ}Q8ߗ Z@ O!ee@+Z^kmV+B`Y hlmEk,@˰onf6+'Z,hlkZ)O8Yڏ6 lk!j[Z`LHƭ^v 9 EJuS?㼭 hkx[B 턵wtl9 ?t4ТSS2W6BnUȁ`p&B;w?s]m2^$WpKߕ>CuD \GAHP\" yýI Ϝ8gah~_ua?4 bQGµ^&:YD[mu0IN~BNM n="6|p_ Hp1V;m!FQ6(n^p`+}m}K} Њ;z`hqBwC^{:h1څxVoVr툈Cqn2fh=ۡE-8۰ڬ˓} DD4hqm?:֡xXɕ jWQFO)>7) 4 `1%蟃?DDt zhz@c q T'@uGp h } }~B_S@ :"""Ȁh6h9Ͻbӛ|?<'"rOz \ТuUL6x@wR/ Qo2kPכ `r =(DL±ycV±FHS[ 2VK$ ߆WZ zDD۰#""հ?ثGDԻ^=""}DDv5}DDDDDDDDD370{ep$o߮A:e6{Ȉz Qxm$ 嶇 c^:<"""""""""KAxkEz{t90Uil;5 ^ p<|)}spr^_w+ <X徭2DDDv{`\(A] ^o t徟Ѕ> +yz7:nϴEf{`%ٰ}?1q]I&ǚ#O `qWwy#zDt,X9d{G?Y.7;^=" rt{d .fx&~9RwVNǢ.l;@PWa]8,2 "" _;'D];k'NSĻ~퍔'نۉw+n?"""" `# w}NdzO"""rs>Gc} Q4πa/u;mWFG/Z7_Ukv"L؉>{jg]'^ضPpP' KŻnáZ.U;~ox蘈)0U:~,So^QW}@a,60CDD-@7ZN=^|~{p'۟`|{ !qa25}݋C8)0ń+-CDDDdcS\dۛ|_Wxvlfh'DDD!/<[b€ΈR8A""\ {pk`itk.&O9kM*0 |֍}'cR~{HDDM/H-p` ;vA"0g.9 PIDAT8Tp>/F^%:#DDDԯ4X~{ x .Z\ `n/e?ȻZ3anG5Ovs}-Q8(@D9h(b/]k 3l'f8`~ h\ |_q!a Bćq|{ %u_bށ[pPﰸxub>Jq8_oQt`zQ_>Q7ҿ} `_k LvݰϷU".`["o!QUlo-n' oR4 ?6 JW"?gV+Ɇ#j60NQ_o+8rNO} 7*Fn_-σ-rplD:#l -Fȝ,0f%FHyF_w9(wT9iF6 #s :`ZQ 7ҿ crni@`vqDCod`xP}$7?0f;@ߡM8Ccyx8eQw#3.GO^:ǿt}@[T8v* M0 @Pmc!Q720| c ȑB -fXTx*q߅V6;8(@V X-045ܴz;yڶ0_}D9G'/Hd`oVlhݥ{~{ 7~H9 ۻ8_n$/ =)CwF$VtC0ꥲ CYZVeJtZ/6˼zu{8qִ;a9Μs+1r~`„(^0 I)?E(6 /3*:-J)]Y"5(g$}`@0mo88/ɿ lCR-Y"5( x+IF')@R@Ѿm'QuQ|H 'jGQlY*SH_#=YCqfpIiZSFȭԈ8 F9٦GB8Ap.!I9A^`BmӖ\VYߖ(=Y}qJA} 2'$?{+qIza۔Pk^\[7 r;yAR 6-ϋ^>Uj(=яϞ)} 25m$ _Vkem .C23jK+R`}.>~OգRśBBCRtɯ3'E(vFI~?Z?~'KoCg5 Qއ/^#]Y1x4ʷչ\.3,~,hjJh~g$~Eem)݋[OgMa?⢻ %yG_K}<|n:k<|6IKM3=!q(_ɇ HjjkٰdjUaPH—{ަt5$Iʇ t&/I?[)(ź73@$5ݬq?= E{ 3åXy _+ " $$I$I .'fHԴ:Mkݲh"sF!pBR6I2 NtEsfej}U}ۣQ]{kK}Ӏc3S=> mIQYgwUII:"ӈ51 zFM]3jꪞ#.n,TCm(R*fӻOqYIek3HWfX.ӈ>r7s>?. |Q8ʿK$I$)4/gc,=G`0!$I$I⠀6kA$I$I!Y IuVAH$I$I•n~#$I$Ip5]AIENDB`pairtools-1.0.3/doc/_static/read_pair_NU.png000066400000000000000000000241271452673171500210010ustar00rootroot00000000000000PNG  IHDR!6msBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxw|׽BXa :qօTgk BUqW[jZZ:ZPS3@$?νq$=x܇s'$sg|NurH5$Zy IX)Z׃Mԁcyz&ǫ| ׄs)Kz8.x=p=B.mùt ¹Z% 7sHH%SxIMޛ}Ns I7ɹjYsn.LNKY3Nqt:h\-Bd{>N.~$?\:s ]=A{6Ɵy_tFox |FrhtN*,-a -2e/ؚ69R٬jg{<~w\پb. ec4!ľ#(> ug >A&E3|xOKq~~z'ׄ$ԷIY kc1sG \GX`'>\~4z/H¨\4se%Tji]24;63o*w\:f[iˋ0w*ˊHʼI(5)1hCVr()bTl( qC/qvN <Lķ }/z3-2_m)70W4Wr?~)[ HHm^&.TV0K(٘orIi^61υP% +&2x£$g婫(^=OOOˆXNrh+lVw?t=|\6<ݎ]+Kcp' Kq'~wB14sc3G߳mMu_=9^3*O|:bi60nئ=ncmDc;,"m1$7 81iޤ I$ ə|#bKMOR39#?B019fя1c`f(/O|'p\Lv e~?{13mx x_YOck-=.{{jΓiPe󟼒 +$K$IO^E3I*'Y$5+܉I\lMzv";, Ƞ&}Z^4uٗKJ0lWzs?o. +A[0kmΥɘ5uU'Q[J JksUwh4̪b\A3&Ҷϰi'n.%=$՟Ȧ?rܑWЮ>VrYd6|λq9گ~;NߓP+fc<sE9A_b{7162 \m'zIui: = wޚ/;kWcA#HkOF1?tIdW{_tZ݉~5[Hek,jb~Jѻ6USe)h%p fSs 0gV[ȥ-|^wɯM' +h#p,XJ7}\2,/`3jyTg>4SGջ%cf7;; rG6;TawpwRpl~\HdzׄǬU3#^GW4LIHyǵR D;v ѕb)EFW$X~dҶp.i6w\/`v*N%gtb"; X[ +tdG"K̸\f1x$If(x2?qS˦ڦc2#LYH9|<rL ʟ,nA LYry {3Ij fOaŝWPe#-SoM.!Ch?F}Ԏ= &eك(IlҡmU?֎>ڴwƯ YYՕvu%MDJv76~+wYy_gz+z̆ k`JoF؜$u9p'wXxބX nۀ" t'cݏ.|9X_\S,y.9܏ݜb!v8z7'껴ij0We3&9N%!K)r*Ҧp6R &Td!BT]VVKBj:+@EfKKJ:'PMq'֜rIHؤ\T,qR4PZ]BT(]5\Jb6HWەq!و4h%nìh- Q$ljt6t?v)fH4V ^$^Yfa&wWDĚp?V˱"`9 L|DDZn$S.yFx+p?f{Yv ۟j9VĆޘ՘Z!"--@\u Pu͍`? H uUǵs)SGR^mbH0!1ivӑV$BhggfW-"-@̆8;OZ L""-RI8%k9Fx6fRDDXJl:]@c""V A9˗`ʯHv s[ atH|xYs l?8b^""R'~l9037‹1m&""ܫt˹Hq[T>L̘ġ1WZEv.^H s1+dG&# 3ᮻżDD \a;˹ߛKp( wۼh-jSU 2 | =3}ț|; [}F_jnDVx⻰*&x6p$rXK:=;Q+p/ˀ MHX5͞=pe|'KIy}(/ξטly8a,isp+{̉{ !Up)bŒָ'= Ǭnc8?(Aɛ|sHLxR'3Z9sY;)Ӂƒ+wU1OD/c锻(n@~MpErꘉ\ D`kmƹ0XYOj0c6iQ6|7;q~GZN\VNr^{p,_sR*}F_{>'(٘}\~޾|kgĝ>6]3q+ `8-!gmy e#TSq䌎~^_w~^m.r>N\=}{x򟜉a4~M S9 \m53+ ܕY9&"Ҵ?xu˜W+RT'tH2ĕ;KX:NҾ+=cԿRQjswڙS['uR:tkVdR`0"ĿкO""p+|Cry^&Vj7غxBٖNw RxYl='v6rn'[sdDQie,}ݽbMCϨ% pX ~uʥ+X~n?P:{P,95SlONA`J{+{?aj SewˡgЮ>N\Q79cO{KMf Ho=Wؾܝ;23:5g ѻ8ĥ}qu8] G^Vd:qy6w9g/TIS29DCZ " ;!N)+t˴.}ss?cs@052ʋͿ+IJrW TQ9CvU=Kq`Rdzo bXGtq2""M#jrEvG5#u/yv*˜xͧ/Pj'$w;cbV}ϺɹU;<1#z "Bd? w5'pR&T_} D3&TYa&dyum ;;ڏnGě~Ms>i&-`UA`灁1NFDI;fwV2Q[(zuEc[|?p@0\7;r_wWugKݪkVbviR:tq:qo}~w.bQ)왌;%{xg/Qd{xGA?~?ī'fy4""-FOJ'Ub_mrԶ4%Wߙ7_|ΰsh|\Cܶ?ĩў fKobH &4rV5 J^wgw=|owugvEw_a4'6ٷ8qBEug@梫95ڜs:P0鱈HQd?W;Wlix}+ Rew(@/ug/y.( ]/S??\ρMvvӾE0I'()։2z<9K^;t:Э]]-s$8qU}ԮUV[}WM|`X_N$;7x#`W{Cr;D0)շqVz6S2+;3|:xaF{.n"m;$!xZaHO0iCC "s= &9T:wz*U'+}̷b~[,lw,;SJ3;v)ȮG[]A~?t3<{U\8i'x -qfBDD~5xX&P%[|zѩz3\! L UsFnL}e)/ߓst.uuϧÐI @01,grE6id19ǺoPb~6nt^sL÷K`p*06緥HiW#>A;7%c6GqX::)PQ݉{ !x7ou7NLJN/2o+E.DugQJ75ɖwb!_۞ÌcG0=WY˨i$O_*xIDAT`A^5>@X4ΕqBJ*Jؾ|N &=t; 7PV9&!-4(ȃJPy)k(߱$}\/Ce*)^kmYGey%WX1Ĵv}եWQ^yt:ݽ2>3.}!7s(L{Ж_X̫DczyCnUBDĞ1j50o7^(++Ft'6F9^`QTLܡ1+yO='v"Mdfطʅա5$"ҭve'c*?މ*uS, 7йCEDy x֣sm'HaQoH N@NccrF8~} ,""0>M*"+y@(jF"0v1v$m' "g%v""q,Hבfw`!15""u  %+{MD09 5'czEG""uw)/5iEBHݴnm{ ZLGZ5""us y#*CI""G5p{H \""Hsiҁ$O^צe@Q$G~(JB]l_<<6N6乭:7z^l5zkk/ >ŸTrG3VV{I45"" z09ӑ*\ tDC1Zpw$HjMc-#Hó,^1"AS$!5b:e*nx#5}'"u ҺgF5v~'4 cHp fp@V6C7Y̥AǏQqi&"+pu$c(ٿ8b:R9Av4%*UHm2j8T[p/LNSc?4g">di,wXʣAǏ8:s .,~Vʋ!ğqB+j㇮Ebgq㲭X,#X<"ڷJSc,[>?~%YLGjq/1|o긡8~Z$'Tɢo"TQn7#V௞ R.8~LTܮpi0'Pj!>|^6R{}X⹭Hq/C$Xփ_a1A1f2WxAYTV{W5""5+.&\驲E/nFRE9o_Qqz;c~o޲ԠS$b"F&DqZ5""utx$yo|Q6S1GcߧVjQT.UpKŢp' sZrk0k};S2i>nG*4C2nZ2x]?;k2EW@:%qJH|Kj4C03Q9e~ B$Qr8$T˱KU3 S!.hc_ H` 7 c?&2t!-'{d3!^2]K?şA9kIENDB`pairtools-1.0.3/doc/_static/read_pair_NU_NN.png000066400000000000000000000413041452673171500213700ustar00rootroot00000000000000PNG  IHDR,sBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxu[ULgJ"nqY-^vq)H.n)@)5&&HnMzy$&77=ET;036"jWu!U@c!DrM`g!$t?\ eX!{c\ A֎ """"""""٤ Zn C-hk.Vq!JY\,:%6NѴE(=(FUD]yzr,Pkv:c~QLz$= <]4.+1,,gʒ,zf鱤cm67gkkoBK}Ynre]lUT\Jo_ux)YU?fm} c*Xe8p,Mz!Qr@,O!eiy Sidqʾ~3q^֟'?o8I^u@N fItxxawQH)O~oc_'[^>F @XQʲ%A(,cRw>$Y/V_'{˳喤,; |,^eYk'BՔ|9ztYF;q,8rpn'|&{TZVp7og7e)pDunv/+fOMCI$f./Ea' B\ twX˿DOSISziY4QaR,9K]:+B˝ۭ_޸p[,{8r;p},Nr,wpE"|2&6KhҾ;OFROVY1DwY}TRdI%vܳ/6eU"el _rQD \(D-H$ p`p 6rDLqV`ۈdR{c c06ͅc;rJ<8"E:mZ\ڄOVfxYf,Lot0˨"4Y:dH<k_d]<k_0|o_R^,8"78_eGYNNr,}1K"YNjNx.vZX k&s22BYw Que,1FGnkcM̲,3QgID)˝Uo. A7[;Imteobבʲβ,Nrw0Hka-e90BY@+Yfڭ2Qq Vqp4n {Yړgy")QD,5@ϛC cr_ ocg8\eW;;,9"; ?Fbt~f9͔s;NXM Z,fy2..%UdqQԘˊ\FE?r ,^Hv{ְ079ҲsVۃDQRYDjk'VteeI, V|xۮo/v?CGvٛzu=M1c+?e)j,Wj,Gc9ΩN! l\CEEp/~2u{|Yܳe]+^1ɅG3oeיeޤl5?άw`e h|g"ZmgCej8K|a#M[\yY< ~Dqhй$Bp\;')&1]Gu5r,Y&1]k Ǩc?pwkKa$j |A5?6E|VUIt ey{ila2{2DGԈ)!cSO(M\}L6,ws.P dɋVͭQYwŊ՝x 1!f,g* 0 fd9 2>wYD2Ύz$8eNY%?˭Ul,Wnb۰ygGYnb[)l.'FʵW"傈ey׾+t…IY u%\wX \kwcJgk߁%v.pd)jTQҸm._ĤGQj,'˲n923Y:,_IೈT76Λp,:ˣ+)DDY]fʱz.bmL6B,*.S}Y:D K3l,â/} -t!9'ؐKWYNʒpᗜK`,A[wbn/ݹld&{b[wbQ,gOa}se/6Kǔ,?H$bX{>VOk,GزP(]E~cvň} lĘ,c &gK{,^M3g뵙DHOY=Hs).x(LeMe.VŁDXC?x/^qP0)K6.ˀ$| fe(U7Zʀ.˾z$Hۀ<3vkIJrK,S(d+ ,921MK6Y'g DB:,%Ջ?Gg,+KZE$D\JmeN=y & c\,K&LǂԄ,O].GuD icw٨O'Rg瑘sk4Y^b۰ 8NK''exQ ;aKᎲ$a*$I\.:,&óLlYO:IYFJ!򜃻,'v-X ʊr~ V1YV}6HYKYznD, ?u&+esubbrTR;Yڿ [%ercRqHFbEb @GY+aKv +9_uw+p{wkJ7g)n Z@7eybl~gW꿬d h PڪI*ײzl*+*(.il'2BR %4I=Y2_Ml)l?b kqF@O`\YKW,=HpT'k,>wV+YY|lc%Y:cvT B܈wX4 h"D)$Y;rQUDDDDDDD Si$틱"G}X@"Yw'̗$rl[ؙ1 Ga']"`C3~ >8p$V{ |} Hu[b2wg x`26u`{ՂK&aT^ٷJ` 7 VN~Vc_E\UWA5Z |-Ӽ{KJH|8Hma}Ap24sM"{}FR[^6qDR_?bNU[r%Ӿd2O C59,]}(K4t>6rN]Jg ۊD./|uJMeOX|f$6Î|=ŽvA_j3K~%(\X댘GuXHa(Pw.ƪ)8;[uD6*[2I$v5/eX!UMXlQ9`E2ޑ|dFS%/g-E7}7" N֨^Lza&)|x- l4cr,"> y$UGV`4V$yNH⵶xw¿^ջ)'8>OHއnH K-VhX\>فhQD*a%ؙvNI!~m)m\ +%$l_W]S6~A9M#XgEUHNvmC$jSp|MWҽF$ðdG ^m%X}n#Fi]:+BJ5;!3ĉ=&XJW(,A9VX],ɲ)z "P}o%Yga{$rZcsʿ$8$:SI.~%%(`s^'u?EؼugV\[8X Me b Pg$ #ؼZ\x CqoV,3y I_`l:õm?Ӏ?('Q_gl˰"zҏ*4Ev#x |+ GO?jSh Rpc-v븋bl$U3>Sݰׂ7W<ݛG m$0YUk\"oHbVPm#0ض$͍fk3RP>I5^?ߑ~_hi\JpI2Z!NOnDZB{F C9y%hY߫V'4[&7]M)\(僩ߓ?CrI4iX^S/v?լ0-ȊR6^+~vz#1yHs/Kg5vb#Xxvָ\R6:OK {1U Da(~"{y)6vxo$0e(ҿ)waBc^"DͰؗ]zG:"UwTxh3eh<խ8;{UO]tqFSHzaS|2T=반 ƦtVh5cs~w!VDY.5$] e؋ ia+a5&0fQW;W%t-`!"RM٣r1lH!hx{FﰨFDC[&1a͒ؗIf# Hؼ}dGĨ{2 B~dJx1x;ƹ66Zb7OsۦG;yS#RDQ^M %y!${5F4uj;D}1M?fRa)qXgk%x菆.o8ڍHJj1Jp.'0Ӻཉ'Ct?nU! 0 Ϥ[WD$Wv:wQ! ؔ Y1\ lרh-!Yg8K& $^Q_Dݗk}fO' X*Y:V_R{ľ5q+Ha8ޚEV"شbR \Da-H9M.6)tFTj`)m`5! GNqt3󨥳tRc1sBPN^gIaoh+a_$D#ӼCicwoI56WRO*<@atyc'K`l옵PV| /A5ۗ.ZVF~$4\n4bDFLʃEs0x;LyIv-ѝ%n!QK潋44ؗIw;Rh t|)X|5ߑ#8rc,MQ`O(sI}0ϫ0Et]ghhkqۧv.yJ|R׏ԗMH!H>9/ɗx0$Nkz}3V6)1b V6y:9x?x~CEІ\ [-ie5~>룮)V,H>Mۜt&nOG )VO($3p闏jJݗɶ.K%v1۶jP$eYɵIpErvT| D"aju>RQ)l[JBe3zv0|!]--%74=)%R$ؙ\iD˰e0+nNW?H!9e:WMsGV~t'NwH_s޶Qqќe4_hjL⻎Hv5vuDK/lZD`® VDQͱbɣ)ʰ%PH>XD6S݂U$NnYx"{WfEbchO΄YzV$VY st5K"~qblם&h=^Fg }gY||"j6{/aسYKp4E,>H !?ޤ`ddHzclmHy0g;%"uS 샍 {^.&t0ܐ,?T8NGFv;REjG!Nj!?H[ 9\C3D$;.Ap?8RZޝtsW= 89w},S;%""R KXӏQgdSHvՅf """ z !o(*BDDDDDDDb}i~u+rпx0H$#zY Q_b s980],i\h%]0A| r p8708D] Ib`\"p u4YD$?%]7 H^:%sH$^+"^R+I*Mِc&|ӚNI "R mE%=Ӏ&>WBxa!"ElX0)hZ[}L:*vpHDDDDO"O*`nj:%] 4סDDDDD2Q䛻 ``$VyYiYD"""""Py $>qD$< F"J~m33c=#"RkI=FnC*,jsqDDDHT|8KTFT1VHSDDDDDDDr3 4b́ӱ_¤"""""""9untobsd<3yiy:bg+T}@\$MǦ xʁ#G$lhw2XrH\k&Jza{8uXxnNO8â-wݽɞΏn>x^K@Qq1Vݻ~x۰i6**+*h=`(=v96~{eE9SY邒x5Jg {94z7}A>qw',`sG&N(:"lZϮ>8I$""u[~@; }Ί~^F-w(O|ץt{4ND$-{o@R6 0Y}#Cͻ d!:_EJXq4XWwV;<:oot$M88tzqr=+Y[߸Z?g{mw)kQ .~ASlL|9Ί݀n∈H=NcEǺ ӇΊW0 C[$fw|BQaEf37fقxAce`w=vkb͒2~}xEtsLy *+l5; AW}p gX aC"ݰg:'gObK{j)4x`gȊB|Mꇴ:-#,./DHC,99L|zxF;~Ȱxr*.m՞{xOK^HQq`/OힻO}Uip9V}4"B_.N lk} ϯ%v,rGDD,D~sK`IW'd? )T/a#݀a;NcY'"k/nwHaTdR0p7cŜivΦybq3&1'펛I;_M56xqcT=n0s]ȁ5KoPwY"tx5GYDD$>#0T958WPJl}/ڊS=^NO~n^eFO-e87VUhO閞HDtojCKbDZ/ lqv`#,#hMHJH7cSz 8ZMXp63^wݲtjrl]#50u^;1$z][Ն""fzCr+p1c#sK;6|s>owlOڮU]'\GJTEE 8(*&nIZSo"J|Gp=wa+ys/N Uz,[|徴y=3CO 9" !XL+DDD?F[ lr"]TDԩ0zIQYϏ]6pjـ(dZ+WADDDw[V&6Hfqop٘qR9Rz1瓧YvᅵLI*d4w'` """ r_OŀyFn󈈄g͒2~}1QEt6aOXOo7iו_Lb`"_oUn%"""zי0""8BKjvRܸY9w|;Vc$ ##9#"~1tԩO^o7nۅ^{x1gS=z9*0ceL~{x^ݤ ]TVZSe#/pT 4]&aDDB1S=(*߈C}:FMfNf'O7ݍەL{j\]ڪ=v?1<TYoq>iA`r;g)$1/pTL4aDDBfh *+Y]O noֹMuLHvQq#ڬfB1 ~" ^seRH&:Fɭˊ qj)=w>f&\gѲtfD=XSӢ)}2V-͌x~#Kʨ`ʣAee.[@~}VV/4x"g)$1R*li㻼ﻢKÈ#k1;\JuD2#  """@lY1 OnC^e@SGS#HJ=NO{m|+/\áJ Hp gHYH9+K6ٕvCou7#ԑ:䵁#Ҡ<XRՆܷ o*Hpjbu>q0ДhK}Neʣ|OzpD|><>ud2Y1g`SG:#>e!tfy>O(.mJ#}=#?@:@[|`tvuDjd5gp8""@[j!9w`a P0` EDZd{lLtb oo?$xE;#fS;,)cƋoy7x )]1ċvv|/~x AmGF^60*WFϻc`AqEjY[a?#""YV q2`9#nAgCD$7Ak-o lS#oܓ#!tV/|ujkFp DZ6^F;"""w<;vkH.]0wX|*MnrF~z >SG<#]o#!ق((i}iq)A.sDje>} ""Z \ȑvujHy{4z$H 8KPYQǯ}#icx{3dͲvn6xFx[92:bgx뺖b" }d.GH]].:DD$]@pU#p{7ԗg4$ Q7߾lVw÷Y8H}SBDD|)@vUW,mіxcnQTTLmT]C ~q*|GaQUѼO~`/_y)miM5iNQq#|>ͣI8)_z_u,p!V<NpB1xDeؙ2gc'wUB`O|AWkTqy.v$k+hKY9v/FqFbND$otoOyr*֮ۮ 7)N:ҼMͦ4ϿʵkdpH Nyԑ,i$:C o>s%{c% @d7q>Ės5^BQQ;w߀PX[a/I - 0DX/e$.EDb Et$|.ťM>4n1~e TVT@QoK޾ŕ ,"ͺ㦻CMz~ @-HKo_1w:|2EJ8t! +yXFW 1](z8k!(tV>_ KL.V8$""6>|p8im^w}Xtw#;wb'v<_&1z.>xRg.ƆDI_ 9YI;Nش(v:}{+/ ! Ǒ,uZtO~%661 jORl>]*muZt]7U V3cN;([DDę/YQu6$ӆyj:özc7wqDDDbJ!zL7Wi;2Um;3 ""Q#ydѷX]+¦4T]WDDl.џҷ>žk llT3:ˣ4NDDrN`5;6$ߕcK~:ĦXE7sED$^:XGy! xX:HV:]@V9""""-A^I D:,\Su-4tls(Sn∈4hI ϷsEum[Ie#_ 'vy"p[۝ sp_  8ktZN.b-""""st|8H"W=-csciҾ8"""""84+'PHjJ['9Ӡ~-}kZ6}۴elr)""".]( 9A _MFOY+wi|Gsl~Vam2[lEDDD^`Fr6'XCBx@""iM;aZ:H"zE@,?"`}%6R5a!"R^^ (* cTÕh=݀BxMDžB'liZۄ0$;8e)7J8M+ r1<ϡ *\ Ƒ$|H{"v-qYt709vU 3uX^'"p8t aIN1';""nIp=_tgc-p}>Yɡ$*#"w %sǑ48[NTDc$9O!"٠sv  0x2v-0:(7H8|(:uF0Ur;LYDĝc$qHJ~?WCj|f+H8s- )1$:~6 9,NdAa?4B$7*+*+1TVS|2Uq"i-E7} ǷTZ>+BxbK 3uXyErG`X7HaEc뀋Hác$¡sx.&h^#96"hxHn]|5?}vG28YD$t$R8~t._lmɭUJ˘h5$K]nD8CE$t$R8~$V]Kq:vyl:SE h9m~ǗPիH`sݲUyzm/"czxq \f_'0 ;9| XY6H1۹/a -Q?.azjcrZ7yUi0:,DDW5V//8$:twv}.7T[Gr9a!"^cxH5~nA͇!^ϻr9 """U7aLa_QH X @e?=4C\DѮ-jxvmo-*"""ѵ;},htL'IY)IDAT&~oO]sJ)n ֕o-6fXxqA5N*"ٰ #w9HNEt" )#Fr708ULfj hnz +yf.D" Oc,|%PYܸYWS;Vn~kύ,TI}wʰmKˊjVYڑ S <<2GDkH9M$"u-.[""RsQ؇'W×M$UYJpci }7688wX`F-5;{H#,W`覑nWܯ󹺊@'D\ ¡"yJ"["ݗVuXGQlLϕ5%D$a!R8a!*)"R{  '1!`fu?~uÀ@{<x@:uX_%IU""< 6x)VW"9Ԥ떻""(W/{}@2y{-) E7 z.2Kx<$6BG+9/QRT@Bv47\ >J KkIK;ӓ}M;Wܣ^*;'uND|aFQ>Qc#"x{j8xrYA` +zIzHƫJh{kKQކ4ȚkBj~܂C41Nhґc?La~67hMq\<ԥfcWxuh?}iDqӈJ\ 8:9SFtJI=n'uC7Hf=%msNfU+Xq\2T0 p0a5"F5oǓF"R|d-SFD&ZcoI1kIA>"&NO-a{wW`btd-1^/?77N1 bb^4IP/’b^ÅA<ؽ9,_TReK؟\`*pDS. K\kEM&OtbSecdm\Z7H|6Zr2̥ϑи\~2ь\$Iͻje7oqo\~Zm{iŗ )*{%6B;ʣ˖PVrOdR$FEp K) PCw?r,p{Y@\DGy::Ғ_?gif|-[%;ߌ?ӆhd3nt40-dYĶ݌^N3ђKYBAhS~;)kViɥib"zI2Zr &H[BS.iX_65"BVl9Ɍz>MλEK.Gf?2:ΥEc䒛xS:eh%op/v[0u5'6LۑOkɥ&Nuephk&FqQb6㭯UɷSSF+2*蹔xY3N7FgNs䒹'ĩi8q);M1/6q*gJ&N>g^%ܝItި%2kǷv褥16c;swX㤣wލ1藶.0HS.y[["tG|CkɁ(ڧ%ZmN#i'3>{ԒKRSHjqZ}z$6 ^9tl ېt3ڴ#;hɥ*B;6*6dq4nhAK.AGDAFSq-|ꡃu+=VE`KEsTb+ 8"/bCi?œ~+Uu-m}D^ zs9MYdo^Ί6g;|:9ⅿ2v@;j}ߟ,ҡ]#>߿%m?/VŊ/-С1.zyfcɤ}ku0}Եb 2CfƻO,%u~îCK.ɭ{ f|oɘ\ZvH ZrIhҁv=cƇ9/iɥ"! FN=IIZrys͟,ٿ=h]B^P1m50TS.pV k US."d5.DŽM%g>6xKx(DŽϓz\Nе8-} 2Ne+GDmvlM7Q;rVFZr~>ۼɌiӎs5ђKK5V0((hirv>KJ<r;rq.y26(8;}ɓvž[wrt |ZݹAK.e ĩY}\kSX4M<#EV911EP)䈭4gJt z/Z*'t7}Q P#Q׎u b|@ T.E,˞\OTrNft2EtJZ'<MB*\D9HqU6V}z6yr G%#"&[nZt\ Ռ4a6B0Y N@! &ێ*i5ǍL^@q5k>jqz?+e: Vs*hMkMOrMX 739j r+58ύP<Ȃ(rB%犓XTXfwԑ` ?u$Q|$^pn%E}ճnz Hՙ>jJzgչ8؉`֛Ne+Wo}Q]3:uYxK/  dAu0Z ,BUZPC^TM%=5.Pwyya~F>CiUnD4F-yHJFM0 כN؋z`M""PKGm${/Fs޻X?ks~ĺy`&!r}#L\:Xs.j]f=f$j {`yVRKK~؛`_8ǩt*x]ʞ 9h]-D 9.ƭx3ju5ԐcSNu^z [Ea7KY0pjUH4HЛNX7> /MPmGxVr/X#Xof6wgu?jֳqRQ^E,koڲ w~I{4n5&Pk4p {+S,Q/ߍPTa+;gߵ_z5 n0֋J=Y.ԧ΍8_KQk*X9[o*!+'b<$c(= n@ȮC+uo_n/HԛD$BTcR@xK4м|*O>W E9PՔQ9[iGXJPi(KT)\ԥ9_)J&Z)kC[`2Ή_yH)N\>4^SC 56Ucwك& o8hs/2D.(QۃFvm &m&8Z񗂬 \@ԇ ע*muZi B5Xf˺eFFoBX ^?jtBP'ԆԤb$aښg/G˞B4ʞx?|;jXša g!k]ZftMp34bMd úoy 5A j-ew oS%pa\Ե'/=n\U8'k[`]^=d'*5SYԇ.N6M[v"O^@͜FU1yqkm}m1Qu~1̭Xe'8 xuX Sy}d*5X?}s9YMPTvrQ5Ձ܋^Vapvc:Rv\lRCᬧ|l+X;. ;&tzmhQ6QpzjE7ewNYuU5`%(BOsj?qs Q\yj:5\Fk!{V#QOk}@h].| VĢ:֡~ݨՑy DIYsej;'!ol*V%ߛ4^<͹X?X͹y.&z ?ghD܈IUܓwPk+Ʊ U9KF9 e\;@-T:.m:/՜KUQ)R}Gkm*oEm*kIKo2}#4*D-J^j&{'?<5i^]v e}X-vAod![M&ƺn|݂>'4ƹOT|}~*AD.} I-\T%A5R(^Kxq-ؘ$ոޏ=-ciN $QثÐL]'?QUr@bmjH[a8AƁ6~E x%j%TO8yVs.T>\CWT?qX/V 0UX)z)Da}Jo:"QK|E..D1/1j~/c5q|\G['j^Z±Wa՘We'|Gϐa kw/㼧OQ,-;!lVt«W,p-2L}ycMj =P-2u#ڲB^> ]4Rt@Cw"Uڜ`# 렮S'5"꒙qv5K}x%܇UjIQ=m]oAD5PkYE| 5qWE֖ U>W`!CݶƠߥAjpc9\94qwsC-3ze-O1r?@8 Z <ߠl$.] !4J,W"PBlB?]!,"0qu8k[87ڲB8fC)4@Bf>܃VGA5Ud7j۶I-B16Ew"*Rd&ΪZȞBQ],NG5Ρh"$E2 '5Or8묳2dRF˗3uT bEJ;%Xv Сw}Y =sNF_쇮iJ"O&c=Fڵ5trJJJꫯ},j1|Rܨ|ڶmOem*Dx5kÆ L9 ݄ cqxGw|>sLZrUo+[w&:qڟCfh<3fش#nxu#{r\Qt3INgǷևWMnlo1ܹFU3Gǎٶmqh;j<}YY?9P*7qfΜ7LVVm 5bkw΂ S%BT#I3P)KPWV\jSpU<讍_~z^h"5㨤4n"U;M1cW<@lj33>|4xIqav/:^:p#(WWY\\&Mk55Cm󴾬L.R7s(>>/φ FӦM4h999ᗁJPkNcQs$Vv1Z@e|-B g<P=V&8}qu4Gva2z=/v'kD[!}sf\f[Toy7Z_5[ >}ݏ811sVЧOf͚m6Z/{ JgSn}iErUT^Xk 64^1[#Aw`dYdMD\f9ȎX{bNf6f5hZ^ɱwgyrx"beZm{&r/ӿ^/yBQui\`̝;/S A1n8^|\ 1qhSQ=ztQ&7K\+7/b m uENCgk ow>e_a79777Ōu!$l вl όC޴KIIa޼yj驧b̙lݺ88j)T1XC7R:vs=9M!BDGnc5t-.kh;H2K޾fΡ1Ejgx HeoSizhsz#*ph}D5}K"kR3nzhbNg%66j:թS׈ &&G}~p=QƁ;֭eQ]jIt IDATQZ+]?;Kcch;)>oYЉ:ӠP9?{žkwo0Ì[޶1.V^f\gϛqLJwId"PZhO?7߄FURs=G+?9r$O<漎D ޷73jԨc@>p6j y%Э46_)_ I|z8{K$k3nzk=gHlޅ>ZOPPt˝ v̛Jfr"bjaܸq7Nw5ZDD(تqEDD0h ) b.ƹ hfbUs3R[>9 }dmZfM/غ͸ s߽cɭzP},_Q#FXtQ+,رcXWFobq^+X}J͕ ͟\5{[bD2j9͌K Hc݀>C[f>ckݥזCmwT!BS۶mi۶PP rGH׮UN - ȶũxW[ogs5U9cwt-.sNd Y3Z {wtgoYeV!U׷o_GA6[h܌e.T/&p AmbO>響`1D>_gn}jh6bXe, &c{fܺ*xKJ{AMe&YTlBhjlq,p->,L*suE/gfΞkqQ? EiH7:c˿̱M>h<+͸;U8!jpƶqbbm.JUw0жc{w\[^- 5VW>ڸ5FRs2VqyɌcSاABTMjj16sNA=56m g|%S~W)qˡ;z%gU QkaPtRnx{WD1ז3Ga~3nqݸ#OW1ܨڿQPR.SHrxx/8uQ-D'!Q;3>{"G.~9sBT]qq"7}1BiL!B7a[< k`3jFC? e$Zy1uԶ8{oɸܴں{=: q=նWYB=t &K|f\ !.++a7B'Q<_Pu/|g].#k}I"!>k^oHA7d!Dlܸnlo'6lvNBr[PdB!§j[Fӷj[~g/'ph5Ash۷j@;.;v !dR߁7M`$Dh-u%V)"ѷ%|g?x -g?3}*i}.3cߺXZVBTlɒ%p t}f͚ %DZدn6[ۺ[ou;?ͺvΝ|b ڶ{_BoÆ mbP "8*{e QCvvvA⎌V72@ˡ{FHu6c߽cRX#})!DMfQpGO!k wukdY*GRS3Θ.yqtr= Ìl_͞_f9Uq#(>Yw qe=qs-&LN:!s:ujIW3>~kJV… d-7A+A-s2>n5"鳟s|Œg?OQI#Yg]aKֆf쎊̸0;Mq<DZ=qж6mW^!333dn~;o_MP}lݺ~ L\H.Q3}FC?l%ҠUf|`dYdƮ(Z^q{rc[hy}D%Ϟ[bUBR[Y뼢XgO&藺r]w+N%(rssyꩧVa@f O/;6Xy ZԟZ.jf!pf@KDZWUӽ7x5{N=ڝ sOd,x4|'[f#;ְ,%fOmVd_ϟ^ k…̞4UNTQ 2n8<Ǐ~amܸql߾~QlW^%%%7~( V@Uhz?ެO?߶Z|n?}Dik}Q./^8/Ŷ1)c8b뜗ZurW?擹a\Q{rkuc6Рz⎡'n=$3'|oً4c/YL8GyD_F_s* [gIT7,8 z!^Z'.F>)|Tl%\NOy9uD%Ǽ\x|TQ )xr.{}FnuBCy{S..%zXhk7#ѣz?)B~g41kZp8i08B./XRىCN0scT~qJ\ B$ TaPWpƠ^ܛpn- '6!A]ּ/qLo1TrnYNA t!B J*ը sqB!%FyZ% !"@"yXOB!D6"|!\>اf1 !P f6Yp~ jNB!Suv@=' g~=xA_*BN@wU:x*=5."z`0BIC_ -[w"~1|\5ȭBm򀎔PjSw"p] &I !( ;r Pe8*Ԫ2'C|mxYf|ߟЯ=dݫ5O?6mhAQLf/6 Z/2ߣMw޼DDoI묬,Nʌ3|u/CY rԎcƌg!!!|D6k֌;v0UoҬj+rD4~veM68U{\&.^+Wk׮'!ĉڽ{7ڵȑ#ơ_6 Q=Ɓ~1w\jժ/+?1cFѣ!/p1jISܨ)xҤI<L5>UI3c+ZF8[͸ERtDm OrBaÆ?Gy8Ϡ[TlܹsIJJҗ >:up3j=ynA}r`ܸqaWE˫Vqrt478u*,419c!UsM86{Ք9NYsa޼yժ16 8)ScMo߾=O?t@ 7cmm|KNԊ69|5݌7hHiAQ!NT||<&M3~Fե3ws!.;wp9wp6WZl|Mbcu B>ڰΌ[$%sIs^_'^u%Nr]X^F믿ҥKC=tc7x`f͚U#ڜ^{\PCOj}8=;uĀ.o Eե+.kO{vx5[Vmh B8.W_}D 4ΐ!CjLc Ƙ1c쇆m!B]; Zr:d嶭f|FFN=%%O3um3E!O?I&^Aʣ>JTTT{W^dz gk v~Zjs(sglkvLb {! &Nƫ[.?77͙սz"%Bwb}f|U4I3 fܮV C5jB!#F6@kA>8ڧO`椅kVqFuVv5G<wu;Į!O \:Ǎ8ҹs`tnHF5=c" YfU}@&t.;N !ujբCC}@]d@PM?kVRRzm9&"::- !'wo]@} ˞efEE3 8xiӎ#Binl;:aZ{8o3M96]P\츶\?.k۴E!zBS؆m%#73nh\S͎3w`x6F!Bu:nc?RT:[sی ;w8p!_Jw~2C7g?bۯ9aczZ}g[׍uTZ9Z!𗬬,{x ٿP t3kUGc GB!!33vszǎVZ&%sQf[+N2'ߊ]B!?^fbl׭[{jgt$&kZйɄoMk!dٶXfZaY|yP!9:ZRs6'm}w}B!NƎ;عsRA^fYhp􊖭hd[ER24oiƾ" !'j̙Xl<Ï?ȠA^pE݌ܕ@va!mX]]ҡ?0WIzD: !D8x^mbcciԨ46m=hCMjWƯ=Y雹y Z&%jhvxuJdm[ڲDҷo_6mڤ;"##㏹uTK.eٲeC^q`ƌddd/;tfx^5 mٚV 4;V;"\!*D5rH>cݩ#h<1-e3p9_d-> [yKZ''BJqB-KJJ[x"^/wq1c,<]woU.k`oM4\Ҽmkr*8!+Z6=BϾܧ1Ok)z;v,/r 3#GW_Tlrsɀ9n3f iii%4k$$!'SJ;ֵI2_硃vhHjt~Q2ʕ+ڵ~$!8n ,`C)\dj>3L0A_F~vZn,Yb?EuM5.&(:uDjj Enmt}%11"@֬Yî]жPs 01ߟX}\/^LIIpp&Qv(A5 0FE +<0_^B!h#B sN #[nAy'UA64.*7c' !]J4RO5B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B`rN@i@ ?X\8/T "'R[m Q97iN sN@HYIqzNBP;qBn:MI5%DOALFt?t%6 D#hrQXR, cF K,j$?FpGDdn+FԢ јAzFнn=5t!Bң@#h9~)+>Fɶ8 ()D )ryO˓@jUo6BmFPt8]c:"Dގwf'}a4#|oـ * r\g4CJmqBb\Z^~tP$Ni(PO&˔Eܡt8naFߨt0؞xm=v@-`j_I.0+[Q|> (/QZ0"&ߥ9!L|TOB`(0IȐusc+-ň6U"$]7&Jtrt۱s9z :1![$DתOA7kLG  ēHb'a|C[Ҙ'VԤDZ\z71ℬ}] 6G5:v&-e"$ a t!BV<^|R=t9u]s7ј'QYհq#*8]u@<4ȡ1lՌFw"Wp,Ҿ/u/!N\g"[}AMU3ߠ!=ɌTvrܴl8~nbŶşdrhj SeO. W݈u!0X25\v,l DCM3]gt8!j-)f?[R9%!s]JB54\A^Qt8nJ kLG 2A]{`oQ>ذӅI }ޣ111nQ@3osz* iC;|y#kLGaGٓau\gͷLAgU (7><ǫiC[ p3/bVN7&Bw4#87\tD`-.ob_PCʆy~6e^4G&,ܽ*l!B69/kEy^}}>pW%'1qsz ?A/wŕpјmfeiLGbQA5гPE;lǛ7zgێrzS[0~%K^A~>_1!N$`y;4#BT1p5vl(e6p:q.>ٷ b /uJzQ{\{1íbKJ&w9ՃЪ9|z\5)Qs!=!ԈBTo&~p7-nA-.јyotJuLP!"XYTYr 9|b[,DUIO; !N1'"[w"BƸT!IENDB`pairtools-1.0.3/doc/_static/read_pair_UR_MorN.png000066400000000000000000001005671452673171500217430ustar00rootroot00000000000000PNG  IHDRsBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxwx?ZTEXbWk?;zQ!`EQ JB893M#{vy3;̙s(`[B8 T3-"B82-B̟@W"2y8?ۏ(L ?* ж+J0L Ҿ"[O>KB&AuEL  5 zQ^BITAM k G AAAA" P\צ-j/JzL^ڊ8Q }SmaŁ|Vk959~Mhx}r22F}``v8!)ˀ_l@'?c )T3Nۓ dϢκ:mzd_ejY8=~{Ş?g{в+v/i2:mO1e6|q9uڝZm{|[Yi!I-]Ԏm [9ƵZ]S>-߱glhuhٿ'33{ 1Wy _fnȠCҤF"5omTKvAsskO<(˯)7`OZvtShYusD^x墰+EZ}| :$6.)g\e䉡C~l$:1z^*aCkԈj=XԨcV˓: ?]R6'>jԒwkWjׁ #KdFlׁ6-O-]bLKxU 7=\);yӠ!l8s޺ ʛVzg1eFVmӒ֙!Ӳⵛpi9Kђw +_š%iyCkDZ_-Bէu$m"jNݻxk #ZF[b[wGZfŚI\QѴuhi;9#JpZ>zR$ß528/8Q.tF5)([rh (UD#}h‡_9Y,0*)Vڏ|H([AN^I~!KKQ/Ӳ|(2Q1qAR ;_kiR ej-GbD9MmiVU+LasS2e~wJnjDK苳dT 2ՠ!,:-vN|ѭ߿Î_&Fl=v2N:aFT;L#ZϛĎh-NݎgAZqq<ҽ' *n{VW %-A.0}6l>-Bv;ڦzlڍz:e|0@Z޽˩eKidLˑkVs'˴_$>Ɍ5%36[dPYN,JOu/dFxGÇh .jqQx 0JZкEqݰ4 hQ]s_RMiYu'%pCZ~Nw4=zcZM)NCӾ#hEH :@hU !߁y\bkK&ۖQUR>86Ϟ ePu73Zy͡%ݺ-[y ZGzmNz1-BŸ=hP |,#+hiXͮe>yU(.zP",wp]#jUi9oZͿ~0vXZ7JͿ4e+^\KK?eNDZ4ߨ$BfB+OjSi-^۪xw̅ABٿ6}N>y`@̛ÁqZKKH9 CZ~cvÞh|֕f >g_mDˡ1[tMιֈ!rz^yxџC]Z/^hDKh2ףMiGsp|(#_%:z He9UCC 洼v9FH :@h+%Z"{VV~eج4S!{VYcbU}XMK燊 ǦeHmqsmgلQ 򵖫 BQ׃i6 -:l5h 'sq&qjgPR~S5\QΜڏڅ6-P~k'kXZ KPX7eQEkzJ+3Z>mZzJk#ZJLRPaٓMV~>-N?A'r1k=ikt-A#e,(ppm A|Ȳi?q&m<JOgG^4 ,qB?oy,ue[n|ZrZj$)SBSZ&&>@jj?zQqhyթ)-,xy"hɊ+q\:tk0Z..eW.uUŪMtiYjӒ*V9[#y0뢏?؋Ք9)aTT??bOvǟ]}?Z.ǟmF>on~=#Zv>ms\ n~fm?gwgDKYsIr$ôd@K<풒ؽh#l<|I4Qn3_ Lښe@iINy(5*i))׆6L*pUnGj3V(oL˦ϟeWήe9Gn\E:,ڳWCos`b6Rk-b ihRoZʹR}atQ)G:-%eq/^qL^>pٿg6x+8iX+?IڠzִM]76L{!)ִ3,0JiY;?yF(]WFK3(%gwn=GˮZ#zT~*zy`HE@Gm} Wy(i2/JYW)^F@/lMQ/xl ^IcfSݯY~K,ҒŲWiiw,zdٻ3Fp}[#J x|='x/ siܣݵDǛ\7'S{[X-tk^7ii?U<>,l-]KYLzEna.9Ԋ=I+,侅?Ǽ/` 2Z( aMAwԡfw oKx'u;w1--/ϲk>̌J@ KXcZZ\_ךIc~ fo`V_mqfolfچuV68+-A*zғʐf09k -B] k4%3Z*a_xWڿg6}9-JX̦ϟ3-iY ?{ƈAgŊ*=h\F |rA-AcynqLې!$qEEnsYbAN'"?@I[Wm?в)-+'Z{2K,fi|)-Gе\g<"f<;%ֈ_:{deHK(^G'K&c(dSJchT :䞗rV{/oF49g]|{64>j1%,ڌk^aϟ_r!MzjoUv9ˈA[#u0FLT/ۮ(]4fRBkF?r#n#TҒKxʖQn8A}t 3[m- ,/)?-|rm_WhA9(j!XAȠCx` :BC5 F$KTLv   DeFޝ_@H.`:!r À+yuO<\ t(jO 56@[5+^uBeyX܄J^@QO{j֠Nc+Ы,`iɫ ~kU@,x{ .. i* QlBq<́4r㼥|{{1:vnչlfRT|>,!T yW0 * B} 8GH{&E)+c8Ө|c~Y9P&5Pu|&[)q{PWIawLLU9xwQÞ? Tr "SP TE?!)-B x/|=lLH^F3rC Bw1eG sU*<꣸Q^ar8} ߴCŹQO.ͤ Gtغ끢 @|>sQa*v p j0Bģ @=QS%:G-{3Šz7*@ 9.GEy& z!@b@_?C='nEna-UY޻}UޅQoI-tg&}Pnñ?ϯyP7P>m4 4!h.I'' Zv<*3c;Št`56mTQ1=Ix9_Р10㉎_caPυ3kY9U(lǢV)B`~P'y}|z-{L >_5ʒ*7 gz%Ȃ7CqFe-%},?5cF H@qz}@t1=pu P^PQz%yPMFme]~nhLq7(rHt,+G2* %!!t@<_(CQO >g2*$y.Gn"&v.Fͪ{W}="7 go |epfX^uQDqvnb&:Gk Ӆ HSនA!xLawp)U,Ti0=\rž7^eP݅L~*2+'"{QU!X G{BT)QaUXаpqVZ { OFy%Bb!3J~}}&ߥS/gzoP9S6\1@B㦅U|ĩju [$N]l2C&e(o,16Tm_B$YQA؇PvJX_zn V1Q717eD_}o_9jTz%Rzϸʔ8 BIDfra=/jGOP R {J IDAT݃J?!ymQ'Pչ |"P9% ByvaƏۋWAÿ y~.Ŀnq=m #evi!BL(1#~!*@=C(CU BIڋ: #4L`*|I BhZ@=tt}_C Dzxx5xsz*jA&vY9Bf3Z\mP8@.E#Us("UI?lO>pQ5BqaP8T1(f D󘇊ǹJۀǰ ϠrԽ<soAf#F& ]BE/PQM ޅ(syucN s6Q(?uYHi2ÝA'Vg3Pj P>Yv\@7j?P9c /TboY#;pc""tJ?*)&BUfܿͰPb!!p.ԀAp.(~ݫh:D=痢2Bp I&AE?C]ɔ(Ϗ32_]|:GpJn4OcSBԍd:o6c"T-R|u q"D`%:rB~kØ+mk(Uk`EjgP8xL M#|GU\<ˆ4OhbNy?l/]~9U| oxKSQNFD;}\ H p=0DzΨB\A &ycqhj<4ad/.k8~&^BFkwdTZwrBE9SQ!hmމpmqjo?R ű9Xf.tc?:IB¼  77 юTX_3}(n6G'&i4GDŽD8ˀѩn|WixP5MQ}f!=B[uL=B`4UÞZ` f05 B]UU=7`k'*AlX)@{;׹: ۷Gz^[P30ڄq{t@Mͣd?xp I۶(=۶S5{ap.WVGpI꣏6G' -exo$T*BX.Ӭ=@?hc#.ůǰH"T1׎//P)2Ryʰ`ɟ'R gؾ7p6 ¾Y* BF}:25  i$Ľ n{:" S#u`ҝ(c`!e|.h[} %GfxNB=xޯը4Ƞ_D~X-o3_#L$pF(yLV"m w<i&*pހנQ &onC>6%XDG@N2,W24_OiAމC NogTD pFT @]lU)P]QpQN?OhAዚ VFgq!x\Koqa`Bߧ@_r'l5 t@y]-,{!;5M B]rTS_o&.8 'pB7^ޗ:F˛qw)m~Yd8Š|S1,!4HDNDpx^ ATŴ `O°1Ay|K#E LBc[ M!55a'oOaTC !0Q lbUEF_ÍxTNY9B9H. AbM QkRx_cy!;@x"jyf8|z,is*d%_ٺ51;{4u|$JɅ;GfABZ k)~}ը""\E+J!45૟y!A%zTe8z_N";g>+ h.*~N 5Paj !i,O TE`ف yp5Y)TP7'TAUoE* -LL0#ǙP п+\LsAcѿ kJ?q_# hBpy؄ﴉ`WR9m$H1+RDBeʐ{&Zom=AW^o.0śdT=cL丩FL A& } Ƭ4+G(;@r"(ՙJ!ޯUJz O!}@x;֢&BGvj1×.6湨xȩǠj/Y( ͓*MQ:VU BuPK?2"HA<Mb3f.WT"'JBƒT=PnвQ i Ϭcb.J!CI>jSy仺5Hcv k5i"y jSx aGr"Ih؅g BXQm8X@x'!>nX  k)8<ńvK!' %4#\•(}s0 P6 k(#'jwnTu/P̃|,_G̕>t@<{Sn>G56SMAeg4| C}Ь@99?bZD.̞Gn MzrY9B^'D&i1pa-e:;½B34Pa[^cCLg`&\%2^Y8:nP"eGAГK {(jۍ*bJxX_yhP~N AjVNDs۠;6RvX)8/g聧ヰPa_USfA(a-1 ]ea-1*lOQ k G\(S}lEM @NBs"p'R = ;5ѥĶPBQ_0Zߥ ڏbVuW- w| LA%MEIi%`  ;Fxu kp t5Bw VLu|ݨ6Gj@oy|@nN BT7-Rfhd<_.yh%{PoN cѰpi)5Z4Q~бj?nw(:}#@0{c_+PcCU!y}-jXKAA{,B\5ĠJ?,dWA1?[G߰w`Xr-gʑ)~E ukO0Yi GąYHy^=llZAjzިȡ!*:sȭU-rg!h*MgL@.1\h0N+wofofOj7Ѩh Py}Ҡ^I֡|;H_xP^TdQ$ BXʅ +v 9.$wdVN@h ܈M+1u GָQQ#~ z LՋXA <-yڔ8A67AA5 t].B x֠4C9Pe2 80YDf6ZRTD\X ; 2-: Q!9.T|adPЂDy4o7jCOF}G_>74uU*"ʉ"IUdˠ~QP@ B$*]'9RU"ײO!B֨aHږ B8=8qAgeXڠCc TUr(/P4T]L;uh࿨Hj ~!"J!U"BĻ(ϒ̒V(i T/TB A10Դ8 UW(jU";EB<*\(bk7 39?ٻAQ);;hժk֬)w*ȑ#y |`wO,Y^zo*PzhѢ3g$%%|3}t>vm_+cS29<#rʸP ,-eWT "?e0TZhQsU+xsECYgf ֠CE(~^zYYp9E-7Itghkڦ s05J2y#> ]G?Ԍ>fƏoNhڴ)?ǀ%߰OVI9e,=ђش=ɧ 7O>IVTK4Sɰ؀C֭;wnpиqcfϞM.]o_ \꽮} 6qy/D I@[{=BNȴ`zp]^ E& } j;u;iyV@lz4;8H2q3,)ZV;n6=j'6HrK*q뭷Ҽys[`8o*ъ?~<<9Ew<#)!9J<*.F|w޿ ABS.P@h҆u,V$'@zL7kd̈́SsIjVǬvlz4;`çO8I闎JL7ll=zB*ڶmܹsIMM5*@Ԯ]3fPn]/e yrhذ!/BE !N?TaOOQՇ= i@7`|/N~F7| @G@4D}?OJ :8&!c˷~6Gwn-ܦܼ|lwOR;]0/ q\47ʱ Q%{z]vyޚ.#PС}%T&NȐ!C@6*0NYiAdoi\[,0c'6mOS8Q,m;˷| 堻ia|mڰEn!Ig2p\"zөS'n&ZA(waHM_iHسx#m"uTkj&XfH>ec<Bbh9ș^*VZ5QS^րCN􀃇ӫW/[aK% :Xz)))\y˞tZڳёuR< #8{#@a+./y6a^8+mb#m"6Fw$7ky3?<#.gy*r/r뭷4Zjŵ^k25EW3DEI4 2&LضeMxA饧M^NmӾדPWNǎޥҹsg;4hPUvd#qr_ F\ \ GE0,FؖEU() #;?#f"hl-GDKn/TwHj7v[kS¼l6|K7iDj+ń;Ü9s^9\.FqLzg?ZW/t膚P( <@TD=" FUX,<Ƭ'Q4 Eّ6OK79&;&_.{DiG8CM!OF hӦ ݻw?ٳ+A@c"ߟjL P?E]XĢ_6a'5@bi㜑饛H^]堻tŻ`>ĸ& 5G )%~SP}B\IH]|5 v~#;VVZgvי4A.C !>ѭ9 'MAS a3*Ž' #\i]P4hKrQ.vMiTDYiOwMwMΖ9oYZi9AȲ`7_=i+PY+`JR,mEXw:&{ (6wuN ?LanEeX*@ǎILLճuJcqh۶mi `=vM^Tv6^GġgVѩC9A щm]ҺB8 4!D(-6Ѭ Jhb}Mt]'EWW?Ih DEa% 5DJ {`]GJ'|`؞|\U#0mGߧsx]fD.4l˩q,'ԠHQFf >0`7opt6j9NwDnPu7&I&bO*6O9/# A(;IQ(%qt`T @>0k9@C[; #ys iQ QqըR_]?"gZp`oawGT ;i[جcv/\bԩS4#Wz b™:htPGD֎Zj'?xSf1LqRṈ|ߓ{pNy Q%BRRRPu P2PVuQ&v:ZTY l{l8U~.e˷o8;11%͵ gL4CvtB"MzjٺKq [Cc"33<\zB> 8ɧ!f=7q[?] ߑmހԕ0Mr#Gy'8?ôrۼI #GxXCYYY+Bqƙ>0[ ū8zGqӳ`:]0m>'vQebW:5i ahuVDAGA{ĺ0/j';z'k4#[V"B9p,'}AMbդgqvXbTt,O9 j4ic7}yvƭI9Jo[6jbbIr;/_HoxZ;v^A8gApQpo]%2 w[+wHL4{&4?n0LjwA_qxINf;߽G1) Bg{S^vYz $KIl#27}#ݡZf4>}`o]]QѪEYs}Vbuq[zzQÙV{ptzA^}(tim޼{Ap2]\sVg`}>P;8!TTfɶK,jP"@$6HrOPQ ] mm.dq4F fvƬ7JVƞų+!믿Mck.rrrJ[WShuΈϞu"2SӦ=zz[>UV;zm_xھm>p#m轸cp~rY,]jϳg7Eݲe˂I'֡ %g6N8NJޙ]c™RfyRy0Vw0i#m}_#* cCfʙ 41!{ee$N;4^ڛ;) O|=kw61gJr&Є$&>t3 Ps?ڟ?eΛ4:mUc:V}͆ 4:upn闎e.0G~#''ĆiRS/+VZgv]|ߦ+B萑ѣG^9\.^~eFmZJP0a |XUkҤI9`jpR97hvM:iǰw-ljw~lE@4:u}hyBd|䞗X4-_Ntȧ1eW\6D>rH$(gA;f{ Ôav0j*t wHĎѣG̀~wy'SLyϤIAY?P"fōy|wJ$:Rd 0-g>/x{r{Z12WB0$v,\ӧ׼c͛7STTv*Q3qDk58vXg-FMe #iE>Y8%Ipvxo|;0,VS˳s5Ӥ[;>jŎ /b7Z|Mt{B'1cưwsTGʥugɒ%L6\D&II%4ٛAZv[;^?k|pcleW) L5ecwa96 ?}ɟ}>nqW烾g]O?1lذg'm#-(¬Xai B^O&BfL.MxUzyhko7ʳc baeA9!a[j.z0..ޮ"#Gd„ cƼyBguӢW@9[Vq\Zw_XǓҐNoǥvenb+G0{A1c5-:*Ð1k,,:s> 8+˹3j+ txGCYf?!IJrl]˯)0p-e4D>4hJk>?3QaT Ȇa^kcOJà&w5YfJ3ǭ?1KvsѣGc Vk H⟫E]:DDbL+ \Bě?x1xFfhEq,cЬ aa"+--eԨQM[ {8ǥۯAo߾0g.\йy !8z1beeeH=)e\6B^P༽Jl"?e?̄ աW饢8[S/%uyyoMd&Ԧ-iuZ` =ĞEڏ{ˊpQ`ࢬ`p$7 |־1}͎HV~? E[VPQ8?Uf1kØ1cx(-[ƹˮ]Abއ蚋~%yyye$RyKj<4H99i)>`//hFY^Yג֬9;t$2+UV1+d&6g};7=Bξff .sΉU2|p^z)#y阵 |-77}f̘sirk$cɇyfps wر? #FԘC=zu5 mL81ojw˹;ϑ#Gy_zzzohY34n7~x؈$M6~G}ؽ{iӦwzAmB>}v/^0`@1`u&Mxb)UVVz7Ք^RRz ҨQj9x %%%<㍢B**N| S<ktgC!Q |@˖-v\o***شiiDT6mj<ד(** ]l܋M1߫O6dggӴiӪ^/7n ݼ3=A^1'""$(* t;&$+x=weLDDjmrOn'!ˁ/AA0mo4_DD$W8ׅ /0 ״ `p\DDʀ\`ۉԠ1fVn'F0+UT;A@%rԩ29Bmј?08DD"`If{Zc,i13;[ajpq@#̕)7afR4YvG(N$֜M uxk--"""$̚J>`jiìԱs1"E_5`pB].aߚ\=VDDD>0^&LDDD⏵ h>Sz]uyq9\EDDD$\ 0a˹K1kE}Ҩ]cNzss3R񙈈HD9{^znFEDDDB%P>l# |F=DDDֱ@)`G=J1KnD G9@F8bH=Sr9{I'.&0*wt| ^Sњ";*)ƺ$w@s 2]Nz`VlWK#>&LO1x$P.fšD ̠tA`, |Zv5H~v"aw+]ENJ0ED$NomX+^N :xKDD\ D v"RxxD 8DDDή/.동D"d:fj! x ɹжm[RScP^^бcG]ADJ&M<4FkCzz:[GرC*~h޼9ii=s޽߿5kFfz,"`ΝY& eTӀ&ֆۓ^FuTPP={B7\a T5e&M4aĉ 8+R0ԟ.u5)c' U8W:^XkWP1ω l0ݞ j>`Fkψ>'}̺%/"RCeԩ?6Y@  dX^&O\uU 8?ŋ[  Uq/z439 ɓ]L'z].$%1<7x`f0{OA駟UW]̙3M7bf;r/+fX IDATw/jٲ%f͢)}u%:'3o {8II |0a  oq"7ZnͨQ`m:XbJAڷoLnN%ƌÇ~ȢEMahV, ?ٸqc׿&զ|g7wlK:vKˌr\ngryN("R&Lwq~唂8&RS)xie$׃+#"X5jĄ N#HΝܹ\U=s8쳝~V.̵Wjذ!wY?zLвB`ǧjͩ-[E5Gp=z4-[t; &McqHIIGun @yũ@o=jɹiul*r0.ݍr"zv9ӈaÆ駟Za71?U?C`ugsWX^VM\R6%TKx< ;wTs ,>Smv*dffr)F :￟;wZ>εfggsgF;;\ĐeS:wM5E$q%%%qI'F7x`5kƾ}MCѠC$Z!C5q-tfHW;w]I!WvBƙī^zѫVqS :t(SL6] a}Nye_W. :ߝ\6m|;p0sWhED$񤥥q饗:7V.IK+$BXuDye%-юqq3 JDDׯkgk :5p  xoclӖ>?|gnD߀AW]J>g9hтvڹKTT61k:6,rK^4NIj""Gzziͩ T)S. *}ಉְ3Wc :K9֝={V[brj&vjs$rS<@k ۷p.;Kfפ)ED$ٓTGb[r\~S^Ys˫/xi2{Ѫ\""F}u<@3͛G5h*C& K)}t0x<nRd[wZH_ | 0S֞ekצv|vv"תUЊ-<@C疆 „20e Mv|nc{Lˆ{45MF#W6qQ},]L4Փ|HyH8x*4h@Z'~7dd 8Hdf-O">IչT6ѿEˠeeo/JƍiED~r=@sKIIIT{`grQt]FU+)(GDD$~kZ!]I[yu7IM嚮ҵ|uKTs!';p&.YY\ұz"""8">Is$>'WJ^^X4hGFe̞_#% DDDp;[mՄh3hݖ4xsڠL"""uzٳgsӾ:.l߾<"&M9[lfOYZr2<ގw;0a7xYGҿJOã_ݝۇwQ^Yc%L9}: /4V.vf@ċrLu;\vQ;^xݭ\R3`0y]M(lӖ-Zp.f[E:3 M”V2 V""u`/_vpuבv*Qz1cst|sq]wxHdf4N]tnn.ܱn0zឯ VpOᆴ,"r^|EFvdM 7v*Qx駝V/:AK_0p@Sspg2Wwƿ6mdK'e٦IĿseԌYf1{l6lv*Qk99gڵknރa%;z7< #/ CD$߿?OnrM71m4Sz :7=V.,KgN2TSfw̱/o݁)wa+-׬BD$ތ7.}.ժVyy9cǎunZi46 Nqq/ {z7l-*bֆuA KG CD$< zo^0oV^x1߹i#PF\Uw=gΜzsqǓ( G ۴g-ZײDDyg\٣ |C ߫z)֭ =C0 ֮]ѣ.CMVcD]FWtbłۣZn=tAC3D>;3SFǏwu65$2, n6]L':RS[;+,ݐw&ٿ)HE$q5R+?]uos墋.ip[ƌܴx B6&Ld~1=}IL[܄w{a<R!"xЃq,4v(30|pƍnV2n887R:`lڴ . gBs:efK+_bHNv<vk'""믿fM/av&``O9(H2M6qWR^n/\ _C*[p,-5zhFxKayy,$6m䇟؏{}>~8EEL_:5+*DD4|̙ c?8?#<ef^1c#87܀`,Qw#+9sYf)E^rRwゲ2^Y2h[z Zee""ƺ` [U(o( ֭[رc?ss1p!YuM13MN6s3tP:t@j/=n8&Oj)4gnf禇Xr s̱ߟ9s搑^VuT\\+¸qB''_Bkj[@zس7<Lt;*\Y9ו*.q]\9 DD>{b`l鈙*QxJDDb*`ILga%$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\vR'큖<(R."G# $WN`Kv@vkى3<ɽDDDDD_2rb_g.ئ-}9#&J0Yw@"p ~׽'SĕA:1}Uk`'_)-ogOIONJǻH] ڟYZ~]8͕,D[Дv\1ǽlDc@tR%.m”Z. k!}IN'r23]LGRVִ5Ǟ{Jx+Y$8_Wo5ʖx Zt!Y]Or1:YTcm_6F pq=\NGYAΥIUc0W;kJD$AFZͲ9MjvI1YHJn@eװH丟ԠCǔGvZCL`dۃ^V"1FW8BD&hJ{Qě3KYQ :{j$7oؐtfw :]1$OIѤסcVF#)z;pݶ([K4hFْ';xQ :Ħ{]0Y_$̎>L9D#/5fÁ"HbOIop[O5ʖspR7s1xp~ Nj"6}[6\LGY)ڲtDijNìe986q5ĜTq+HkښvtD$k#stMkpW?׫fl)<[Dsʺ]Yc}&P"zHP$A%a}Ohj-\veK u 1_:snt]V0mrH&YAaH SjT#*鸽9;u?7ht$J C1-tY>p9p~X_U܆bL%?T 3Xiz};][mZ;Ar0gw5E(g_i)/,_b:"Ge4 ־19b+y"V5:M5Ӭ?v鶭.#Rkϼ%X71w3X 9xny%M/8?M"ohN ,ڳtDjm/0 w.# ͏f) $9E@.DŽGo$ q1˫]$|iLEaI# 8/wsO$xiabC  +CDbk8m5 /r1SŎ|sgq{pux t}f--/+Q/c1oz!;_ɑ/|V´4sE2kw1vp׮v/s+`Nh|߇y+Hk\,Ͻae=X~cYغРC|xq?ՒW~ҽ{ӑ5qj8⿆5#="0h")e+xtDj-NJsE[WeF^|UN])ߘՠC$Si_^ԇW(XH ZǬy}0ݕ?۶Ʃ~ p7 .^Ll/@ye%O-4Ob_l|o*%7ęyَ0t0Dc#f%0sZ5f]U浇URJ`$aL}+ ocfZXi`A$|1XO{hI\ UTdt7#'b,#1\Ĝ˗xL]_Pe2`_~y .^`mYɶO^u1Aَm/1ŒS]hH8=lg-aYq[W" ՘խLq.f Mq8./AbzJ^&/ Wvyl6==]LGbP>Is@=PLMŜ3k6qscbt? X7w2oI\)Ü\LC\f$jfVALbfhr(fHktbnokc㹷| ?Ӄ?ؼor1Z+Q~WV sfwӧjcI a;,~ #Ӏ41̏/+s1Zl{~ƞ>p1/3'~G˛]W} El{ 0V԰ǹI٠930tsL6ΙY>6dI6fJ5hk1ח Or3Aqp\߂! wJV%X3H|Zw x~o_3lRwaj߇)C'4oi5ͨׄ$w dРěk3AŃYR<kgA78ɹ> :.IDATH I=MDD$LXm{)nMhAEL_"YiA%Ma6F=#iߤ)⪼ \DFk Nj#"""""" `UτLS3"""""".ѽ :H|Vb נ[DB IENDB`pairtools-1.0.3/doc/_static/read_pair_UR_criteria.png000066400000000000000000001276171452673171500226770ustar00rootroot00000000000000PNG  IHDRuuXWsBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxyxTdOB6 " "Ƣ"(j[mnhEڪU[Z*(.("" !=3qrΜ̙Lu23'3PHy~CK.@#>0A_ \0p1$"""qw q0A^ EDD`nE ""D==~ .""" ~o߾\yt҅$%rlЁ$k;!$7x`C|s=wӷl7xOrM<;a +VOЯ1hs7pY$&&2eڵkވӧ :2G0VB{Yiӆ)SpAZӣ Kz7FXW_/ۘbSXXx׬Y '`$ume Ne;O[u3(*v|ǚ'=lz\~xՏ=HHaM/[笟W6 ~?{Nj?uS'[usߧl7h_p!#Fh=I~ իC{^` 99_c[Z3fp5װg. IDDDZ8 """Q/pYddd2tP$Y)@F}kOAVbV{rڲb/Uu>c~볎}­V`OǤߓz|'ۄ[InɱtU|Xum󞷍]_b yҌ|>=G6n9E|MƌsoiY."ϟϨQGLDDDݑ,; uZZ 70ueVcҝ~׊fUw:'f.~ƪ N Y7>;g坿QUͪO_bJߜ4٨Q ~1M1ZƬYb*7 8ӧY."""ri/"""W'ŭ]HN׋3up16:s#7ĆoůZu=̪lnu"1slx!UǤw.}߭.@bV]]RȖ^{҅MslLœ9sHyfάYbmYg-ƒ>h L^roT"""ڋ6ݻ7;&`4|v*. CɌ(-N&0v'mmǷ}Vқ3o%y.&IVd[ubt::kj*w*}?)O>iQD؛;LfϞͰa?{6m֭-CDDDĢ%y"""2vILLtq8".ζڃ17̤9NZv7דɪK moһ"%'n꽡7 t&kl~iG7!٪[ɮ3݈:oN=CfKwm۶̛7U s=C-KL{"##I&9w ,6ײz p&6:bkjOlGFcҝEξ>.5h{g[UBC/ {!J׋,O_NN?0/C?Og$d[u-|n^71Mo?A;]VKh'zA޽ZGS9* EDDZ>iiitͱDz𭭎.ե3h\U@n_]7Bmor:fsζ7M_Xu_kՕ6} VTiiEl{[^DDuh~ѥK}طx lI}\mtS0p`ۛKnty_)-7>ѪK^l{s`lU'an}jx}"rTD/"""[;ۻ98Vo78rBWԵ pM ~l{k3Ug7=*?oվ4 .56xǤmoJZĞ[u&qM|g"OAALEHb~8Dh V Tmt>i!ho{ۅqco{s R+>Mz/xѪA#::>5ql;irss88DDD$z)iݬi;Ouζ 9A=fQwU\ GۛMi~Iڮ`ϦYuBz.j%79߹ *vw=M9BhTfhM` :&gX?ݪ;7ZuBzϻo^CWcҝ1>jڟw{=Iٝzk_]Ѵ7& )(iݬ[n=y",QD V էJ\j&ª+v|ˎ^vc6:ZֿNc%9Uox} ueV֥FL]f7KD Zuui![fLYvTiڋn/oNYrvlufqRQ?$C/#ԖXuJ^)^5FO YumYmt9FX7ucFI{Uo4nr%"""""""`UV9*`.oBlT0c]V]W^8%7e dx6Yΰmʢ V&̪o1gj`F޲eC'"""B{[`Y,XDtf< i۾L\ؠujO\<'nյely҂mtDr""""QLe~b VXXD!ζ7iX`'XvytyU|=[lSMo=xP 诳chL6,\omb|W.w&tmxw}$WUUŋ/h?Fp/"""^DDD^iO>aNana8+9`#`ܯHHϵuS#PWcՙ}N%{hޱߔoڪR2(+?57h?88G$n^&3 7㏻= oc7on?MT/K/Ě5k\K^ |aG"0%QpѯrfqNIw:講zg^Ijzӌǩooӓg^i{>l㋣ewXu]y)ёp뭷RUU0CqM7 JؕCMs]Dv( kE>ذVƏ}*p~uOĎ^b&N¦ Kɹ]0lkP<Bmt>6:{Z_k +_?ao$mO8=_,`h$R: ŋ+Le <xG8(**"""rLڋ;.]7̣>D"&=o#wKIwj *gӛա66KߤfNO~gX33 'ij)^.;>/Of_KF߱}t}/3M?9`0o[L2 0֬d/~:&~SIFEDD0GDDDL/ΟgnfCϰh{oˀYpZu{!wyVc46j_R*]/UW̶xl3mg~ 6Nt.r!{V/hfK/tRp?Xm?gy뮻.~ \pDDDi """,O@{:`恫-=[ee%wq=}C0DDD%Ph/""" Q_~ٳ' J3k֬O $ƍwsǜ9s"4"w9*ر ] ץ] <0|p:uވ({na?p5;D nDDDl)0x= 2' -{͡K!<7$w#""(L=؅9x 4+"""rD4^DDD\ GDD—=n=&a큈} B㐃2W@in@H*8 F nG>8#@i:4 M EDDDDDDDDB{j M uޤ^DDDDDDDD(X`oRp{{#^ґ&uIȑQh/Qh{8ޤ^DDDDDDDDq %k`oRp^؛܋x 1F~ 96iz`8kMCDDDDDDho5ʹf74^DDZ53DZka퉰񈈈N|k ?5E=H w5@b%"A3Ss""r-^ȉV[53c9{`=h Y_iƽHL{qU8{;͸opvq/""-[aƽl"͸h0oXϸ?H`o"QN&܁I w`oRp/""-[ZCpޤ^DD{917؛܋D1H&G'RID#npID# m\pIHRh/ޤD:7)ht4-I`oRp/""n;=1e`oRp/KD؛[IDcnh{{q˱m1&"QFDہI؛܋H4huK,؛܋H5%=G ؛܋D؛;EK`oRp/""nj떖7%7)Hi\-.oޤ^$J(ޤmI9[ZbpI[sl1}3&"Q@UGk`oRp/""떖7g`oRp/""Q܇)7)qB{ hM5ޤ^DD"!--!G`oRp/""-56s`oRp/"-%7ྥ&""Nn>I4H׊>BIKn@bOK <#?Ln--@YDDZH]x#c8_GDDbߗ0!+טi[ G(3Y\$KAj WQ-)7y 1 Ė:5.E{S}p?lGDD$6UA7Gqybb}`G5qRE"O4>Pt{,G+!Τ~PCw """>Fpɷ|8 H XtF5ED$0?}oW1_3KHZhQ8>zܯo/gPXDD$68w{ܻ0~|"""V@J<-RF{"B{ +S`/""Ҹ+X{K{(9r+X{MDS`/""rb5W`/"",ւ{"^"F}(9v+ V{" %܇{^&-=W`/"&q GHi{iZjp^Dڋ+7?"""ͯ ED5ki{iHF}Q`/"">--W`/""r{"r0G{Ӂˀ  JtJߙ&nh@C(+h qCZ| 3n% nK IDATk]4+ ^Jch)w"T*0 Ht{ ǠXP ޥoJ`i%aVH9큈HD{p^DD@+98]Kcn$'m\xmrzboŎo)rU?伮V, Ltǝj{ ;Πv/. N#dؿy1aI֯(k۶MM=?9ZgC~pym۶̝;!C7fRTTC̙c?L<9Z~؋:q2"`%v,Y$ kh1s{ h#G Awr< Xvp^H@#x 큄zKuB;a tO3<mڐ:jT Ք~{/)!;UmhUg<[u%ӭ:>=ܡo}V`xv ImCJZdm! ٻ ^`Κ4j(ƍe64_"&x 8нQ5|f͚5\ÿ/pY`{#ka|i0dpŸg 쥉?v{ 1cVzif]1RIcȱH"ܛ?^Fl7vKWqn$L 1`'Clf{ァ^"NY߶h0%!hL'{\*B+]˷Kϭ:ϩ_]ɮOfYuBzYǟx% IZS7Am<}-mʔ)̞=Z0;*1]fg޼yp * ^/?<%%%'?i;4YBNNqqZ/-KEEu3'$$5Cuu5{ zc\J`ߵk%ٵk}=qvn6~ر#MlG馃`F+h0sF͸qh.BL<իWEMSc:$cMx 8/ofztTWxJx}70|< 0;vҲc>-4h{/w^xf8䝋90i(NJ8kaH82_ӛ3'a#W^?K~OgcsuI!7A/xZo7{]f+W$++9s&^xYaսlKq϶;`wyn͛k1nF0 [`߳gOyN?tFu}Ph?`p']C2q&&Ob1_M@F^y1b_| _ PQadcp{aÈ푸I>{ByK_>h3klxa.ZP]UՏN| qmxT|k3JWϵ}0%_-'L@B‘I_s5ިJ&0 zLRwF%\ IAA|AK.SN9~f[&Z= X?@z!To}XhQv'N䡇_1"X̰{ѣGӷoN!}ŔmoBMMmw2S.c[nI -WW9VՎ>F2a5G^xU:t`̙4~r 8k5J;`,F˙hv&c7nnK0ǭo`ck/ekSu\>Nc0,f\:6]Z-lr:sժfd)Xwp'VK :9 znn0?`ɜx+u c{9e3ָ7*No-馛2eʡKOOW^OXT7܃ó>Kn`\ID|O{v!f]i?[4 9qYeoª ϽʝVTeuS'[u\J `ǨʤwM,=L~Drs4%%xZccE~7o^3Xeټu:߂%c5|׵>R[yhk 8Y~fyζ7%E|e-%K?:-6&1BAcsێvy\U`XjhƌCAA6m2]M7b|%33~ሸxVV u2$L%@FS(Ъlg5i\^_yC/b{F˜Uk7"6~N AFKo^'SCq?֘e3:lsbV;:kؾ+ٹ-NIbxMi=dԸ0ªk׮<?4uA;k*9z!I!]_$XZ+olW@v~Gj<^=&x|)Uw7ħfqTǪmP`]-_ oM ~wv/,_nŒMJ yb&q=s=G>}#8gQapD\ZZdCClRo<4ڶju%VcՉ{9v~zG~}_4Ӟ5RSj;Bf(%]Mu:NH#<W^y8 {2nqM$FBc6@:`Ű7B#r\/1t}Vݦ@R;dmtBKېsV]{ KJwQ^/Ǥ;~@m_w|O`ë9nKi׮v8;{W_͐!C~Ѳ(|xިl$4mtfDZ*G}8ö)j{VfqtR;R6Ҿ5M?4 3.9l{^]/tGim3Mݺu뮳D6q۷G$ZJ#?s-i0~FۮOf9 w)۴[ !3Ϫ*)4퍩x|>^^]r% "shr=n$$$p׺<գ\3΂eiꎣ!9Uזy֓VxڍN?tN֮]8iii<#dedygMi})qcH޿g96vmɗ morom FۛүYuZHڣ"Ӷ/9퀶7>yul{c*[[CK"Y8p IIITUUc!1fٛR?Fpoϸm3(]Z)k۴~uՎ>RZlߺN}&|)Mgf;O[:vC]eNfoZ3scXyI7/,99sF͞7iii 7mo=\z7|cCbj.w1~c90XQ_/Fk(b{jf Tl֪^r#7߲×:ijwUjY?=h|lsklx}ucҝx>k$ N:1f̱޺޽65 X {P`^篮`'ȴ͠(jmo7'9WocڏME޴6 ^($$$0d-n 9. 1 &T>Pd/M&FKz6Z| =^/Ƴe3qP\Oo7֯\:o(:'/?`I @Bzϻ qo^C`=&.`@mGK{n9޽{ӻwOꪫ.+ :c{kW˾bu .Dsc4fKKfUB|;!)BK<34>}/ڟ~9M?}w6&kE#UE[uI{XޘW_}=tV?:DR7`75Z1xgۛ)w `u)^5ת;y@{ۛ8s<Ԗ[uv("GhKw5j[qOζ70zM؄Ɠr3i]wl,_ŇTZuÍK6:~tǤ[3B3: 6'nj.h7bUZ1,m($`sF}tm0iMyFufKL U_w/cqt 7q]/t%zAۛ-.?5t F3'm­M{cҢ{x"W-qv: B dmMg Ӿg=^j'.C3~6f1P9^zo?v km{<? ݹi:PID]pm뭺[ö7ۿ𣗭:gX?ݪulG6W&5аͮoY:^[lza?4 $URR$|-z}z}/?trпmf6i#;BtqƮo5@+@MR*"rrs9}ΡsYW>}4Xd}muNo ^S$d8>HojKpݕXV]]/iYu8z6\ݰG-_RȾ1L~'5z27Oxi`.c&W`jyf_J^kfdGۛn:go}Th]r@ۛB{ۛZ ƤE6̱n`oi Zr#&4}#S[loQ[؀{`ue{#.-_[hcC%ػw1ϱPޱcG7!⎆mo7x|.V_m*̡`Y&m!JKN% BIҏOb`|,|Z3qx|΃;Ʊ,|PW9ޞH8pv"Ě߾}vww=: ;*1^}Xl|y}r +gSehNg_hXo7yڪӺݩ^0It[f?CU666|h*5Ilazrp;ĹalW`̜Omq)jS{ ߄^v'B}`]@f) >dmd'"GgϞ=ҭq4šf۠H[|cfF(cj8ucf{o|"9CBkv|{}dJo~M&chsҍo6:;HYumY1gޝHsr6nkj3V{pѱĒMI!{EJb~ Y֯(\8ͪR IDAT7͋ՎI yt9gڟWoT{ֆh{ܪ7 Q{veγV}{ JѰc-JKܜ^b5KN%{PJ8.K {?PK}U't"Ӷ3u+(\gյxu_."ruDup֜*rX |&B=š#T| g8mC WΦPYءOȫK.f;B˦;^_i^yѻ>{hGmh#"N eC 2D%Fa1ix`&ͶEU+W ?| uK՜6xq:/\*UXu㳵ܹɱwP~gs5|ڗBsx| ,7a6 [F|@"-V !34f򷩳IjGFSlߺ֪=>y.2Wxܡ%f/1zW'$uSI>{m˜g* a#^SV|Db[gp5`,60fax`85'Kr^hBo"t}W:ue?u<ENծ8'``]-e8w$ڴic/hTF,Ÿk:E8{sZi*.vvW^>XSC(oF9qԻW:Ƶ=LuOV$v&shã߭uPm򥿺/?r<=h.AiMj{^x1wnݺA%?,P_]Aq_yC/s6:])46:idxUWJѺOϩT1NkWʱK+VUnՇ;O$η[qnH p9(0f93]՞B~U6tz)?d=C_xڄes/4kgƽ{7??/  M u+JT3t^7!`MF4_7w7`@V׋HjԪ,1:ctaι(Ÿ P~Ny3>ڎx$}gfH&Ol/SO#Qy"6,qpl4b<ƈۄ*3ԯ:ypUZ 'V1"on;ЦoCvwB2mG=pi#ڎ|"ijéߡg0HϷj;/LAuzn0Vwcb7(vDX`oRp{=ߡVz7Nt`{+ #ى] + nUtq5F߁[ q9m,?XuAwª ?:94XPߝX/`ْ%K6OO%qfa7]E"47)W?N\rQ|c=h[IʡmΡKٳضPO>Fgct61` 5.x>[{&:fp_&lݞCgoRcu{O)Yr9/0;]2v~YcoӊfADMfprgk㓕ш^\)M2Nph,}a8~B_-(۷0BZW!fN^W/ț7Hz۳sޣ@W(+ټybs[T˖-c޼yXK;!=.'{Z̊C{9;oӤHwd>/'zu|V (X7zxϒ)$uˆMgSv7s{[1Ap'߱M}lmR'?w_|13gΤ}N6cƌT#TVVZZի֭=M16Y]pnUWctl+1WwtNn؂Ws@^csތz,`͡K%FlW:ASZ\=Hn:ve?#p`&$7)$xJwWo ϹZֺ+MA|c>E7P^1J͈GXch=h; 8X;Y~kCNߑ~1:M$1nĪF_比kw>mO,ؗ-z*-ctJvLVrigU0mb*l/ {,mf˖-׏VbŊ7~-"w4{XpN6VDt%f:8 v2pbsPkg]Bb9kmNѮ;:KJWm_<*"ÀJ1qJL4(ƠYD H5Gu} -{F:w|"mG8_=1F1:Z!>icNctv/.wՋB1:j< 4Wڗc~ 7E fVܻ\43- >r,B Ni mXbٽ`"-ΰ6;V]ٳu ǑfR@|J}Z_6?Jvm`|m}3X"w tU,⬿5g:#.cc~1sL:uW:vmx{G/:(29|/'jx/Z8p~s|<D( MZqvp`os5kČ^¢ț769Fct&L;߰w?ooϺ$pιؽx4D1`|\p̛7/$_D%&&G1bDj* xC0~܌1_ՋN;-lMK)9Hos57`|2;^ |wB {&ﻏ1:HϼLJ*!w=(7kXwߠWY+Sv7cֻ_1fӠkP?|9gZs}Hڵ3c vzόR=˖-zm"T+V 5U 12| ۸43(B`O,|F8fh)ϠqOWNHݛ99~.%Y9S^¦Y [6fܴ_"Oaa!7pyyy>9L>S+22>I| C? 뮻n) &aY؛BK1~HޤԵ)WUɦ /^ys?tf62z\Ӫ 9}G7טg4w#O3i;Q־e)/cz؃}O3>$ϩ>䓈 Xvus5w]G-zWOpY۷| 3beTNF~UhߞuyVwT w뱩Ud ͺ`|-uժJs+QsƌXϧ,_ϊR/R`C휨OfoTfή7avC ]^@Wa1?.7ٷbUkܖv_c<NHI!߰գn~׀7$.i>{N^OZ|#6̛7AQPPt+axj.L:o'-ŋ/HQQ6NՕ[肢#IrNMJȹz޻l*|gծL[h3Q[u1:z B|mSPRf-.Azh2k}0랪Jn>c,X~j?wG8 w1gϞkvmRFbL$q>HlL^|Yvzm6}\j}ػ oe9;f793P|J܉x+9eE7o<2\q )99/$#k~/)Y7G<D`rp+K:u*={t(--塇p!pPLW'c|&L૯+p+'w@:@P3Cۖ1BBj&g>WUcIߑ`{Z_OMkx S2zsYM13аeVzU%z5L7oO XqS .K.aڴi4hB_g͚5CY ƿB5Uv=9 }IhX`oҊSvoٻx Ưqc\8vZa&k贼^6M|ɛ; +@_ٺew?wl2 oM쇞VN\'[onB[nžʾx,jbL}Y FNN{94]Yh֭>TR/SxrYKmoSή9ck|oEuW-MoK/$&OLE c}$ؿ?^z)?0G ֭[`]LW'We}deeDb*Z>paUl#}˦SYY8&? kʪYluѐ,ۈ;Kqϒ]Y+ awQͰIhD'x2'/yk%K0`ӧOQ?~'?S;;}8fo#U+խaKB#F{I! dzvK~7Y紿I<qrVK~i7BMBWX+Zu!c,LowB2mG==ct}\PPݻy u p{<~_RYYɝwyϋ:^?J#%"C/]6meR1s%(W ,ZP***˯a#7|ɣ~R*Ӎ<7۶mc̜9S= 1b 2HVl cFO%+C}+zMڒ >{Ө琀wTkl@í wx@…ד¿qxUALzC4wsʂ 7.=~` F,zE]̙3i֬۶m>|8*F⊕@[orM7S#Xr Sͱ7j 5`$8H)<JpsH>l*֯1Sfpگq1~R5p+ys?xNIѨRͽNE`ط|V!E1FݨY,)on?i;.Bxp'Y+sl9_Cmz9t(`p>*  rwSQQpkz;6`j[O>zڄGRfrpd`/*,R_ar~FWmqSƛ-[K5;9 ('L^b,`=5gݧ8fЮlhځ>"6i(+޾x{Pv !P8-p%$QTQ}nGB[Ɂϻ|ҿIk(X1CѶ'%H|>oj^Q>%bl>8+Q7c%_bÇg6clHWUU7̔)Sxi۶ݝo Qn jG.^/s=Oݛ6mHhxl,gÎ\2OY1_$>;.?w$98 NSp'Buh_]0a|_~>5ܿd7c\y6\.zAILL#9s?!t̛Oj^BhЀTXCݻI ߥ͍Qߧyf-Zt!5j(nOV\i\trCکx !CHI \p+..fƌ1` 쇱V %Ee{`/Shc\9,U,X 0Y 1S1FIJ1vpvs7cQBln4 1 t'p}svd?V0.$G8aH@ oNq{Fq0/`N{ =HEJ`Ƹ p' '_(F]S?XE"Z`L[H h{1FE1?q IDAT~O˜ߝZ{J{^DB&¿'R'DR`or~r*G%+n$H10F,0F$Łk4lj,n /8^A h1{v{I5w̳"åǂc^(VC/sAT~Ay|sH(0BFe"4BLcgtkZeC##ٽ|_)v/8&d F 1^F>Ne1$GX}5" "ޤ^DDԭ u^`Ι'.Pfo%|v>EDD&Z{{DB$Bx +kZAʕ.%ʡjl>௄wDߩ tAPL6:݈H,ޤ^DDh M ExB)YmGy1fڻRK w16ta+WyY""-7)(Z{{1+ x0HqR0ED 16ޮx gh M ED.ޤ^DA35fddW6mڄs6mv!{t--%ϡVr^=Co;!S(Y$$$вeK9u<<툈DhM ED.ޤ^DjKޟ^馛o~CCUJLL(zloV`PU]>;ybqO**n%,\IIO\=x|fz˂~GsfUW]`KСCk_m*:;JD$ԅNrDD$եNrDJ}k OT{Gdf- pXqӭ[}`_>SNrꫯgJؔVDDյ^DD>8؃s+Ր=ࢋ.k׮̇1g/VO!p;W_ ,ON>}n%l:w̍7h?tFx/""@tK'T[}V酿RX*X%| (D 3s)}'a,;믿ޙ"q1}L}[u4'`ʙ3gwޮ];ڵktaxbz:ޕۅsT{ƴ) Ǩ3?G΂M?pz:U:о,IsUM>h؟P̸guܙkךg(#17#W`/"":{S{gq%wS i5?#Aąbƽ8뮳H*0;Tb"9ϸW`/""Q1Ch{癡[gP+1pJˠ,`ވ>x7P+"")T}P ED$\GK`o W`/оycǎc\ײV82/BBSp;zE\\ц|I%7;W`/"":{S0{Ƙ}ah޼sĚV@[Xo*]ct(!==&mk;WD. Vpm)X{ S 57+,nA-F9JԳ5gk0>64n^6tHw}S ؋zBII؛N6W`/@@rrr-Iۀy5Ω9FgbQ CG}ޡ9 =7lp^DDX M'+\n ~ >>Seר֨30Fv>4'J`o:^D c-7op^$2ZNRs|&pys>̜\bQp<P:ՇH49>{ ED$+t^Hs%EEٴ48#$[Xh:ٷoޝ^caG_ EDӱX M ؋H$-T[p^$:1|Wv\7ccYS;1m"0<< -J[9aR uYF؛j ؋H$וT3W`/=oٲŹnbDc΂>V_4Ok GRRH8Xi^BshU3+fp^DD-/K*dXrCĘ<>Y%a+FJ`oRp/d^+""3{K ]GDfPkgW`/=~y㜲co8|Wc<S&J~,68ԊH]`晐#K=.0lQD'x}V_$ژ<@nn..e>^dt[8'młX M %TƎk/ C~N.N"""""K; }FXSQdr؛ `̸YrD؛x,a.x>2wQXXpgvq58F-Z~~Cz+ zCaYesA/p3hs, GM6e˖-$$$8UJLL:i]ˉ_{\E𚭾x_8pZNmu%FepJJ"&-Çל 1cSO9FX]}L0,9@oU e{-_,Pp/""""rܶ4?صk|DL[}V'CW=DC3f;a~iƌta|r&Nh?o؋#>pWQ9G \+5*GDDDD>:<# <ή>)qcl.k=ka+ͣr~ 6l  wcl ѣsЫ/9ؒHT-7ق\q_[`o#""""r 졽x`ΝՍ~o+}QQ'N$8Xk qK0vHx穬䥗b7~7oП|j M+7)9uSxxGQ4iB)LZn #P`(FL8"a2Hw+fcN|嗹+ckZ ""!r)Fo`oҨSs'̀U@y஻W_%---lEh{-m7}ctՕT̟ǝse]وV}as]v#`eW7@-L6+.qeﭷw*)S M EDDDDNўXZ?LHWUqӍR`a!#uN 0] {`9>B FDDM0{S4M EDDDDNL͙v0L S/R)?1YpyM펠Q9㍐.""""K) """'n0x1~z+p.0?\'""""m4GJ}iTA 8.799*'#qLn w(Q`> EDDNN] ؋D. Oɉ^HdSh/!9 EDDNN EDDDD"B{ )Sp/""rrb-W`/""""N7 +{>{PPt/'Id:݋=.to=;\w<Z*Zi/!큽fB`o+`[+EDDNHW`/""""]^nd a+Wܯt{'W+>Zi/A烸p^NPvѺ ׂ^D0C\ 8hD\8Eq@oHlh|.𺠪}[;O_k? ¹J'< $z8N:D,݋H-KHDap_'{S E"N_mӍ[}0R@WdQ8lzdsXw<#!OÉtJ ?*'6U`/Q\2CQ` /WB(}:3g4K/X\Gzx,իǣ>Nشip90ڙDDD$)NH ؋D0F /O\\{ɓ:tKNcϚz|` Ϫs, t“O>y,7Q9:ӳط|ўs"M]2Ū3;]@z[2v>O%ṁ~w/;p'$Ӭߍ7m[̕HkE[WiKV~yrogAIIyh%o"55?opEr~? g.x_NDDDDq$"tTj8*GH `[շ{.%F*09omN{_{ I4yisҚnixΥ$5hn} InԺ=M7:_`^wx*FFX{+(ٹBJxT؞?&Gֲ%)iѢo.F:NM.t꫘xW7>""""^#‚{5DRp^$$9Cjj*ӦM[nv%z+0Vs-,qU+C>w 94k$NΟ)<&}C=K Zz\A| Ο?ʪӚNZ+~`w&v;5VCm^k; VBGYfC/x\߰a_>_5^xs]`r؋Dfӽ{w KyS;3vňrBۖ}ҺМ $R[ugw iwx;C큷uEOj믿su=z4fbܹ{1\W""" KX9+?'{"Ʌ лwox.1>|3hnձ3{~M=O1V'fd"el:uV"K>qiVv#U%t3Kv뭷eˬ17;ُ]vv6ӦM7xwҥ 8ژ8Nq$891*GHĺ`=n:Hty +sKl oFPùkڪ.NeQU'g}f?.0F}FHYQ)Hd)6~ު ̎}`׷Z+%2n^}U8LF5kVN;~ @ 0W`¹^HD-Z0tP'{qֵu0v%\6! }FWU_Ҭߍ)g*1L$U'F)9mhs6-dv>z [PبG<Pg+;gKݵOr`UrǍCo-t+oرcҥnmTO*0xٮDDDI 1a ؟p E"ZO#l}HynkѢ]v_~yڋi]Q9 OQ(G(xgf1x`[Wc`2Wqa#DwEVm9` idߪK7%o#zκܴ~5FSVIjȯ VqĢn^vNs q! I({"Ql󃤤$zd/"!bwa<cੂ%Ka_zX#!~\8a }U^<9kds) iYGeEu{F4Kț;+:.96aVv|'(O$ 28EDDD^"B{A^H԰ wԉ'{1F&)j*|}nHHk`ջN Xܰ;߄;a %y@^C,J}Nј9}GަUoT܍.==Ν;)KRp>D+*ڶm{D7Ʀ`rsj%ܻi**-dߙ2c IDAT4}d8z\aĩ.}nNʡ;ƥ챯wi1:%ly"1rsCDDD^") CT{"QAf͎vH fg;lu 0V&8ת륓}@6,`frOER[YO_ WCrǿCwҪMpӏAz"}2ǩ>DDDy %dp>LN&W`/222C$2] W׸b|> Ӧ:tyؽt@bFC޽sdXΦJ>#/Y;!6#ylV}qI)F;"aÆS}KD:^}Hp^$j%$%%9هHdjklfqÒ/%7hFϵM?֘]BfoXyvø}>61>Jz۳z̮OʡۭƥY2Hj( OjEDDD^"q r<{XUlu:Ъ9k]x\>_zwBRzt^M0) 6eUfI pNѶ5.wO?#R~Q %#W`ﰣ E}]ZzOĮn[=gsmuW{0DBzsuUqhWͶ}hxe>gS->%6W=p[&V'qgX;+fo!iȑSEDD$)WKp>B)W`/8p>D"O!n qQI\Am[YΞ_ZuBFC 8'ThS3K Z_kXuI^.;UgugXu|j&)>2V#?T"""<j #=W`/3l۶h=xu>^ lGR^-ޞS*wI⭺xzd M/۫J?YuJN{%>6~<>O`%;[u=lt͵dzĨc"\KĞA:B0v-`Æ N!Ylu/>h3˨Uvi)e˖C8[NivmδjK|wtZ }0kl *Wشl߰ln6VR _zhzDbŋe~0HQh/Q[}ȑ`ƍd?"o 1n*;̎Z n?M>sy;ہKιC9Jvm`[76:>O6崳}l1&#gymm\ XpH`CHxn>_~T[qE؛9˴ ] CF=~-?GڹVLZtJ>#M0vLHϦU7?{5`x&`%_q`VrНkԯyc6>>Vj߾}L4~h,A\"""R)}$t[ikκO:˴ ]7?6&/̿>.&ܿ[*XK|Ju{Ѷ5Ī3γjoe9'3{$-[ƛouː!C4i\rӭ/Lqux(H8"""R|Hii8d-€{NHݨn>-Zh;qNIH=C0tP+[ ;wo}vZi/"""G&Ơ6lO?+pK"a ,} {SاZ4~P؛yVֺi-:ZaBq>'pE_!g6-'GAV{Ϡ;InCA۾49oxpg}ٳ&8)w1b>`KkDDD$B( \?pW8ەH8I7Sj _2_)>R{3,nkqV]w;@>94՛Ӯoݕ&dݞs؛M_S^b.{\7UTT裏tdc2rH _~iӦѡvDDD$ٴ%P x9rd͐A$67m^`/Cn^AuVݠkco ٷ|U'7lA|g4KѹouGKJCo{8;K$z7Y~S8***7n][oO :n/Cn宇D']ϰ!冻$ImK$I&LlQ~ <xbo1G /۲uLI$i0$I(>^$I? %I.+}$I?K$I)$IR3$IC_ S %Ifh/I$uR_S %Ieh/I$uB)$IRn2$I!{I$)K$I>^$I-$IAz`bp/I$C{I$%O1$Ir$IF S %I^$IJ_{I$o3$IZ>^$I %I$N`bp/I$M$IZ`bp/I$=Ѱ$I”HSG`[؁}K͕Lvg똉 Gex$IR1$IҀD<ݜ: g a)gBB6%I$"H$IS7"9*fTo/9lʉsK!I$:C{I$Eo}9O^$IC{I$)MoاFpo`/I$u$IFOاdpo`/I$C{I$=b`$It %INpˁ}Jw{{I$ka7 I$UgBS%v %Wg`/I$u$Iԁ8%]_#p|7$I8$IR'FDL"M4B ӥ9&3H ꀵ7$I+%IN8" C/ (W3o`/I$X H$I`-LN*#PX>-QFa>.%I$I!IqH@U>3o `"pZ" `}@5K$I:gK$IHӷG q$ZU+qE`+-(8B$IR`h/I$`}G %I1$Iѕ>?] S %I3$IN`}w{I$k %I4=اbp}$It %I=اRpߓ}$Itx %I$z'OɅ7{I$ %I4f`җ S %I1$IҀ>/S %IC݀$I895@glPdġƱ$I\$I8#y:f_>0HIluLI$)K$ih$IwK$I ^$I %I=7$I>C{I$)M %I`h/I$߂{{I$)wK$I/$I[ %I^$I=$IRr57$Ir$ItK$I^$I\ %Ifh/IBEu'KIJusx}74jBy~T+U lS=b-qMtR prMa7!I6C{I_.܋U<{W֌'/ˁ5xy}z8'&:#pR؍?$Il!Ir06V8 ?v;T ɣY:fɏ^]0Xv#(H3?o#I"$I5xrRW7W7'lS؍c4ذew_'I^$u$i |/fر֜=W\qEܥ{KK`^ү*ZcɼumEc~[z5~{P"ƛ8&j+(h &4V7+,&˼nDD Rz~!@ZV@$B H$! V0R"< hس+XqFῃzo[o!s0'cRϟϲe(*ۧݻ_?>ҿWKy^"I3鼿d`WWPFF|æN!!O8C&̤R3}s1XuZ VXI?ZAtPm.-vWn |,U:X7|pJK[{S7/~ ֭[#?Кtڰ`~a^W=o%KpuԮ7[N$%)IrSŢEx 5d (U39F2OTzwQ&o~سUvl>#oC[+z65mlxvx$Ġ3fyģɁ@[LW,e>oNT0vښDS]A`#|`nΜ9\GBrҕ$I$I bΜ9,_Q8KH@PXUO&d@ݫ <5^^N݅H1/WؿksPN-'. [%Rv'Hி BXa1:Euӹ… 7}it'>u9bŊO~*6msyy _[Iq$IRd@^^կ 50KUƀS]ןq_eP:y ֹ?u>fkA=l =) z56e7@iZee7f̲ٻط|_2dTϜz7O]w?S_+IK)t^{x,$d~f5`TyBkMm"1&_蓾dv[o(-hg/RfEP[p9C&YGMbY#秞3{lpw6l ݒ%K4P7}]woزeKjӏI񦴒$ `Ǒ$Ie Ho׉si ̴ *U̸ϲO9-sM{coN8aAPSA[O~Nt`"̆.cC|w2z4꩗ Ѽ梛naÆza]r%,[l@ 7ܐi6$Ih^$gu3ghM&||Q j*yC9MḆ7gQcoٽ:m}I?^^Nrh/v[#/n؛6u1fDy;F{|Ͱ[s/\j[$I!X$IRg榊+R?H贺XVO'V Uӳ'zឌ7ڎYMu5A=/9P}~&$O{̂)pLn%clo75Ƙ43Wsrƀ_έޚt -@x]I09G$d qg؊&2oY,j~ZcYihR}oʩ~%o W:Tʵ zAH}A`)*aecL㾪zDjhg^M3z+L/ƹ$Ix %IR{1y0{G2\[yO>Moɱ72JgfKhn 2f~挟/Qv!t؛aDhu^p&8;i`;w.%%w>5^$IR %IR{̚5+>pՓɌ]-x~coFz'VPi GfE38ƻ51e߾Q>'IF7o^&C{I0C{IԞ ћ0aB}Hḗ AZS}u,?gujMJ3痿Ӽ/SHZ_J*~:8㔌zo\_f#IS2ue(_\'eh F9 0ӗvl$fT$s$= a!eW)pFZ>͚%iv*`wQQ׾y -x%N$Ȉ| ģ16OC9cD51oM l{2O5De!@᫭M/@AJ~^$gAA.Ȝes0;~ yWa85k6NǭwǍ}J; Mu{xqf2yM u"Vr#Hă} zs̭΁`x&.^eת|N@V]]^%K^$<`.R.+O?nR ufwqt`yz߉/O"-t/2Ӄ⭕4)HQQ }=ؿo|D"LoeN=L\t-#M4c,ΩH/C$^$gk-[C iCz,ٴz=vz\}y0s@6y)c͘MZ ??cMZOvȤٌQPZ {_B𯃺j8;i`yf)>$IR %IR{6[.>pDiu`59F.3;0>eĬ34ltP~a Wϰ[ $OmX͌%7Ԕџg㨋:cΆ~f >/#cC[zuz`$IRgh/IzAee%7n )Gsgmiu)4*=Db1FŠn޿X3jy Zz`NQ] 2ӂ701e ictet?t?fÆ %I %IR{^%֛O xl2ۑ2s]5:5F疖֧>eR{{$$|i9܎u:<W=)s+(t:o=EPcT{ҙ s?`ϓW7ԔџsE쏺)_"7u'\H4M6;4yyyqD"=y;L/&y lI4@K'w裏%)`6W 8XR? |t 3Pۺ}[1dL"(c_GoȘS/ W}4;Hҙ Z,۞c?})@БL\*}[ֲ{z@?k׆J_*~;P /+d|*΃$Iy%$IׯI~D"mr;RH %iu9vbŴ .W>E zKI[o;d§gԱ"s6'g~q]F63O5A3/٧{H477zq?q 7$$I$I:* H~ۑB482~+!9F p8wR5c_L$'|1󆲥Otl-4VMgWug#ϔWP7`#gnưho~jn=\2}-ڑ$I}$IkD"}B6k8x "cN`.mMkzа`N=@Go˺D1Chm5[c{DsɎs6Nꏞ5wnSO~ݻ7]k3̝wɗ%{;vկ~5}S9O!#IC{Iԑ@0bժU\s5mH)vK@z]i j>D3nWX3jb%9bC& ~KG3ourNK'KB+e?Sشizkǁ{I~*݀uٲe,]_mm-\rI7N 8KJ$KC;Ңw\uUԄؒ X2gGq 2<9_>>J[hW 4;=ITn#[~P__*NԆ˗s󪫫9y7ϐZ$I}LK$I< 0i$z.]ʰaBkLꪇz?G+s7k,׼Km^7y m?< , nKk!Ԟ)J`rj… x}3`bv_u@S*&:i $&zSKK$Ia-Ll 1d^da *3"P=^-I$3 %IN꫁}$I %IN}$I %ICȕ>^$I]$IRr-O1$Ir$ItاK$I^$IjG)$IRn1$I/}$I; %I4-O1$Ir$IԢ)$IRgh/I${I$o3$IҀ7P{I$2$IҀ6{I$o݀$I8y'x&>0 fgx$IR.2$IҀrs J`2 v5h"{cI$I8$IfXXo1*'w$IR2$I/)K$Igh/I$> %Ich/I$> %Igh/I$}.)=K$I]ch/I$;}.) %I3$I+}SK$Ich/I$upاNpo`/I$u$It c`ҙ^$I$IR't>^$I9$IR'>^$IY$IaHR`K$I$IBƮNܜ?zFK$I k9 IENDB`pairtools-1.0.3/doc/_static/read_pair_WW.png000066400000000000000000001004401452673171500210050ustar00rootroot00000000000000PNG  IHDR(G%sBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxw|SUǿIwK  D*8QQpx{{ (n=q#dSfJKMܓ$'IÓ$\n==&V6M T-ZFc"4e9[ V-0EFCՋB4Fh4Fhh4Fh4Fl|Yfc< 8aR8c޿1.,-%cLJvAk\/|:gxP ?<{Q$6+󏏍ݰ3ix|V}}`CO#Jm?mICFvIj[4ⶃN&iJ_s0'|izUYT Fq<~ELYAh&EHZRՋpZyBs:NA=Eg.Zc<4I3+]w+y?&t:*>w+\tȤөW+RQ==t5Xۄ'Wծ+Mb 񽖢l1 -]H?fi,.`{FMP lDĶM0wF@[0M|?I1}"BBxm*ٵZش L /"`0 -j-=:5 }&IN]Į0Gy`xղafĉOO+Rq k\&J@(؜Úo6G59%-Z$V4B8FLkM`{i)==S02߰(+e7h-*+"偾@>-0 1lzsj-;8yrczem%@ܺr+3es?i &P#E88Uy=E=e vVϼ2CKٓ)ag7P+EKJ&'p8X͔n_'J&'p8X-nZ,!d]B''< = {w. OZ; sl,v;/rk!Hr l&!JZ@Ohv[+_]FǓ=e:!GU3`B"c5e:!|^Ūj-2ШX5Z_C͆) \`#İz 5o*LM-׭w#ϯ\Β{hTvbrٽSq:>-*pIM`طWX,d^:EgVj m ˚n s:^=~=sr?])ђ4v2^⻫ɔsG@lX9{CQ+=Oth( 9Peoy9w-JZ|Fp%b'6_h -g{)޸T+=/{d5>6߿u Xȼ StW!qwE^bp|CK%C_%6~8+1F9V?e/qh;;f/LFNNV/tb8Je{^6ⴑnJh4uC'><-k)Q^Us-># DT{W]&ZKdu1IĻ_xJa7AnB#r;ek1wL׳oSlּv8ď7.c ީFˮMzZv:qw+Rw gN5ԋ>Dˡ cR3>CZ6d3 :_U89W ؿa1>xЈSh9u%=תѲ9oaĭ{%>Jf[K-YGh)ݑ+L10}-MCHAaWK)ђuEE# JjDiY|Hﰕ3m2UK᫤ʀiS*)GmRɞ2 K]KX9m 2r,̰Cy,%gdH;<-Y_s-rr]E}^W5,Wݛ(KemQ-j1\SF8\o*[ <_EoFWQ2'a-QySJ(m%zNzVeδ~aDi+-b ړ5IAF$%sYf9/]m QyE>ػkR^ڿa1N3Ar#0ch99qǑzx%ZJeOq^G x(ݾ=n =q(ruk}忾w?z&i^:mjCA)e:^k6ܴtF(ҢQN#!y[%%[VȾ%{P'=%=qv[ֱ5eT-y\7>mCU32ùu!4&^W`ɣPuB7)8X dV5pR 3;:h)m.CW&1r`.zFPClc:gu{;"Lld,|EA|I wZ!dMzN|e| ;-V.=Wrd;-z^{aU aX,dN|(ٺ0/aԅ_MP(+^#>PegY).j-㹹->elVbEx@=^=Zާk{Rļf\l4qz/vϢ㫤ܓ0-mֽ+ZE9{w:kM fk7wi\KLZO__VLM_<Flv;w/h6:4N z{ͮ2!Cib‡T`)ypْy4{;Ji3MP@$i,9+DW} OrA`VV|-}ZB"cȞ2ŏIUlZnxK^Sgb++h93MHHD4S36~UU4lFDW*Uܹo +Ľk\x8 9HZ|\̮gc6d%?\35e?qr̳ɣ&_zƍ=a`%톝E1r+os&*_|?bٳ;5ZCˌxwMŮ,ݻ :α7x~2Tkw D8%Z|f81A-.qp"-#&->br~'giIDUp&_AKZg'*ҕK42Z."Gy$w& lE~-u7O,[b Xx`PhyrRVV{!GВ<8H6i-&<`],;GmbX=ϵC -m|MػC7n6~.g&kd~i4w|l':GOh&-x̤$3cS; sd`jFZ~3zCO7FGv˂[ _D:S̙j\n@S2m?Ɏ?>ޣuQt}2v-/NqyF|mOTSWц\dWefh;aӀ i%􅮚2VRiSW\%$+_4j mEL4ӽvUy 9Ӧ(1t]U^iSJh94`)9&+3hjcmQ!/VGrqu{+*ⱥDvLTg؁8D+^vWa.w]IB"p8X-nS p+{-(\rhX#^WciG:uś)ђ~굴x{)XWg_ߢ|bўLs1<1#(2\^rC :2^[ϰ/!Z~dHZ4ADT-XJ'}F_ɖլ{v5ZȚtG._8Zڒ=%ݶlᓡ@KXLkL.vmb+W\F㎻eV{`>6_Q ZKZL+|->y#fNh KY9m˟!2EقJ˟&ZiS|FC 7?*lEo!C+-e6eJL(7hƍUh48^FqRߌi4pp)"5܎hR|%0ܗ׳3܎zh4 .mp4~C&ruqcY{0?6W?'"{jwυ CFw>_^hZ4|[*=PčxBܧ"!ZDg-0H"&yMz"p=ֵcTYko#ѩ8{<:mf2k8L͕r+ ^Aki  M?s9@m3?Jb-fĠ>f@Cj@dZZ#uE}j4^$ xN)z[SC "+ᣦ&CkĩulkAd:Ǥ?h QF>܋6#1hZ.ϑijCC?{k t l^n /"sk v@bB4-(l͏QipdM j4Ѱ$`+2zS!+J3pb-(XeaEĽBM$p:ic!r_6 }!gu-8D}ԥ 9Fmψ@j'4!Mx} a?b忝 YLŖIx1,54dr$ES iyb-icub-Ay=5Cc{{Ws1"P#~=Ո nU4&"Gk f] jz!.®ο} 3Mll^ x3Q,+p75=ty+Te442> ?{ IDAT74DD$ [!WR%y K"pޫ%b!kY(UǛ'#-k38jx+PMx |j3V 3 j{X@&'9Y`|>X&HC_v*ĽcۯaƎQ_'?K0z#n~E;o0 xa/ ٛƛ<&6}#Ev :4#NmbЇ@?X0~;+0 olLFSk.Z{6ԧ??OT sTߎ<}HRO[m 8z!&[w k}*h$Δ x.m"{qᜨz{Jς~.BuuZ4E";t1Q"?pt~}-E}M7`]tRCqSM@z 5}%M5C{$1QZK>ۄ!&WV84W< PUM*~]眸~Q4M9)<S}4~IB4~KkĪjpU%PQDWqf"# >@ogގL} 8+>СyvVo%\Y8uQOQSڏy̽7]xEC _oKqz"| 2<MfG]ԜzfoJaFm!wQs8D)^w_/ Muѐֿa%юݩs?0ڗsbj4N40@brl~<&"KNv>C1fɭ1lj55qm_b-NxH{ ?V ̙n_Rp5aX :pl`k":983T xPd]jw^qhT:"S1w"n#ow9=?T玱[{&&b?nP-D5O -C{P@yAji;1*VLeU c\'.U%ك. Fz!~#۩yދk4Ƃ4:[>q#>Q錦ӐSEև.߿x# z@{ Y2IUh7 'nRES;=+1*~PF,Gڇ?`W":TXa}>TDJw; BfF~XKb}ZVZ##q/Z5kbmBP-ٙď%t $0EG(֢ Rq>?K:&{XKc菸tW!##JF+Snlmy6R&ʹa,B/T D!ggSgˁ홊Z4k̩Ɋx;iyE&>uJJS89 f`F{t承p?Ex!"(uHw+ <ܝ &,.S'M P TzvGGcX<63Ư6X"SႡ}N?Dөlr\9^-[hXK 7&xQH}׿F9^CJlWyc0F.ULEN8o-*)fx]i8UBZ(a>#J/B=PG`ϝs)N*ghh?[׻M943!aq{EԞ%4撀9irG[~]AZs$fτg aʨYNF ,LyOU^8"L![ ݁0Do v8 r?quC{Mab-31B.jiM@Utmv]D"LET>GXC9 g"i4`Ie o3 eW@Ǣ=Գ{[^X }0'i04wU!d@j4D' vyBe$-+.3UMp75'%* B&P8~}+=ƸyYO'T簵_9ѷ)X<O˪wQt 2l5Op8pc&F.907B΃Gt\s{pjB\SJ dvGhZ2nFWa6|":9oE6 O@Ll{"2I5_Z]rb-d͈ںth4r4`YD9971ja=VDHiVj @=0h4Krb-,@dyRo47Ka6M#s(:')@r豵x(bĽ.4TAIYc`b-&Qr1obV/h|kHWd)My̵?E<'WÁwOr>7#[B-Eق/Q[i4- uC*P]c* E:nG_.Mi{;sX_?ZJs/vj3TCs"ƻi8Yr" -Dghd{w"b96)&hp`'" .13sDK_b^yB7kU\G [iuqZM?jvq g!&F iMx艸0A\l|Cc b@;+ne1x8*Ԣ+|?5G"@1VZD:e OwB8k b,DK"" }E d (Q~[i7'K!@vGLbrl+@.NPj :Q0_ c>b=z9uc%4mG,VDM0dlv4t|ˀ3 ~F F<z_a,OPw聘l@p)j4M착R!ɼ`1R!́~o&(iy.FlؐJ*0a l 3gp8\_*M#A| ,,/ӱcGBCr5xHf8yוjh \s ~R ?8gRhϨQX~=ְ1hw NXwBGVw\> XGb 3/{iwCO :H>:tG}Dv3`x).6١,w5ɉs=iӦlqqg8&f֟ɛo5:rTRzgV,`atR}bb**HLLkWOo^'z_鋧yU6z\IC]Ē$ >?f<_U^‚I $Eδ)Y}{TI˺w6Osi#/^YWgۥygϞ=·DdKeWDQFgG/2guƍc~cB>`2a:.}ߦ_~~cR-Xqe,_FE@F\۴E{vM 291cY9[6ڈTV~:*Ÿ[\<#9تOJJ }QOxx'M&}z_,y|,P=2x9ީ0;b*?kKWwɜ&YT?oiKvjws,}l,E]ow97W*'dvؑ~n7[os3d·O@Kv}q\'Nd̙XV-=AFP6v;3V46Է?1#5&'n۟mMeRh|l3ӈ24xa'ze:$2g߼HE.#zɉ ƛ&'lFN5^ZCetGLN98OkLj2't}'x"p>*|Wj38׏szd6MRŃxo- 䎝L׮ U,wQ689Fŝ}[1kkV̮ᰳo0msNƹw&' W7&'R>49a+-"eQc8lX!t{oyꩧl Q hD ә;w.Ty Νˈ#XҸHD@@ 59Pf_˖c@ަɉE|%߈OбF <6|HUXw)qQIN:xlw>~zӈz#q+;<`ġ񤻏w|;M%$`<#nt{bbҤIK"bWnݺ믿䄓$fϞZUaAq5ꍈcƌJ'' 3k,Iir%<|)ň&gLFa݋d}qʑ۹W ̆Nt8~=r?zMuY!doe%[VqlY6\hu$mh7SChh(?8G(jaL#惀(%|w %͸qox-: ȤS(/"III8'/1;!!\mukr~uvMxKeWY֯3ޭpKKqDreKj}G%uqxgaۼw(ٺƈOJX+YT}=~yLjAFGqhL駪i?f͢З^b3dܹtPwA ӥK^|E.蠚(+ 8=CǎyWD`ϔÖ|n=HLFIu]u23f*g8:[T >S?8S9r$s%}Ʉ x7l6H<|gN( ¸T?W8O>Yw'.I;ή2>ȕ7}$r\44RrʫVz39}|9}r ,.M`g/K2k[~2c/ CJȟGv1>4 #;Mo vl0.gИf~3u$%%qwr-8G}V)̝;y ._~~4d'Kǧ4$U9Fy j4F*㘩2AbT1כ>cӗԝʸ'S*c/!}J?3~7 В&'@ tc:٭]Vm6^^-ǒcftlWm{\KUcHc>_m)*Kx'c]ޥ?R#p%DH-;ENqf:u*ݻ׸%MN8yG\6xg IDAT00a]Nྦ)crh4GTZL)k2K7j2^_#q/qbi#v*X0bT`2歷"??}@BB&MRZJ믿{:&8ѵkWNFb\;,#N?ֽ݂VɆe'D:nlISKn_h ΛoɯZ .Lϑ ΰaØ? ~p}0aB7%MIe^2j4NTF7SJT^؀TMCTƮaz=7G\6mpꩧ駟:=A/XNm+-FܷM"Ǻt?;<n7-XURѣ'.Jpܷ&Zk4*͔5VRH/qtjwR6_s?xOh]ϾQsw9?F9##Nt 7Æ cذaex." #7X@wq7TFeҔTNc̙ 2.þrjňS[u&ef~3&\`:Qq#0FYǦ煕ˍV7wĚB#436?fcY!&]ͥϯ\fuzSh4@CL)7~y3.SfÞ߳/Ǩ'jw6ԋvGm~1a 9 ; b8+׏߫񩌝u*F$X2r36~b#wwP2j#FϲT`c, T&=u6#>-3⤏ہJf'Ŵ.ג)ftW_\~o ۍ]Ɉ L9M`S)eu}#n;p2bl=|Rx2湚45%WRo62dqS1y_L9 a1JOOwS NZ(xm* + m ol-)㍹FK]bB[YL\x80n}1[F%?P)9Rgw9VB"[qe3#N22S^Qf.hJGOKRXd,ƻ3ߒoJЭ)qgY)b[TF&ٵ+S*cQL;r)\NdR'{l]!1zo2mn\gTFOhdݞc< {i)n㝁mδK9+Gjjش z2GtcSq1_I#ڥط*J3erutLJ#V$96q@ö;L5Bv/ƈc;"x@k+P*++7:}۴5eC{([EpFvqF[ntN F\bgi'U%lhj5凗M';Y.xSJƄqP0HS+xgJSy |ϟfh|oI˄EWF{,Lۤ8wULXԴȳ{ &oZ$ I0e-p&~#ḍX:6:bb!ݳ_\( S]SQh4$4*gde256]ޅ5T **r?|1Iiy ڍ#.2(X>ψ-!dwWG4PTd*|G͈AޤtpVm{y_L>+`8l޼}Yrf{{i gՇp%[S{htOvMrr͡YlkI !k{wL w1u:{mMvrT]2re-Fln;+x-CEQIL >dZPI9#x/(ٲڈCIweo>#cXB`m]Lt{;TCn@u>r҉;b5qNa|F7#^Vy۶h$ m;⍲OHd|w>[nz܎5L CS>V齍8oTmQRr1LοЂCm)xh׵hX΢ZJ_si-ZbUhDIrSܧM"wn#g!1t>eANƹwT>||K_zbUn*ٷ l525J Jv\h<͂!B+˕eX3e6W0ms[)+Q^k4@9;<#rv_@ELLD.55ٳ;525[j䘩I >hZh<Ŋ+ҽ =A/!ŋ iH뱩sa.} "$+]2rw1kl>DV';[\P_kY ligt>zx'tF v &(6%%%̟αW6&~9e.%*4wQU?IX"B@DEADB}Cj[u[åR֥P @YdAd Ⱦ&3wL2ܙz3<,9sssgr$Gg*TZ1ͳ>n>p } ] ^ nÿQ\?ЮL=8u8W/32k<ņM$>`NS%&L(؊fmNu-yY_iwg6?a2¾p6&nIK4K_{^ 29 kaY雑YW>h!KAU`lڴ P30 1b;w{NiÔM>y HQ4+Yx4'"'OɁfʑ@fEgаln?.2+2kaɻPm&C^gۂ<3q+f臁@ziʰѯѰծ@2駟Xn]'AZ8s#|>Æ Fa!*&79~U\ӜOW,Axz4dV4Y^-[1g}髽Eed2r{$}> x}BpV[ZȗkV&..Z2+D,}QiG4|spY~/}9x3㝃NG;Ʃ&.V Ͼ*Y,}]7?@pkv/!ƶl>1N?|Wuq7d f/=k׎wde-O-%;v0nZ̊4SqTs7/3$^U39?-3_cƾI+ s}:E3 }F>pu yCؽdjr :]CcLU4ſghrײ9l%Yg^f^ -n |>sⳗ8k{raÆOO}b 5j+WF:W<1ŋ4i]v$g]S\xxVv /گ4fQYX4gULXk̊uʩ<5$o9-ٵCZ\lacgD`}l2$Pk͗92I3Ηعl6CHKa =՟V>yg]+>|ۜȬHfs#G:nݺ'PF C|>Kp#vu[h\V=p h]4 ǭs/ Z;Ml ^/hZ=g~|4R%S#/;0ab䳮 eoG{~2zjr'TxD$9p9`Gw=dVa__itՁvOٹlv^_H]m#kǽzshgYn/b'zo}:xwBz2Drxi||cְ;,tw.iڌ_$QQ]:jhs׬vsmK h""d.Z9r@x ue?@)8K_ md]Hk+fuwדhhg)..:kzRxb^u# 0@Jx9KۄYuÖ/e=1իsKϘukT-G癁vzL.`&֎q__ 8xón`گ^ԾHw.8?GǾb|u?Пy|A|I< Te˖C]+HByfw]-gYp8_ xcw'-Zc-Y~cVwbz\֬y=ize "YpڎuCҡO;:]C5_ `[0,}hZ>-G_U*!C0{lqDO2nݺs 'B~_s}=A1 4 3< Ksm!3h{^'iHr:GR@{Y[eyuO<;^7MoV'w{V/$'HKㄛ4#V}+w.>zu"Y̚5v7 5@W^y{7%')nʵ^˞=9pʞHTm+Vpuكfk7k)ukƘs) EE8ɽ䕐 "^fkNז7%8)Oz\H_~v E-.[ӧO/fR)qw2w\"#'?N~8xЛ1Gړ7n-vtY R+ȊоJ˨߳v:縫"-{#q=}^O2kլ9mg6ȡao9N <^|fx`&֌~x{uB|ɡ;8oR"{Bw2D8=NǬY ԙh>x wu=(Q,Y/T}yǸˏh ;ޤAf&6j\5EELܰŤGM:u]L/Lї5jЩaײ!^|E? "gÆ 4iލ5+0J1b={M4udTtvm;d$NEEE|GIAf˳,qnׯ29n!оqM/LF5jx,ݹ;]UF+m%{|W3xnk^(.{,kW&k;4zG/f5ФV-r?>X"o*#K6mXhQ'&￟W^y0JX~=[}ΛHGcC5ȧv&La~w}̜9ބYr,H_5t֭(۷od5j ӿ^qqqJ]6UDw^ :5T,N:I=AQXXntLȞWHjh#VٖG"'jժEjɿբ߮](*J^:5k,8 [ tfyQDusdرcGh/%(}-.pFD'""^ S"Q&ewcݐQ,#>fLFc R<S' ܁LFܺNX-]m e,s-{ciͻ9|g@`u+DTm\ " 0\%4,K_K$Wc8 yYYR j`2RaB| &+y") /L1f F$"""uD"""xshT1w 08DDD茹+LR\m8doxHua xm6f`SMDDD$r;^ 8Y*EDDv]Kuc( ?0"""Nј"N """"^kMHHTn]fɇ UW~)2/Uy I(b?O]q|]G ` 1n_<8H9/P1Eg H28 ?V鵫1ۘO IDATg0v{HnxD(>xTj@WB&"Au0fc>C`jS8{D|H0ҋ:1 +0""|:(: 6E#R p5ID$Y}7rρQcƣ(￴@`жsED$u:R< b1Km]DII=05=EDDʯ Xu 39Q@*X20SCHߺ:ɡAHٽL-[Rn<|J7oEEl^Sg~N#336m{ǚ5kزeKhh"dggӰaCVMEƍٰa14lؐOcİ|rvY &d] |Lp8m۶MϚ۷bŊD+ x`q_*U|}k֬Hrss}Nj_ zm(ƬgL4/`Yo^^}U_5Bߣ/xw-&ֿߕW^%~iC> >ܮ`ٿ*رc}͛775WwNq|t!")L=i`{.>L]v^`uxHTO3|p'' x 8ĸ tԮ]/.]D*IT^?tܙ._~y`*0ʻ$ 'b~fTR7xoۨDQ]Fw'q:p-pL$J*ٳ'*ӦMs`V l.*k15 @>}]r%̛7.7x>7=c8F1qDMNWC*+ׅ?cJ9 \m= 'G2~BYvv6}:a {- 7D:u3fLJLNڵkǸqB]($)Ե@FFHye{os~MVj1CHRax饗HK T8MԽ scM Gz/i@w#4eO>9T:c̘30b$׋kBz!|MVz;M[=P?N^z;:Ðb} 8[nuGC?q7{H :K|4}Bwr07v?a6M)>^z1tP뷘+:l4^}U>Cu2bڷoog;? nv.8+RI \ |of4L SBJ֊DFC\"3:twjkV W!gJv qHLdddбuh)?D+` gY8%"1ZWK`ԤI/U ,k4h f?n`t9WcnRI*YYYWqK`LT~XWJaÆv3+23='ZI@ծ{)`jEB |-xH#Z*R$HdvOF)"t=wd殁 j½DDF͚5]M@ULD<o~M\`I W"NtBJ8J3"9;zsUbdcݫ8ĥ9xHCŘGJn\hQr$"I!tEΝ;]M΁C" l>,xt`ݳ~$"~Vv` A9Z Eƍ_eP$M΁C"-3NNu&"oÆ vs[:.gժUqID8јmL>NJCDЮ]XԞGbիCIi*D$Νk79~rz~ᇸ$"K7¥2βJeIjgϦصOwΕZ̟?8D*}.LLG؇%"qA͛gw}LPzg̘נD*=2T:_܎CV"??sE"w2)9wŞ05D$)M6-zLPLuz,X.VDbI"cذav8Cr7-|>ƍ+t0ʪˀV{ 0jD$fj77W7c6I| <};>GG>gy={x 999s=Ub*~-+V&F:Wn0מs뭷zHepe! h:3qI6lX,V<u::p#F |* G%###QT&Ѥ2Ɲ2J :'x0\,XIO>u=vsW`'Nd…z$*ُT?a]&qKRڵkݻ7:/qq1xJ 4] 3sf>8&RIEh/S? h$%߿~yF osOhȔ5m4+kPQ8{^ꫯzHedOZbC]<qIӧOBMN̙3K.m۶yJ\ݻ]3\sc0EZ>ZXbΜ9tڕǓaHקO6olwR| bC֯_+`&Wr6n:K=8o 3?RXXSvo߾[yCs@bzw}Wb`վ8jŌqKR vcnn.*clq}0a= +vFIX{. |4}z衘(RD8jC\{10xw3I6jȐ!ՋzUkvE‘i,Yݻk׮R.tfmւ+̶9-q0l0f̘aw=`. ?^&v̙3ի=I>'\U_+M7֭[cHRV*$`վ -Rcv0DkbĈxFY"~ix{ ՞Ht0N>Ν;'Lw5w6S@8%))L-N=ۑ%Kڵk}tޝݻwK*0|p&NȭJ׮]iذaʦ)כGMCVE0`5%!ׄR_pٲe̙3'R<#vXw" }SO>뮻zðիy>}]\Oȇ$bL`Ro;v_W_M&M4HDa5xJw~Œy[aPu?| ~!W?jfG07oXl]twߥv-{n~m bgN x?ҊKt” ADpfׁP&g3r4f.:{丄6I^9""6<;1`WubZ tBh;^I&I^>asr^/n!Aa; fc,'*"zo{DbV&: xxHMץ<njza TVDD0.M*&cBR kgЪ@#Z9oDuSKRW6f%IIdUf^QA֡""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""4H!=!}M"jZ]B~ {H*-P-?@qC)1/yF$:~GkF$"K)3q|U4"J"DDDDDDDD4A!"""""""xN"""""""9{X:DqM#^ٵ,E ( pXu'g ϢFDDD\6f3(K7 iw^`9Ms}>#e ?|e L: :HhfS!ʷ;߭kf[oXc|'Bbx7e]39kDv-⑜rp5 &Q\8{!'E\uC5E@(kZGqM<,Vt N\xR~T-G ]DDD$bQ\sfu9Y㟀M\V;w&H$Xe&3iBDDbi j#?,MEpiڔ}GŎӉf IiS" """gl>=sLp^,cGqMN5n ?u`mF#zׁN vG0EDDbٓ LG3kC.esYE0 "z]1$-MPHY|w *us1Cuw@9bY*"""c/KugXhEu(^csC'sæ:'`;ýfRZu|6p/0\JCGu(v\WEADDDbpPt"XžoJϹwan(c<)}9 J97hBDDbm*աH#Xb:f#6j9'mU n/ Gu2 """gg4D;0"1HlJ>_CP8廀VSg=}y<&gߩGQ1$MPTpp}"rJ yqncv;tr`: ١v{6eO\1\&IœڞȑHli"}m֡w185:Y39ʈ~<9KN'@IwxEbG`?a/!'3whO|k? N"Qۡ""MXfY?Pػe?agw ;Vi1֡jo!O&(*R/H)"5L!s::i :N욘mAyQErpglmC_$P~&TeP<؞ȵM uTJ?#=W.,ު V԰u(N!r G:`&:L|L"0uP0bpb?1+Dy(Rq4O yֱ]ޱ+\]"79=w1sm=.q,VP IEG3"S@uz%<8{YwFvYV_&S÷ϼ;DbG`סxJ4"gA87%Nԡh)6c2:n dvM&.?p|N8A&[/0u(/ED΂Me!yCP@]8`֓BɕÉAHgHh\6Kv.fih-QvdgSb7}1 <;Cfb2}Di.pU "): jot$4gfUu(/Sɘ; 1ո}38 fʈ$4UUB72caE doGqȑd-oKȳδkjEc2p\!tiG)XBDD 30>`ub]BwC0snp^wCDDD$1Lz+0`HV]`=#ֵ1KB}u1IԥpÌADDD"@:[}SE+B q]׍)G """[?'Fq{s80ch!QQ\;cpaƐ4TBDDNgt>){a+ϯ,C!fҬV!1Hlm #?K[Z=`D_± w`96?f IC""oŵIE*k7gaR>C^9b !L61|M ןP̊ ҷq!} -e o\~M"Uv(`&>`N9b)av="rdNdm7jČʲ}X!x ̋LQoDŽr$mIDAT |-dDJŁbKcT( }WϘ#(ZdPnhB8&0)ݗywzoUYL\i\-%hRL¼G'pXZi}Ga؃Gz|i+"n;z^8|;䧯dDz$zN}B}bQDz]2[`5 MuSZnZzCi6ZKYa~c M51'uJAC>˿iP 8 8GVXD}1]'-05Fe{a?2Rv 8ۃۗ[ k+㡲B,jMZ|C?TL5[MZu/]C-F{- "CK8YڗfRm]N'_mpk3Z8f۵49 AQ U(qbӠ7a֚/RZ\ZEMgykՊ3#8R@pD4}f%8T+)S%<>3#$-/]M񮭦'}&AG,<*p(0L1{-:!5#{\0-:iAdd-Z޽*;(91!/>~ !*QM<ĞKM-f0o$5R,@=5陁Jug~~8PG?.EMר%M> Zg/Ex1Z}ϟ3/zv >c؉'Gc'jѲgOd|a'?&Ѳg6/zܰGP]Y|U*=_uǢ F.] R.سnFe mKaۏvʘk=l-]Hovh;;@bo5|^s;LWfNLVs__ ISi?,-Z PewWQ.5h)vUqTH Z|C0h^BJ-vF-R*9cKCr Z夳 -17Ѳ}_&@R'ܦEKLֽ8gEyNS,ֽxE>t?O#wTTe|QXIK"sP3A@UZ%0Dz]J;֪*@ BVϝNY 9 tZ҂=Zkڳ\KEi1kA~%4 g%(4OsPrJA:Peu,: xɘNTܡI7({hQZG,UE["ۥǵ\^Z QVjIeLk,zϘۨY#Pt5Psd_vCpVk)ڡ{⏯]o JC?^JGm(߸˞&B޺jL+fAQ@ޣR˦J; /G@Zzy5~{~\] +x=^T)κ^lznǩ/= yx?)|,/,Ds=9BbWT_[Su/Kn׀ɽrwq/#5iyUœњwoX~R{zѫۨZ}U˾~~.e? f';6Z&]ԛOb׊/ ۔i٥-[afnVq/s':6Zr-_e%ic-u P+-v \ ؝1oWI,㹋RMZZco Pú 'Bj=~©ufϛoV2[orڊ?f}rwqkܝݛaV[!mKLɣV['*zE8zk jP]ʄ23գU3{zPQWM4ձm-=km?Lc_?d|a?ǞEkXav OѢ0{>fmzG ђƦr{!ċh꠸5rMZE]:c\-7|j;j"h3m߿e4\Qc 7mK6R|Mm}.|{;b wP_D%vOQVWA8H{XҤe(5i ;;ӌ@iY={qsY"0Zb~#Z:M!' 2ұ'mzE-cZD%{0޻wm^GKa$?}e-K]I @>{rս L/[Kco1=_`u, URPk;UoRJ;RK|M9%S+R8H5 MTBґ{6GL~w{}?od 8iNZ\]VC|E ;+>>ڷ;o?YƕKꠈ-t8(~v۴e&1@u#NE˶B+euty-]W̮ɣgT4/&BP*Z|5-A;8x!DrEOوUuP*x9TTJ_O8Ы^Rʄ@c8tkzd篇2"[[aWEKQN:+kv8HM|`u ZT%sb79rNj;tNƺK1z~G҉h36ٳ]ՓxyM>jKBqfEOAǑ0 8s/K5f-K%|Bs‰j49*qET|C&jE/`&-YΉJ8 {ϚbK;4Oђԃ2H-cGwЕZ7Iz"wų-OrPX[xoyu s4MZ|C$I*]NդE[sQ|YQκ6}M):jpSa>2Nr[G _ctӖ+up.C{w%S-CnfKjD^1b.ÌըE[ K f6|ƧOkzyI#.2-K:jOIv/:j'٢k~詸D[tmwo*z.7Z*r쀋[ <01t@O]WZhi7ҡEkB#l+K f oWƲ-1('u\IK[zOCPHҲ}AXCԝT)n-&:'\j.Ee R TC38iBLK$m'S3RZZp'W<7L}v-S/ZA"9^nZ֡nMEwWĵ򆯙*r Zhh[.$h1.gh;~_L7j:Mɮ_˵|‹Z$u9/|{ҟ=`jk[/yAD0SXJU`-Ajv*ծ?*6њMIgz&B[ U3E7kLDݙ{q& [CZ{sGUjb WjCDp +fzAPp=A 4h E='U*k;~ޓ T&]ZاHNF ;{ػł=JǓ. ;}UfZ$;N4,|ע3I8~ao^<ӢE*y՛Bzb4=XIo^^1]2vE1Sj^]t@; {__e\-ZZtCW}CƧҩ7X&'ؓDfi!=j/&VftfurRzhMY^ʍ锋 _i)ǽ FѠBu9)/.0=!-Jžş@y~8DKoT1-euGham3Z,a@䶛vMx.-]jt5*qM2{S, FQGP1s *QQvãqxmMWK`߷TZ(3Cj)-Ԣ%,GHX-g{JOڌ6fi%jŸە`şE]}T~\TşMWɛn(Emw/E(Ίr l%:ԫǿ_i9P ]Bt".AAh[ ƢPBb*ZOezOZ"^7w!fn`6*;Q8x\_C51$Ե8F~-Th*Uw<^:*#Q-a5n-^!bx^݂Iګw9 ġjM !Գkwv*@<p :5#BP?븖 vvF9+XE]܄ƱXYKsrsYWA8G5d.<]7P7iA˹h'* ]WǺyѬEBjq+P9^B8PNA Ѩ ;3Q7cW) >bĒjs]j>t{Cݠe6]|pToq6Qbnzmi6 .Զ5 W>.'b4FO#@ u7R@8xnQ #Ujk-4vi!c%`%zIp|lijVE&R]a&㰧U^_xP;=QG+'Η>o5~uMgY{E|ER P/nxf-M0S5k dFcgiw/TTɃCtN wҰjPAqϷ8C=|…} <GhEB%p*UӵA(,DDɸՒ>¼'YXZ]ſ]"E8` ~Ө:@= Np1%ݴx 6/B=*Aݜ >cżvޣYK2 ԬEL:&cKk53wlwÜm:Pa0 ַ$ЄHB5qj:u  :PxAQHdz~G]Cӑ ǼOuլEL^>Bu*9؀fߧbx#w$֠lԸ [ ,\[Tw]¸8[A7P$e~ 6.|ָBcn<4奨B5aAwbprwEV' ؉* oE@yѪHC̎3p0:|Ҭ3|@ՏߨWMʦF^7ƏQBUBQ0ɇ?x6㫚uǁh%PѨHtT=3z^ƼK5[zZa)J.:?P-_9zLL6>[5Z%E%R@(Q?=fqѿPm:"x0TWTHFMujWk<ⴰ5*A7N1|ZZj۸^E#&(dUZ&pl3AaVEM~ԱN+ǯp9QQo^h_{n' Ql 4}3+P|k]z4Iݟ%NAT=!ժ(0).+oHtެ@r/q4ɥ!9{Hx6(cR\ԱU#Lk}WhU8Et\3wiU?܃yYKS*PM}ռT oIZjUYOs5oPmn!Bi LG5gp'5SE" 2gZ.zhҔVX:-D(\I[)/ԊU:CRZ% 'Vz4ϥ^L 3bL\ Ρ%L~xh֖ I^WVEBS#RE+"Tr)ALB19H3R߿HBoGZ B9VEBS"ܑvmi \:T4Z6u fGҶ_^lT-A0m?mu󼩮Z[o%<} B}gU[D`=꼙[H3p 4vk)0! ;ʻe}}SP3Y?($ϯĠZMT69Ƃ Btu<WOID^uZYKA+੭EhA(Ѩ:JMkTa5dsa)fn'c͹XcKi n'& Xp:$h^7w80͝4U:Z7SuT 'A"{9_tsZA/k#IsTAhJ\9.(3"-+0hU:FE Tx{oᓵ*ob~4k'a1p\NrT  3Ղ T "\YKSd*h  `&A 0Yo(ggcPzi⯄êyo0#GG_ A<``'}i6C} us$twAn-B04kݨ+KGAkF]܁yS VZ{LTDrA/p|&+9:E_*E`f-SY`h U]>kL8O@  |+G 'Q[4k$#~%n'Q[' i:W859~FE5=)j+xCը@#*r`+f-:* a=MOG_lp{?(@ TaΦ@[T@MSu\-u} ?AW('s [Y [(W B#^?8Lt&??]v/8( O[FDDGxxsM`Z'4Z".呛k<R15 8ĵ]vhBFRZZ֭[oCMLU;qVb<ZpI'q-0tP@HWdggdح{ !E:?WqKqVF˔jgYɞPV:xmY)Qa1t#ظQo7y@pD41]ef8{*EDu,g xbFݠ yOn]t%&95q*!J޷z+w>E pW;*r=ʄ5@jj*sƍ#2R 0Ú5kJNtbz|: ?WœtZu _xwdލp`AD|'Zv>(ݿٳg7uѷo_JK EX39Z0|p/^Ltt.w|rMʕ+j\ffwp-駟f#$VչY*:6Z5y;\ CΤөx-qY ;*/ΰ嬸 :xcI(S32G]ElTӊ :Kxg]BF Ts;)L4;SN9իW: G:Ή .g}A$y:㻖N>\f_s iJFs [wIGP=/m,J}3z& 3߳gvkA٪;ߏLd?uгgOM3s4cP էFׂO>>( Gq˖-cԩۮŝPcRW} D,VPP/3f >%?m;0{w8f9Q^\fvD|gF\dFRQ;I=6~|̵r6Dю {Ӱ:ؾ|Kpp0fͲ.j ܮI;Ps 焕$kwvݎt./7E .W^ >EOvd|gG\h['\P}t(\gɣ9' s nXsYQN{O=$5G1_K wum"xgaE7T^kȑ#YhQ@8'\3aZ#(ǻk /[AYAڻwSuV &e̵U|Le"u-y떱kp$;2½d,zܰ#%8<>޻v:_'ȑ#3C9Sű(x(kSM:0|LII { ` K;AK/I-A|Ndz9ӰN0[ ڰCtR.+KOvTB*,WAw}lT@;U߈o5R_?֧1-s̘1̟??D W_eժU_޵TK#pƯս{w^_iA0y21ӯ՞(ڹo^5= mtV6߼~D"SF$@;q?xD'[4%}QK@Y`\y啺xsr 7 D|ZOPWN _&$=#Vblhh0l6qKټIx[mr7eoQVGƧf骨$7q_L#W\qsaƍEOV3oyʖumu2N=Cj!tt@ et箻uֺeM60!s`5Jg27&;xgOvTB7cۆmJ[lg}E?hsP3OMc3vX [?7|YEyVgL(pAUt-:uj_B e<Ѱeڶ:CW}k eL~v2Zgҥl߮Ill,-s9wv-:?J8!CЯ_?ZAh8+IFh{ESZ`IUxm]a' 6)ݷ-Nt^t8l>6sMJ32l[]}@pp0Cmvut¨QXpk9g,:,+PFkFY)i?`ء-c|hvavae4k˜8q"s-& S%T* xH=d:Yvʘkm6y$1,+% ;eR764|N=>j؝Nv)b~DRRIIIe4{;<;p8Gpki۶m%R#1euDՄ21i-*'I`P,6#FeUASVǖO5쨄$?ٶN{"uo^h&2zB"[k٬HZ0;_WCӖNNo79-[Z߿?wT ejPƉ}r(_y״SPXX{֩EfȦf;gflחYawq1vllaԛG#{NPh8]ƻ98|][ Y7ѢLGa]t(EkIϞ=A%߽PƢ}]PF~3Ao]t.-v=A_ 7㻆v)}a2N#|7-|?>evǓ/%"a E,1xmpP$H.  -XR&t'a:("nS4xHmͿy=3)ڱٰy}e59?oG!M)^_x(miDx+̶ x- Z%.اAh2莽 {Q/װ#v" ;o2rζ //)ddzmwy9!ѭ ;mN6Eml[= AyyyVs. cCi^EHT+- 7w ػ(/(pY A/`My,:)g\MXT06}'p[d76qan@ozFRgY)iq!մSо}j[O$Ih Yڻw,+5C{0vڢ g4사lR'iϿ~҈lu6-|DA5Av hmmb~|vpD h{öԳ (DtV"QCtRX$œQ Hza] A4999VsOM >m۶MA!Q1$ְvduRϾ6Io$;C {mȣp)mo]a;BB:ތ(ݷ-F AHxAal|nH@qh|ag|<; ;23/0u dURViH>>s>~ev£ IDATrP+WtlxHm$7ɖyNdO0SAUv{*Hʘkj;>C ;(Io7Yba?$B3'<6'^ld% } R^\@Ƣ'lHuabNﳥ9'Qi>D"k 0'J xj*kZW)F~پ}{m x`Ͱˋ^[+yL{{w&vO} jEh32pFvx=f/_n5k(vZ},KN瑗h @at;/tGD2t0B7:V{*[hdӰ3>yVS(BQcY{7~YFdExlO-> @~ v)GRpzp:)/.`G8䂇}tyۗ}hC5sq V%q[NhSfѢE["##>}:aaab}_̟?YfY ͉xg35jxщxgr6O~dwOC*dv%ۖCSHRWyʑJ}N4eVZŒ%K^GL2N:s~mX Ap;(OFff&;v@A9gƂb6-|SM~3ؾJrUǡ pãIHٹr~вK?2d Bׯ>gE9I{ϨTbʔ)b[xٳִ;w`=:>"Y:~HI(~;$u3r~^@HRz-q`:G[T0μ%%?mK͚]c|ETTN B%-`3k ްKTMYڎZSA>pXlY"v-rM7s`ɒ%7W y衇#2XRnz) / $e{˶uw[x{g֞׉[osTÇ[ϸ;pQ<>r-|'Xz rMGPIڻӸ16Ȱ.yYަO԰W2 RRȦf4tyavlE;˗/w k|u =z9Ow2˗s"B3qt;ܰ,kD•jP b킶 RQjqnsmb9?KA9Mp-XGxhKȖ-[:t(כ]W%KpB9XER.b8 / ik Aܿ_/\ uPb6/|ԶNN#".ɰ7} %pLׁ;bao_6 8KFn6_/ɵ^k._70rHC|AK勶}t%Y%43i٥aolm梩`~'GPQs: ~N8 U8쳭T9B`*طoÇgZE ۢϰtsR_KYYYYqnԃBwmEHT { Pi%liަ|gO[ATBWoYMJGJ"%s ŻR2#TdOetkՎ=.Y^FaZxG;~_l|ɓ'ӣS_())aܸqeLjT*9|w?H<ҥK5jw.[lFGݻŋ3p@ 2gvTbG}?i3u "/Xt̽'USeAhz|;hi?࣍/jTG_|"k;@g_H;NKmX |d$gpVA!r[fp)S8,e M;IR$٘v mWR@=![%j\8s$paHځ7{Bs wBZPVT\\LD$~vckp"0|FǝCeر 8S#=oj 'pCM5u3f`Is p .~_VB-k/N:"+V!B D3qD DuunJyGSaȑkғ`ѢE_-S??uK,i?~ѕt)99wuWu7l'?}P2KʶG'ѣG3gvu׮!Hm4٨0l[c{ko5vjuM<ӧꫯ&]Wwmg.Bfg3f ˖-cҤI?Fڶ3Z)spBdAr9%g.a·J7^]lԩ7i(hpbv⮻*Duu5/8Z'/͠O>̘1. T8'K,:x+0C7$ګ1|_dڴiL."_^T|h58Q4h7n۶m0 ~ 4*?Ñ 'ec T!dS-*`!7zv6l>W\qEu00 -weƏbH]믿e˖rʤ{ au!{bpTҸK8rX^f)UcIO l%\B(u@UU?O7n\Rqj2rH^cCRcƌnr0'7Io|)#Ӂ S_x*ȱ=˹8Bj._V2KҌ'6`fϞG%lp wqIn+@t!X*SG t˻>,>:7[8ø~p"qNזUjNL^z)UUқAdgD< < 0`SLI;fjjj?~N$&Mħ>ۄM/&~_fw.ZRũ"0 e >Da2.^*/W^y%-b֭iw]QujjjMr4*%_!:S Ls1{BjN}UуKF=z4#GOS%7*Æ cĈŎOL' D@Ȥ";`xԞCT̤IYU>V,jfgR E N}*җy008,=cTjx 2` a*vꩧQd*!C~T9N25v")q HR9 P4Lr!ŌIڵބՉG.3vظهXj::ӌC=dOTRF.dWY$I)pTqFrD5082dHQD4?j/ JԐ],j%ⵤԣGw߸kpK~ӌCLN}*>9hJZMV Jm9 3f.Aiš,U zdvT :TMXܧI>R訽gIxSA$P χ2sdOJ%*MuK;JJɄDn(Ľd/%d+nli?$u^vtLWk~ xÒrχqϦMKy sW[(!YR)Y:e޺7X$gR:h3%{/n=kx;VJ6Bb?}${H dVH*)k׮j4y>$l}LaLGu+$۵q믿^Ԁ$5x+jگE^CRIYreܬki?UICRJ^DOQP83QC()$+q_,vLN|8*g۽kK*IoviŢ,M?χ4#SF`lٲdtSϓ#IEw;Ox=LeJZ·1@!)MS7r]̏ڹKJ*)|۶+d(&=/_TrS?󸩌RYٺu+rKuwZRHԕ}ywVk6H%3f$0ꫯ.ntR%ZF멌a*:͛93Yn]ڡ0tPZv(E5k,y睸kFKrڎ8ҍH ބDnm> M/GI; z5\{v(EUWWwgݣ4$J} ছn.cv*nR%1QE6m4nw,W_};b>o⮗Vv/8@SO0nܸCܭ~2qaʫ=SN흋䩧gk{2qUWiSz 4ް]l^ӧ/:h6Q;w?aa4`>O~C)3g|d {=ДrWT^G} 3jLTt ^{WL7|k6 xgrK.O>Ç+Nrʨ"KYvm+i_Z&,\O7Zb2 Խ\| py1z芛,uQ$``Ԯ-B\*K7o /N6?(z|୷b„ ,XC-_iӦ1k֬7SI:g75/OHQ/=uTFuɓ'K8mpV'K2qD}ݖ*A {ygS Im{FҨ^z)Ő2ԝDߓYW=!uдix! _~t1a„nSij3zL<9z 8?pLҘ?>cǎ' @5QE2g͛wM#{4C8m*sqQWW^Th͚5q\wuqk)ܘ4^}U`=avz! [l-a4`ҤIq0wܕjEDӢ*ܤL2W;۰aկr +6[jB$)-MfJ;.&p"_M;IR\A vځt-?7{G+#6nyAMIRx80bm&L:hʱt{iV W*=$ilN%gZA73c}Lځt p紴C!RY>!URL[JYaЍ N;NPO2PZK·\Lʯ'F̦3{iQ)?D'y?W0$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IRwWvek9}/?0pg H$I=wPHa$paN$u[l|PT?vm_T!$IRo6yHi2a@5Ti@$I%`X?಴*$Iv00< 4R6W=p6ewT$IRO)X75)~PRDTC9?*6 $u6n ]1{G퇁w0pb্gC x'Gōqp27.y)`=U~ H{/P墇%h_`XBXj%[s ֵ5FaKts 1!P_T#R.'3+"xܴ\?̉!:fnHĿif'' n7 :+>qrRUv{4?vwزgLIRW%ܙh19na 1&@ko BnT9g*'Rq% GOÑ*A2z^@&r pX}l7nƴ\;ȉacmO^R 8>HTb:Xi}ǟE=T$ueQ;73!.ۿk8n<ϴ-Մpл1ď'pJc"S ~R)~}wfIT$uvmƃ?u#Έ'd _'i^TK*mf %GUN' L0s=`Ñ*0>P$+n$ŭzxpm0P$g`ih+-$Gz.!LJQoBQdɇ'}HrBՖ{1+? aQd5"#v:]bt ՗LEd2P IWճ+a}R ;]HeI] IRW+(2/-OO&b3p}VO\G)Äh;d.+⤱^7cNI1I$8F۵-\$Ok"HJSo{ѣSR8 aaF"2ɬq,PZ!a L|ϵxq{3, p&QRwICgZ[R18@y'/zmա Mu(9.oa+1,$3՗u(=`B{,6Ek1Hċ&K5J bU ;ӍFR(:<}^@I#,h>U"^#h68b3a:FKz4?x =.o%| >s,"n!= =(p$<.Ij?_aa]XXFqaZ?/֞+7%['TIvij;Rwq05P]\%WN<K 4ʐJ!ŀ\o"{=6n֡ho88c"~9ǭ'ScBcA*kz \J,R~EXWnewIEY^E2Β(JQ\'=:R2+fĒ)5_8YX@ ȮCqdvo2'$~{` Uߒm IԝgyP_iLzc:zeΓ{׋'8ţO" -gAlmGjo|%,O_I1l$L3i H RX ܓ,R)ZW(SrHt)q tz`9}7_m8NX%i`"=/ףC2Iԩ{uq 5pR?}{]@ Rwdyupv2crg{}aϞo8vch?R ?[Z |q2J{^c:{eegۻ@=s@%i #r^ԽmnFF}xWFO$F}3 BFk·Z>T 3($ImăB%@u0_:ɛ ޠPH$)sfϢkO?~z̺$\@9&ՈUI5"I*/E2>ZtRqH\fT$ImXvRO;9ţVmJ# 4 0- "w)i"Uc#&qIENDB`pairtools-1.0.3/doc/_static/report-orientation.svg000077500000000000000000000473761452673171500223460ustar00rootroot00000000000000 report-orientation read { walk { pair { default for both parse --walks-policy all and parse2 junction { --report-orientation pairtools-1.0.3/doc/_static/report-positions.svg000077500000000000000000000732751452673171500220370ustar00rootroot00000000000000 report-positions * * * * * * read { * * * * * * walk { * * * * * * outer { default for parse --walks-policy all * * * * * * junction { default for parse2 --report-position pairtools-1.0.3/doc/_static/rescue_modes.svg000066400000000000000000000512541452673171500211420ustar00rootroot00000000000000 rescue_modes 3 UU 2 UU UU all mask 5any, 5unique --walks-policy walk_pair_index 1 R2 R1-2 walk_pair_type R1 UU 3any, 3unique UU WW ! ! { pairtools-1.0.3/doc/_static/rescue_modes_readthrough.svg000066400000000000000000000600761452673171500235400ustar00rootroot00000000000000 Group 2 all mask 5any, 5unique --walks-policy UU UU UU UU 3any, 3unique UU WW ! ! { 3 2 walk_pair_index 1 R2 R1&2 walk_pair_type R1 pairtools-1.0.3/doc/_static/terminology.png000066400000000000000000001007201452673171500210130ustar00rootroot00000000000000PNG  IHDR(sBIT|d pHYs.$.$* tEXtSoftwarewww.inkscape.org< IDATxuUHx qu!aq]` / _'5JB L2q;3]=3ԓNUi:u=DDD$Ӿ|i8LLEjiOg)i_ ˠR%DDDD}@> .\`8pP ~Òuizv? 6f =E kX5=)zɜ6 l]]0:wk50 uWs)|AXVw;`Y mGy8յ=EHi<,)#)<'<"iMeiql <l>DzlLRH|OhHK)6M$eDZ60`Ez̹w8 (%xtMhl6IUx {1MN1a-&;a _&aQ$y?a _.rd8Eb-| 3w/θiFhL7xNrUUDD$[N1x ;9u3pkϗnB&qXqX2kjG{Udn lݵD$ MbwX՝X@,LU s%"0 Kbb:7\/vݷxZ )os yWR& [E"""֮Rd'_b-.dmWa'y ű=-+ޥ++)ǵ1JjqI8ߗEw=X"vdOްmb*ϰoV+öJISl x`1NX6bT:EL4q|۵] E UqkMX+@#]&_ 9)fVa$3BDD*=#Ǧx.Mpq'.\A '"QUZ>u{607  6FrxBOBǞ^` )QDD$]'no&'_i'N 6c@$pn]]xJ9XAd6 m&ـLnu  ZaHl`c',}mNvƦޘuEJsMX6ԋ]7(D$3UpY|%aZR>NbDJhHK'_Yê_$ I2Ů}q\G̒ʀ( -$iMO2α.l}#q]zEk 1cUڮUUDD$܅aI_Im` ߇XpW"x'M$דj^ZH ,|/ %;̶79u]ؼGĔ`ㄎĺv 8O9 wj}]uUu{MqO 6׾1lV5څ2+30x#X%Ve5S%EDD$T]`8%6a}lV $9g޲G Đ&鏡ve})>Vb qMh%0;)k؂uŝU6 뮚JߕcAD,<Ϳ^d8Ǫ \Z퉧x{.֋W,zk}l9Bō5p6> ?>й&cУX""""""""""""""""""""""""""""""""""""""""""rCDD*u l7<`Sn|¸DcS kMS |p;0 `+`+MM1mccK|Md/nx:Ӱ9/EDD8&\6OG*^8K7s9Di2دy)v]=Hck%w D6N>dc;`u~a'pd_2TDDDDKc'XcXM~`wK^Ijo׽:p8l @m6D-v*"""Uѽ@1 vE> aÁDkChͦ Ķ Kja-L]wdZGGYtw."c_d .8He 聝xŪOTENGw+cc TCld)w(> Ǘ~w;64Xx$NGm%;#=,"""IWU l haZ7LBmWн:{@rƐĊ?l;;^K:EQ={ݓh\}Nsmك8ILBD4MߋNF8Heq :SU[u;o8fǰRb*aZ?Z& 6BmNs޿<$urVNy3PU v_>P]ԘWd&L-֝+j.9p7lD&9h _`Ķ8¾kIs*iHl\⑃ʕ Z$r\y3Z8Hp%Z]bM5>ȴ7`x|JS/{b*cX+)p6 VhϢDJ/aT% ?cJ 5"m[\ە`]K^&/^D,'w vxdb-@gcpzP̥XumE*ee,`2;WJ ͫXOa)kF/M^S|@uާב>WіT^bL8$;J&]k9ʄ;%C'=u6\?T(VT# yx<_?%rL\` p6=Ǫ-5q>7?/N XG[y8\zdp*^Ŧ8̵*Zo`i6_PwOB:@Nu_NTm y |._J%KiwU?__[}CvSXqc1+X?Sr{k׼L}x˼^Ϛcus4yPweW]UE$.Z^NknoO񱫪\GyE7@Kn4XnןXn<;wf<kkEXÛ5}ҽACJ}>2U^һ_B=S&b6Oba &ϺۛXc1'I#'I#@3,i\ix4`˝4G;u/gX aQ6@Gg2-󽰮~qwSaEPKX K~&o™v" *VHg.| \ %5Us`k{^uYK L26㽍7Ggh)l?-sЖp.c_Y;u6qGF3)gBRZ56( tʠ|2իc),yy7hh0bn4!hTϵXְkQ[yn=Ф7Nf*{,zΧ*.Mgه[|6-M,s~d{כ=VHvr6ⷜ4͆@$- h&͑y㐊D,{?`Q@>6.4sd {b l; k8Ʀ!Jbq0~e0%g-%TG9m8-vŵ9}N :]Bgm}`TbӽL,fK}IwUuajn4>UwrY֭?cٮϓX&_5XnӖ'{%5oU?}n"}d}7-3ZACuU,RsMbth7)s">p"wn^5r1e{v?:GFn~kJ7mӶ'nxjh*7vݴ>=,53KqZ;µnݕ~7E^ZqLLXW" \-RٌNssEt5@ҸKJwъUeNB;ax;b'CV@w8ρ@KlLZ88 KBIc1&O_]'D*9[sn~)tX܃}%{t+BHa-bwz9l6a[.b< s,n`xѸ/R+[.NA޷/#LԴt\ฺLؤt\l2YȓX4j̥ݝY}>_1xKFիxmAEUiϮ}Y0i^=F=IҸhG_LkBK$i,-їju=IKK1vz\6ړtw1=*4תO˞LYX^*#pl:Xw˷+)M~翽ku|K0Z;.*X}X+sX5VGb1=qFxYX46u`-Nr$ªf]G!۩Jw^/6c4ɾG=5n.>?ye_¸L,:枼EЇ]; &A`U:qkwnitW?8.۷  <<׭Iឳte^a!_GfNCz9Sn'=O̚Azσ=t'̢S pd /\ǎ+cToco`yXz RS)Y_mˬ]Nn/yZz˂WogN,&xl]?ɥۅfvZ2i Ǻo#NkaؘA4NǙ  DMNHZ/_Ǧ_KqAh҈qFaAN8 yDJZhtO.+A8-c.ђi 0Pm36 op?㴄v>UJnNw DI\\gԳb9{n]{p_ ak aYU泧B М~;DՒ^{9ftI,+/k~|3<+@WX'\CއxK4jq`am}7a]_Ǿ/b'z7 K4a=, 8v IDAT51y NmܗwА/C&=r7,+hI9 `%9ֿؘ&X@VW2v~54Kw>y",Z=5JJذ <:lxxrwƢ"n48( \W >`je4y;h~5{~@ d])[qh⌫w$Vt.U Ou0U]-+@CCO!x_#9bh74mЛXMe;^I,(qd7S DRg1eXa8Lg1F?_;):I6`2c!s.ڒǝ\1{EsF` 2մp+RyOZ7}v@:uO?b S֯s5/SS?O(32Kundgm3WҢf-no O yy| j^ȵ`B9/a//!zx43"UMBǷDNo~2RVx%y:鷧Iٵ~yH,uWzm\ŜgXɾ>g4Ųy G__vntCዂ`pf?y9P]vÞGLbRb󹟏3@"ݍ؉ oc쏛{|+HqXf[e8.Z:c]zHw\!V&[=+NT 莽O`Xx l?KtnԋU%8G)5mY[tG/xPŋB*͎ޓMI?]w,_е;[yvcxV1HH ꎿqCq+EG_'eĭ# fϟ譿R}w5>y0:d|cgeK?xzz2S(?5?`OP~44<¹Yu0[287HHuwI|z"\c '`s=M{DZ0O)E& Т6e +TG`-c[< [Xf*oKpD?GnJ$5yZt.8M[N)3cFϞ\?>ѩ'ܴfMoъ:I,7miOZT*4O\ܴyT*pw'm_#1?7QgSg~甜7jon˝̴fN,9С75={&=ϥHGwWWI { WWjp\]c~Opm;Obim:t}p}X RS:rSp}XGj`ZbU"M{^> :NK'9qIbj@r=VЛMߣD}OhqIl'DID8f>Z\︼G/*d,]\[z˧˗^9Uy:G+Bgh]rX6"٫?Ө%c>펻& pdObKi:pDObis44"h}l;ޓXZv>-8%qַ1%R\wPuom$I$swLBl+ؕ[YS˱|TGɈzLx/=دkul,kng_ ȶ4 -@sGE_͠RU&i _X4i%)@N..|PZR'/"spO]0pWRɛXpG+/My<[!tl!.GcW"uY Nx'ca%݀3\'pXvNy s*= p;#qG/|`v.:EZ/e躿vx1JIhŒ=hiYw֒,6EZ*#1תO?=K^],ڸ9\4SpOdVNឭUp~ᤢ;x`dĒ؜{_KbU7acjcn-@+,9U%c.] 898Ϳ$n:Ͽ/t_ӱ֮ΡX+xNyGeSQ?(6$t|~a^%уX2U%a-*&9)g-X"wķ@qt*cn%"}֣iu箆>Zh _ܭm$>nwi)͝Ê6Iͼ|.ѓF52?1̝m8]#/Q{Ҵ'0Wl~Z,jf>ReB,\ҽ=4. ml~n.wA牔:1"JRvsL<&R%Xg imp&IƲd+>{ډ4?TObپb> >Hհǁ~F˯,X;VM,+/2VWcΛȪ_ xe~ D依1Nľ|݉%p{&F|9Xx1=%.$Qi0N6!t, O##V"ك^ys0zDZT5$pNP\r.]'t.Olr8΅5k$O#bnpޗRlxBS/q fӹ3+"P.(IoXފ]8L*Jh֧D.H6#mZwj#^/BbZ`$`VHf$8ޗ)o۱EHvjMoK$]a'bS]KyEDDLU&;!/y ^ęT$4J wشYSlGj"""iw?6@cA*?S\E26;0&I^-{ZTrmQXahM*@%-MX H3q>{3nhRq&}+<|>o."""ZyIi4RR=JWXB¥H,y5N@]EDDB^ iъTٲԉp8ӻL.8hnE* JشG"闇0Kώݱ[H 6DW,a'ߣ7U-vCnW80ȅm6c]S{dZ=`,e/4"VXPyt2(J_^% iE)3bH$PG;ZQM1A,췥A 9ؼ9 ] 39sHEp $o ӈk9ؼ}[q>NDTZw|Vc]Z%sj#8őƼH-pQiDXqg;TKE.1#NmˀDxgщHuC܃0<Hհ?r1pIeq*TJ*D'QH3؈s-ӈ$SK} hi^:J'ȭˁ'QIX5 ކ#t0pAHs"*&{ǿrDDD$C |jBk9+ƺI_|P8p9lj?bcEDDD<*>4`3VHCKrӈ8xD'JEDD$KnmRB + fﱊ%X^("""Rp]q,߉Z%{ƒEw8ˠҠ8{@%9""""5 STV*;܊ kd~B1T`YA肎TpNx=H"i|>bJKŒB&l\JTcp.3JGH 8 *N4"q;X,*4T$- mMxmj.MMv$NBV>6NE؉ix7^%RNq>;Fda-`߻Rwdhe@U2a-6HePPUBp0ca e}o^'O+,ɜWp^DDƺfJmlDN`]jOE]PEDDD*MR) 9XR_a7H:=O@?Hq1}6J)ɱKUgߛ$u)68_)"""R)MׁTB3D$KIwcا)5Ēj)WDDDD\bW%5r+>`#(P KbKºwA-D H8%jweP"Y3?BJ"ـ񊈈H)XKT`=Ήvq _cSjdB[6b{Kd)'c."ݷDNz$";rqEN4"Q8 x8&_uM}8>$t:VDDDDn$ De௄heP"Y#p% |mk\[CcEDDD*/8'Q|y=c''"UAp 0Na|T(38'%XI,q^Q zbŠ9Y\p8T,"""řG+:<މ*=JR^މnFKtv#8""""RN pN}<(cTf5o.}/21fEDDD$I ӈR5pAdPs-` 6bk`c3ZP.p PHhDNtj$DDjU$m 4V Z!8To_ G$mߪL"]\nL_ƥ8p46Ie0wG 8HEV]$TAD f'`VuIBUb`.""م@%""XL:Nޠr%`==it8NQ x8Mgv5DZHr™sKcfa] w"v_)0XGxehui &R yD~ u_$.;; \ao+؅W!{"]WgMık9(qu^RU)ʗ85;Q۰5&>lDYc3j}Ú,f[ /,d|p|ԩV-j v{f-X9X vur`!MY97P+?mۓ~Ɯ͛~]`u-*/D`AѧX/dĦku%UAyع`o"JXBӿ>^z$NxͻPsQc)𬇱TE$3wyGU5<{_*e!\;*IAM.aS5Q'f, l]6'w .޺k'{|>6q]_RZX}s 7qǀA!֒b>Zfm[~k$_\?[mwS3?<^[8ߝ8Tjm'^cNhsGQ5W)sȯUA~E: ,|V~zQCf\o}t:ָc#do}Ѽ|;j8E. \+FQy `4 x{CЕL녕t%͹@m{ %s~gQTlTx.juLÝҡm ?,;?[v߮^u׫PEE4nc+$|ttJ}ۄ$.qTY-NvK?|µMdž_>ۃwЎ|F\H~W0h@>$}er$ekI|n5؄99X5IyK4WArsSOtKq18 IDATk6^uã3gǕܲ6Y۶ըt +l Wrslq={F9H%k;gv'~]IO7(ޠ4wTp}}Ŝz~;"uڥtot ߸ # {.Ԅ {>ǹuC{8ni3gT-#2R?WDq^bm()8( J] uןuJ}7ึ_ZTuC^4Dzuz^Amڻ]떅t=tVs|K Ϡv֥UDBuzi[Z\F8F\ NձGDӰ74:Z*V|?Wq;:~U_Ըإg뾞㻗;uĺ>Օ@(&/):n@6} I^C;ht?b! ߝ`WUC {Of`䞥lYGDhT>?`Xm8N^`) l?Дka{>x&cɔ80 ptۥsb A:u9Cuk7z^NWrN@¼9!Ǹ[O껺>6k:KKhw,kXFH-|tIH%VQKqٲh k'}lK3\]Zv݇B?Q\8^JwwH߿֥N:;uX ~nIx)6Dlv>;&#7!X2ޥ؉/M7,ok`MN>wc'Ki῿[bs*{(߀}hb3wX&/Ӱ@XmL'XQ? ?vb'˱X%I’Wl K2/` k"̀< ԟII 8W¾#<!)񨁽w5Y W,ڸIL(u@R|L`BWPA|22 nI-n%8g16pr ]IVĩ~-qVhF>vmk邝ODHD5Zaݨ\ڦX N5G`kcX8Iǰ>Hk/XX~7;)kp+O0N7aD`s? $˝OLb7wҸ{ޓi8[Y5,&Ih?ykaK,ig)N&K^ XK$.9XDj-k'EmDO.IaZ9+ v#O$K1u$NCM( v~5.tX}o-^L$|<֥CZ]]Zm ]]Z(#"j?ѹWi +L6NI$}>+b|I[,m\\Ѩ%mtoY3~v]ɥw,֓fslXbvk8v q,lu{`FSnt$NW W'r$֕~V,g_l,Tf<m閮cƮZac^NǒA؉ms&bކM^]8{/|k}{ͻu<@#B[v&X; 4kY<~ mP]ӕyuZO>dlpv4+X;{oyXQQԵgh0v9<`]eZOo3̿Ok,i @XDjY"={b1}gf%u{'m+u>LD`c{Ӱ߱ag }$vw6dGhcDtm 9Hֵk ~-?qqpU/%ckI ͝]{viڥ5^ lw\_Sڰ"^A \ܲh*k'ۂ_iNwi=2j4r/{Hztqb=R%{g&gujq8@)xBbmh(Phq/?J Vܝ !F{ M̽dٝyy;ye{L 3_'yZ̀9ۖn6>W@` m"lk=w9AC'\n`{lp}>.5o?n  3cVEXh27agUOpĭ1NF?N¾؀9603s\{wUv+s!.?/e[!7sB 0b2ƞ7띰0=T'^SnŒ+YM2\ dt& =%v'[aEKg2UXyNTǎ7Ѷ%x7bw>Gc^k٘%ЉO ycnHFx˹9j).*;RWWsߔwCE:i<=oTJ5YX߭8{Ӝ[=3z6zAgvs>Ҽcf j;l+gX=zqy}vY8W,b^g{-zVdяߋ ȓ ē.4qg2DP}e;Ƅd2=nL6"r_0ѐwM8N2DfOgŘ yrr5V]YU D)&c-Yhp\HbC$`ȧO ᎍC=5J߄"l2*UuA#ۧlxEZ3CG=9|͓(-`:WpȸW$}ߦm|)-[ql!DVeW{}/z *.kN.o\ ^+p@xHQs|}ws++{[;Ef=&Z|]J~rru)=|ae%cA,SM/l{Id +B6MC"ǒ:/݊{|ROq[gvl9>([FԗdHO aZ4, t><1g/ن/ñ e+ yI ?z3xpW9ï[e5|l)".TZUWsAֳBfγy/M!D 7?1Dj]PI·v'6,qARm*y,vD,*:짃6=9Ӭ' x6Vh8b&Bnj o5DZn CD]rۦl 2_-'!ko ?npVƗB7pwa%!Jo9׆'0̛]W*1ᪧ >/ ǰl*U Dp StFsW W=oy甭N_DRB0dPCg>6)[5~r\ntN8|Š弹k+CZ "8}@Hm&ԩ}:9zrJYnTU!RQֺc@ u|'m{B՛t0APRz/T9)Vnח|ĭz˞N ٧/kU\ZNc]ُMk1`Vc~EI0*ac! i}@Hت α؀6V%6*Tu u od3xNHCd{W-yB?'&$o8˃}4x܄v)[ՍȽsabP8CE2?x+a6=qϩ װcKBP:,_BPN]W; n.l^BP<1.S\Bl=ŷ\G~J6FQDj.yKg}66^_).sR|]{D Mr㜏 Φ!9Vq[R>ꢁy +caU$xWDzV3e.|-y1阡IZk>.raa¤nj>+$GRO l2baaI]Tehs:pq}a\ NH=gm1d ঘsk"oZ'0Z8m;< &O7\O:q ޘƇ >.DӦfzf=BPwIg<>MѠb A]|;>BۺH KFGjk,1JiN0ib\-UP_?+>ԩѥ….ٰӧׇ=@tm$-'W$ԂBlo ۀ'pO<'ҺzMZ}/d&v(6Kf}]}̘퍍UIPdm598;3Ō\3NKf p2[M !8"JU;rcgufgؤ}qva`K0ћX$P{d_2 0)Rb\1,d8e1y'\k^A=z1sVpWwDsxjqQ!9L^2bN=79!DO`McBP[KǘlZ{K)|ݷW3Do IDAT_͜o:n_>ګY@kȏ WayWenr՘WhoKk37E*ͬm6>pzRDpycaB[y}] m|&2nޱצk1uv wPT3]sO}:1o1qj,4s?–B@oƼD.\id6'e@̳/l5 Ԋݱg +r9*S2/ X4X\lT7dn!v>as;Ha^M')3N">Dž{ٜOKאd]!ݘ<ǮH`iV,͐v#{8ó[@}[536͢we}6 KAi1^ڢ-ޘؼ e;JK`$GasgjqAaH^36/Y 2ǧP J1^'!\ &sMB&/W`F{C%1o|.k3gɔu'{]iܾawɾWce#) ؽ8Flc0Kӭk߂%cсW1G ڏQ9s'}࡜>hp|}Ɇ kT՘}Dܱ>ACm$¹ÔU6lQZ#MsD'ثHӸ}R<'k.v 52x=>~&sՔ 8yWF]E|kybVo=/ҲXeWm?7_~4>Dw8a?K]|gbR\O3@ąe 0Sív(ÓTc 7zyEaQV325l"qϯ01fe\- gK-ui8i|k m?q),l\c\F4yh;`4nm]E NTAuX\T sčF3  ֭.`TʴF:I=G BPUo>/{˖_0I\k EE\4\THǢqn}1a~to|=RSGlGuygr!YTlhesKxwCo{ ,M);g#~I!%f?{SZ1_}Tt_rxk|Etgx| س_ZF. lX2;K)H cLJ]('pzbyu܁m`d8F1#CMXR8T!['15ݽmX ps2Ae@;hiy˖p rѡRm+erI3,<ظ)1JSc.eX>.] b ʻo!"7+4J1A25lD$ٔ G!"bBO@)ats_:RoXw$\oˁ/N!BSw'H G->Ju_4k~5qߥ4{Zz)o~m t~Ǘv*pO<%UXyȂmڲ_׭;K?gE_-!D +uUaЄ(`d8m7qޟܗmkVfypl]8*}YphތyW+ ]G! Vrm 96_%[viG42E6BZ?/`s_*Ǿ46pϒ<%w ey싨'H_u`)oӉo82O-0{ev)ڌt= "yvs_p?ou^׺jMBT`?UtLiyoP\”F̤n0 2`qt=W'Py%݇R u-v/M7CS f7$i c9 Q4lX``J=.":K?|?5J.{·d݂MWc5Aqg,'m mWaFx=l1twt ;cρ1U1#g)*.ﱗ:c>B 2E6Tb~(w +x Y星v#}[%ߍ ۦ8Nr"ݽ+1U6Oc^d3v->vnÌdNaqZc`iڵű7awйU ј)W؀̛,,/xoM;1юd-趮$l@> Ax\MD̎~b`v&(>=Ga3rڗh ^E%&̀6m9{O^y;B }-+9"`_B@(rO=0#6cy? }wYl}<{?ѿ LJ\p*A<kX~a7;tbD|)H $9/xrbɸ 햡_ah,1VNBl"yyo+[Hv}?f%3`qo= phu _ϱdcބymw&Z&}" cܢTԀMB zG6܆&|DPUKi?}Cډo4h?4c|L0XL$cDyaFFdy%,"1˟/~>/c6p  M6c|M0_н Xv*#|L$o9]H(`:WTp\@4h,ZQ=RyG%y}yq?WB3 v3 6COfHZ`s/{˃27ܷD*&˟Hn4/> v+NlXWjکa}6SW42LfH{-(Bj Qp{[$/ %XUMi WOF Ir/Jl;YYCR i8nƔD3񌷜M(n )-/`s•Kep0,\&BR~4pi$&y?U_ h.n@K|CmRVA&fqcRш)6#s\"|Xyr3񍷜LnoGX8XPjAFC_N oyhV敽ˋ\S9?]MW!݇=S`kv'j&Բ1}ңet](XJ[F GK+C'qY@ BC C7ړh[~f ' ˱3b8gOXCkR+lo9u?;&X% U]ݧybLOXX2Vd7_t PZ\C;BtT*:7!s9%! "FF$e a=~ ךk|#5HbR'3rB ! Қ>a&V424.[Àq27aQ!s{h{?&s3&?;zHci]Vбs;'k'( JJ(kH]uyD8D. ܺT1"؏$+O[|]KvB}y3*dwÅ7mu7#+f5+[͖5YDZ|tFi؉dA]ј4 ه%hʂT4:57#YB(}537S!q9e<,e ÕKM7HBsvzbt͘2`_CtH][z+aFQ3Wɓ+A\1u,Vt\o96JoyzN{'Oenf ! Mk2M͢MOQ=>(r؏̞R,.~pgBsry[ޓpaze%&BYc~-Xc3Omwbt %hd?aiD2Z2B(3#=F6E6:-_ [AH_1-Խ%QqUm1tAf휲Qa+882CJxo#WB2ul-7t1g8[O<߉3xW ElFc`cM|mNWVGVL|oz˻MD lƛmSN۳%'QZ|11gy;`Y*~NxϘ+Dc\o0ˆ=z4+epb )¼Wؙ0T\!X,6Vң V"WCv{ ΀r7Y^7O"FpAQ@nl/Q?LJW+m$zT#lXüA5B.[oavBSo/g8dLK0ǍZ`c~ 0qE \+GB ޶K;Oǐܓ3}OڣIeb^aU;ac00W R$?-z!&i]gLC <'@Sm{$1;7Vo'baBe7QlKH22g H]n̟܋b 懊,551%=v7`' `}V`63Bʣm L  ?'isV\=baOcP=l&g0cY~N}(BdǼNӰ~o {wos<?>1yq=3x_cֿ Iy 3{kG܏1C+l~mC[u'0Z@0 4*N.oq_E#qۤ )Ag!DnW,x/opSiXLX9xS-n`nr}9ɈF\n3b(lh&]Shc.w 3t9޶>X=1q#{Un]g>#XƥC0f4Fk.{?oҴ˗ʼ@dSX)!D/#R9߈*rO܊Kij9m1gBtYUM02k>vI<"ƅ8mą%*Q&-#Zy|iMVXXXY`p%9 `1!Jx3I5>Xa\q .5C \3K|Ƽ]1v&P i.1-R5L`#VB@/K0#az ֝]nG}v<`c,{BjoK1Ö8ļ3bI0-\[ _~6`ϝ@Yփ3t-|l96u/Q}ayKM1¢VcFH$e_biR 鈭1~r{Hx#&B0Xyc =OQ!$L65=3]^Y BѴ J}Nƅaf=~ˏ͗P'ǩ_.ljXn+l_,'r v documentation" by default. # html_title = 'pairtools v0.0.1' # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # html_extra_path = [] # If not None, a 'Last updated on:' timestamp is inserted at every page # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. # html_last_updated_fmt = None # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = "pairtoolsdoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', # Latex figure (float) alignment #'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, "pairtools.tex", "pairtools Documentation", "Open2C", "manual"), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "pairtools", "pairtools Documentation", [author], 1)] # If true, show URL addresses after external links. # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( master_doc, "pairtools", "pairtools Documentation", author, "pairtools", "One line description of project.", "Miscellaneous", ), ] # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # texinfo_no_detailmenu = False pairtools-1.0.3/doc/examples/000077500000000000000000000000001452673171500161255ustar00rootroot00000000000000pairtools-1.0.3/doc/examples/benchmark/000077500000000000000000000000001452673171500200575ustar00rootroot00000000000000pairtools-1.0.3/doc/examples/benchmark/Snakefile000066400000000000000000000243371452673171500217140ustar00rootroot00000000000000cores_choices = [1, 2, 4] chromap = expand( "output/result.chromap.{cores}.pairs", cores=cores_choices, ) juicer = expand( "output/result.juicer.{cores}.pairs", cores=cores_choices, ) hicexplorer = expand( "output/result.hicexplorer.{cores}.cool", cores=cores_choices, ) fanc_bwa = expand( "output/result.fanc_bwa.{cores}.pairs", cores=cores_choices, ) fanc_bowtie = expand( "output/result.fanc_bowtie2.{cores}.pairs", cores=cores_choices, ) hicpro = expand( "output/result.hicpro.{cores}.pairs", cores=cores_choices, ) tadbit = expand( "output/result.tadbit.{cores}.reads", cores=cores_choices, ) tadbit_bowtie = expand( "output/result.tadbit_bowtie2.{cores}.reads", cores=cores_choices, ) pairtools = expand( "output/result.pairtools.{cores}.pairs", cores=cores_choices, ) pairtools_bwamem2 = expand( "output/result.pairtools_bwamem2.{cores}.pairs", cores=cores_choices, ) # mapping only: bowtie = expand( "output/result.bowtie.{cores}.sam", cores=cores_choices, ) bwamem = expand( "output/result.bwamem.{cores}.sam", cores=cores_choices, ) bwamem2 = expand( "output/result.bwamem2.{cores}.sam", cores=cores_choices, ) rule all: input: lambda wildcards: tadbit + tadbit_bowtie + bowtie + bwamem2 + pairtools + pairtools_bwamem2 + chromap + hicpro + fanc_bowtie + fanc_bwa + hicexplorer # + bowtie + bwamem + bwamem2 # + juicer # + pairtools + pairtools_bwamem2 + chromap + hicpro + fanc_bowtie + fanc_bwa + hicexplorer # hicexplorer # heavy because it creates coolers # juicer # run separately with the number of cores equal to tested, b/c multiplw juicers cannot be run with the same path rule test: input: fastq1="data/SRR6107789_1.fastq.gz", fastq2="data/SRR6107789_2.fastq.gz", genomefile="data/hg38/hg38.fa", chromsizes="data/hg38/hg38.fa.sizes", genome_index_bwa="data/hg38/index/bwa/hg38.fa", genome_index_chromap="data/hg38/index/chromap/hg38", genome_index_bwamem2="data/hg38/index/bwa-mem2/hg38", genome_index_bowtie2="data/hg38/index/bowtie2/hg38", genome_index_gem="data/hg38/index/gem/hg38.gem", genome_rsites="data/hg38/hg38.DpnII.bed", threads: lambda wildcards: int(wildcards.cores), output: file="output/result.{mode}.{cores}.{format}", benchmark: repeat( "benchmarks/result.{mode}.{cores}.{format}.benchmark", 5, ) run: if wildcards.mode == "pairtools_bwamem2": shell(""" soft/bwa-mem2/bwa-mem2 mem -t {wildcards.cores} -SP {input.genome_index_bwamem2} {input.fastq1} {input.fastq2} | \ soft/pairtools1.0.2/bin/pairtools parse --nproc-in {wildcards.cores} --nproc-out {wildcards.cores} --drop-sam --drop-seq -c {input.chromsizes} | \ soft/pairtools1.0.2/bin/pairtools sort --nproc {wildcards.cores} | \ soft/pairtools1.0.2/bin/pairtools dedup -p {wildcards.cores} --chunksize 1000000 \ -o {output.file} """) elif wildcards.mode == "pairtools": shell(""" soft/pairtools1.0.2/bin/bwa mem -t {wildcards.cores} -SP {input.genome_index_bwa} {input.fastq1} {input.fastq2} | \ soft/pairtools1.0.2/bin/pairtools parse --nproc-in {wildcards.cores} --nproc-out {wildcards.cores} --drop-sam --drop-seq -c {input.chromsizes} | \ soft/pairtools1.0.2/bin/pairtools sort --nproc {wildcards.cores} | \ soft/pairtools1.0.2/bin/pairtools dedup -p {wildcards.cores} --chunksize 1000000 \ -o {output.file} """) elif wildcards.mode == "chromap": shell(""" soft/chromap/bin/chromap --preset hic \ -t {wildcards.cores} -x {input.genome_index_chromap} -r {input.genomefile} \ -1 {input.fastq1} -2 {input.fastq2} -o {output.file} """) elif wildcards.mode == "fanc_bwa": shell(""" TMP_FILE1=$(mktemp -u output/tmp.XXXXXXXX.bam) TMP_FILE2=$(mktemp -u output/tmp.XXXXXXXX.bam) soft/fanc/bin/fanc map -t {wildcards.cores} {input.fastq1} {input.genome_index_bwa} $TMP_FILE1 samtools sort -n -@ {wildcards.cores} $TMP_FILE1 -o $TMP_FILE1.sorted.bam soft/fanc/bin/fanc map -t {wildcards.cores} {input.fastq2} {input.genome_index_bwa} $TMP_FILE2 samtools sort -n -@ {wildcards.cores} $TMP_FILE2 -o $TMP_FILE2.sorted.bam soft/fanc/bin/fanc pairs -f -g {input.genome_rsites} $TMP_FILE1.sorted.bam $TMP_FILE2.sorted.bam {output.file} rm $TMP_FILE1 $TMP_FILE2 $TMP_FILE1.sorted.bam $TMP_FILE2.sorted.bam """) elif wildcards.mode == "fanc_bowtie2": shell(""" TMP_FILE1=$(mktemp -u output/tmp.XXXXXXXX.bam) TMP_FILE2=$(mktemp -u output/tmp.XXXXXXXX.bam) soft/fanc/bin/fanc map -t {wildcards.cores} {input.fastq1} {input.genome_index_bowtie2} $TMP_FILE1 samtools sort -n -@ {wildcards.cores} $TMP_FILE1 -o $TMP_FILE1.sorted.bam soft/fanc/bin/fanc map -t {wildcards.cores} {input.fastq2} {input.genome_index_bowtie2} $TMP_FILE2 samtools sort -n -@ {wildcards.cores} $TMP_FILE2 -o $TMP_FILE2.sorted.bam soft/fanc/bin/fanc pairs -f -g {input.genome_rsites} $TMP_FILE1.sorted.bam $TMP_FILE2.sorted.bam {output.file} rm $TMP_FILE1 $TMP_FILE2 $TMP_FILE1.sorted.bam $TMP_FILE2.sorted.bam """) elif wildcards.mode == "hicpro": shell(""" cd soft/HiC-Pro_env/HiC-Pro/ mkdir -p output TMP_DIR=$(mktemp -d -u output/tmp.XXXXXXXX) TMP_CONFIG=$(mktemp -u output/tmp.XXXXXXXX.config) cp config-hicpro.txt $TMP_CONFIG sed -i 's/N_CPU = 4/N_CPU = {wildcards.cores}/' $TMP_CONFIG bin/HiC-Pro -i rawdata/ -o $TMP_DIR -c $TMP_CONFIG # Cleanup: cp $TMP_DIR/hic_results/data/sample1/sample1.allValidPairs ../../../{output.file} rm -r $TMP_DIR; rm $TMP_CONFIG """) elif wildcards.mode == "juicer": # Note that this process is not guaranteed to work well in parallel mode; # recommended to run separately shell(""" soft/juicer-1.6/CPU/juicer.sh -g hg38 -d data/4juicer/ -s DpnII -S early \ -p {input.chromsizes} -y {input.genome_rsites} -z {input.genome_index_bwa} -t {wildcards.cores} -D soft/juicer-1.6/CPU # Cleanup: mv data/4juicer/aligned/merged_nodups.txt {output.file} rm -rf data/4juicer/aligned; rm -rf data/4juicer/splits/[^S]* """) elif wildcards.mode == "hicexplorer": shell(""" TMP_DIR=$(mktemp -d -u output/tmp.XXXXXXXX) soft/hicexplorer/bin/hicBuildMatrix --samFiles \ <(bwa mem -A1 -B4 -E50 -L0 {input.genome_index_bwa} -t {wildcards.cores} {input.fastq1} | samtools view -@ {wildcards.cores} -Shb -) \ <(bwa mem -A1 -B4 -E50 -L0 {input.genome_index_bwa} -t {wildcards.cores} {input.fastq2} | samtools view -@ {wildcards.cores} -Shb -) \ --restrictionSequence GATC \ --danglingSequence GATC \ --restrictionCutFile {input.genome_rsites} \ --threads {wildcards.cores} \ --inputBufferSize 1000000 \ --QCfolder $TMP_DIR \ -o {output.file} # Cleanup: rm -r $TMP_DIR """) elif wildcards.mode == "tadbit": shell(""" TMP_DIR=$(mktemp -d -u tadbit_output/tmp.XXXXXXXX) soft/tadbit/bin/tadbit map $TMP_DIR -C {wildcards.cores} --mapper_binary soft/tadbit/bin/gem-mapper --fastq {input.fastq1} --read 1 --index {input.genome_index_gem} --renz DpnII || true soft/tadbit/bin/tadbit map $TMP_DIR -C {wildcards.cores} --mapper_binary soft/tadbit/bin/gem-mapper --fastq {input.fastq2} --read 2 --index {input.genome_index_gem} --renz DpnII || true soft/tadbit/bin/tadbit parse $TMP_DIR --genome data/hg38/hg38.fa || true soft/tadbit/bin/tadbit filter $TMP_DIR -C {wildcards.cores} --format mid || true mv $TMP_DIR/03_filtered_reads/valid_r1-r2_intersection_*.tsv {output.file} rm -r $TMP_DIR """) elif wildcards.mode == "tadbit_bowtie2": shell(""" TMP_DIR=$(mktemp -d -u tadbit_output/tmp.XXXXXXXX) soft/tadbit/bin/tadbit map $TMP_DIR -C {wildcards.cores} --mapper bowtie2 --mapper_binary soft/tadbit/bin/bowtie2 --fastq {input.fastq1} --read 1 --index {input.genome_index_bowtie2} --renz DpnII || true soft/tadbit/bin/tadbit map $TMP_DIR -C {wildcards.cores} --mapper bowtie2 --mapper_binary soft/tadbit/bin/bowtie2 --fastq {input.fastq2} --read 2 --index {input.genome_index_bowtie2} --renz DpnII || true soft/tadbit/bin/tadbit parse $TMP_DIR --genome data/hg38/hg38.fa || true soft/tadbit/bin/tadbit filter $TMP_DIR -C {wildcards.cores} --format mid || true mv $TMP_DIR/03_filtered_reads/valid_r1-r2_intersection_*.tsv {output.file} rm -r $TMP_DIR """) elif wildcards.mode == "bowtie": shell(""" soft/tadbit/bin/bowtie2 -p 4 -x {input.genome_index_bowtie2} -1 {input.fastq1} -2 {input.fastq2} -S {output.file} """) elif wildcards.mode == "bwamem": shell(""" soft/pairtools0.3.0/bin/bwa mem -t 4 -SP {input.genome_index_bwa} {input.fastq1} {input.fastq2} > {output.file} """) elif wildcards.mode == "bwamem2": shell(""" soft/bwa-mem2/bwa-mem2 mem -t 4 -SP {input.genome_index_bwamem2} {input.fastq1} {input.fastq2} > {output.file} """) pairtools-1.0.3/doc/examples/benchmark/benchmark.ipynb000066400000000000000000021104541452673171500230630ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "id": "864d317a-4960-4315-846d-ba2f36014614", "metadata": { "tags": [] }, "source": [ "# Pairtools benchmarking\n", "\n", "Welcome to pairtools benchmarking. These are the instructions on how to test performance of different software for mapping Hi-C and Hi-C-like methods.\n", "Mapping usually results in the file with mapped pairs, which is then converted into binned matrix format. Pairs format is the \"rawest\" interpretable type of data after reads.\n", "\n", "Reviewing the literature suggests that there are at least 6 methods to map Hi-C and Hi-C-like data. These include:\n", "\n", "- **pairtools** is a lightweight Python CLI that extracts and manipulates Hi-C contacts post-alignment. Aslignment can be done by:\n", " - bwa mem\n", " - bwa-mem2, ahn optimized version of bwa mem, which [x2-2.5 improves speed over bwa](https://github.com/bwa-mem2/bwa-mem2)\n", "\n", "- **chromap** is a [fast alignment tool for chromatin profiles](https://www.nature.com/articles/s41467-021-26865-w), not specialized for Hi-C but [parameterized for a broad range of sequencing data including Hi-C short reads](https://github.com/haowenz/chromap#map-hi-c-short-reads). \n", "\n", " Does not require separate step of mapping.\n", "\n", "- **HiC-Pro** is a [pipeline for Hi-C and DNase-C mapping](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-015-0831-x), \"optimized and flexible\".\n", "\n", " It calls mapping within. By default, creates the output cooler files with binned data, but the script can be tinkered in order to stop the processing at the step of pairs. \n", "\n", "- **Juicer** is a [platform for analysis of Hi-C data](https://github.com/aidenlab/juicer), which is already adapted to a wide range of cluster types.\n", "\n", " It calls mapping within. Has an option to stop the data processing at the step of pairs, without further construction of binned matrices. \n", "\n", "- **HiCExplorer** is a [broad-range set of tools for processing, normalization, analysis and visualization Hi-C and Hi-C-like methods](https://doi.org/10.1038/s41467-017-02525-w). \n", "\n", " It [builds Hi-C binned matrix post-alignment with bwa mem](https://hicexplorer.readthedocs.io/en/latest/content/tools/hicBuildMatrix.html#hicbuildmatrix). \n", "\n", "- **FAN-C** is a [set of CLI tools that runs the mapping (bowtie or bwa mem), extracts and manipulates Hi-C contacts](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-020-02215-9). It also has the [tools for data visualization and downstream analysis](https://github.com/vaquerizaslab/fanc).\n", "\n", "- **TADbit** is [multi-task Python API](https://3dgenomes.github.io/TADbit/index.html) that handles all the steps from the alignment of paired-end reads to the detection of Topologically Associating Domain (TAD) borders, compartments and three-dimensional modeling of chromatin based on interaction matrices.\n", "\n", "\n", "*We benchmark these programs on one million of representative reads.*\n", "These reads are taken from random replicate from Rao SSP et al., [\"Cohesin Loss Eliminates All Loop Domains.\"](https://pubmed.ncbi.nlm.nih.gov/28985562/), Cell, 2017 Oct 5;171(2):305-320.e24\n", "
\n", "Generally, it is useful to assess how much computational time you need per million of reads.\n", "
\n", "As long as you have this assessment, you may multiply the size of your experiment by the whole library size (in mlns of reads), because we expect linear growth of computational complexity of reads mapping with library size.\n", "\n", "\n", "The benchmarking consists of four general steps. If you want to reproduce it, you need to run steps 1 and 2 manually in order to create the working environment, and then use snakemake script to run the benchmarks. \n", "
\n", "You may use the commands form the \"3. Run\" section to get an understanding how each indiviaul framework works and what parameters can be changed. \n", "
\n", "Note that you need separate run of juicer with single value of --ncores, because it does not support parallel launches (because it writes to the default output).\n", "
\n", "Finally, there is a visualization section with a display of all the results that we calcualted on our machines. \n", "\n", "1. [Install software](#1.-Install-software)\n", "\n", "2. [Download data and genome](#2.-Download-data-and-genome). \n", "\n", "3. [Run](#3.-Run)\n", "\n", "4. [Visualize benchmarks](#4.-Visualize-benchmarks)\n" ] }, { "cell_type": "markdown", "id": "8ae7b1ea-f64b-4740-8694-2fdb1d7353c4", "metadata": {}, "source": [ "## 1. Install software\n", "\n", "We will use separate conda environments to install different utilities. Each utility will have its own environment and peth to the binaries." ] }, { "cell_type": "code", "execution_count": null, "id": "0f98ab45-3759-4260-ab9f-79e487410d5f", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "mkdir ./soft" ] }, { "cell_type": "markdown", "id": "b9dc2f27-868f-4bfd-bd9f-d88d18d6655f", "metadata": {}, "source": [ "### pairtools" ] }, { "cell_type": "markdown", "id": "cd56a6ab-3836-445c-ab70-73eaa4e80da8", "metadata": {}, "source": [ "#### pairtools v1.0.2" ] }, { "cell_type": "code", "execution_count": null, "id": "f3e0038a-f034-4c40-8e5d-d50f2351679f", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "conda create -y --prefix soft/pairtools1.0.2 python=3.9 pip\n", "conda activate soft/pairtools1.0.2\n", "pip install cython numpy pysam\n", "pip install git+https://github.com/open2c/pairtools.git@v1.0.2\n", "\n", "conda install -c conda-forge lz4-c # conda install -c anaconda lz4\n", "\n", "conda install -y -c bioconda \"bwa>=0.7.17\"" ] }, { "cell_type": "markdown", "id": "a7548c59-7cd2-40f8-85da-7a6b2ede143d", "metadata": {}, "source": [ "#### bwa-mem2" ] }, { "cell_type": "code", "execution_count": null, "id": "695cdebb-7a4b-4ca9-b2a5-f0a178874b77", "metadata": {}, "outputs": [], "source": [ "%%bash \n", "conda activate soft/pairtools1.0.2\n", "\n", "# bwa-mem2: compile from source (not recommended for general users)\n", "\n", "# Get the source\n", "git clone --recursive https://github.com/bwa-mem2/bwa-mem2 soft/bwa-mem2\n", "cd soft/bwa-mem2\n", "\n", "# Compile\n", "make\n", "\n", "# Exit compilation folder\n", "cd ../../" ] }, { "cell_type": "markdown", "id": "0bc9befa-e4cc-4cf3-84d5-fbae94a2e6fb", "metadata": {}, "source": [ "### chromap" ] }, { "cell_type": "code", "execution_count": null, "id": "2f02a8e1-998e-4383-bc8a-d9d493b425ef", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "conda create -y --prefix soft/chromap\n", "conda activate soft/chromap\n", "conda install -y -c bioconda -c conda-forge chromap" ] }, { "cell_type": "markdown", "id": "37f50ca4-74a2-44a3-8038-83a4d7b43c85", "metadata": {}, "source": [ "### HiC-Pro\n", "\n", "[HiC-Pro](https://github.com/nservant/HiC-Pro) is a popular software for Hi-C mapping, its now part of nf-core Hi-C pipeline, supports both fragment-based analysis of Hi-C and fragement-free analysis of DNase-based Hi-C." ] }, { "cell_type": "code", "execution_count": null, "id": "45c9697c-5f49-4a53-bbf0-18535f05e465", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "git clone https://github.com/nservant/HiC-Pro.git soft/HiC-Pro_env/HiC-Pro\n", "conda env create -f soft/HiC-Pro_env/HiC-Pro/environment.yml -p soft/HiC-Pro_env\n", "### Working environment will be soft/HiC-Pro_env\n", "\n", "conda activate soft/HiC-Pro_env\n", "\n", "# Install dependencies\n", "conda install -y -c bioconda bowtie2 samtools pysam numpy scipy bx-python\n", "conda install -y -c r r r-rcolorbrewer r-ggplot2\n", "\n", "# Copy prepared config:\n", "cp configs/config-hicpro_install.txt soft/HiC-Pro_env/HiC-Pro/config-install.txt\n", "cp configs/config-hicpro.txt soft/HiC-Pro_env/HiC-Pro/config-hicpro.txt\n", "\n", "# Configure and install:\n", "cd soft/HiC-Pro_env/HiC-Pro\n", "make configure\n", "make install\n", "\n", "cd ../../../\n", "\n", "# Patch the code to retain only data processing steps with no creating of maps:\n", "sed -i \"s/all : init mapping proc_hic merge_persample hic_qc build_raw_maps ice_norm/all : init mapping proc_hic merge_persample #hic_qc build_raw_maps ice_norm/\" soft/HiC-Pro_env/HiC-Pro/scripts/Makefile\n" ] }, { "cell_type": "code", "execution_count": null, "id": "18e29459-334a-458f-8244-ede873b25258", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "# Note that the configs should be adjusted for your system:\n", "cp configs/config-hicpro_install.txt soft/HiC-Pro_env/HiC-Pro/config-install.txt\n", "cp configs/config-hicpro.txt soft/HiC-Pro_env/HiC-Pro/config-hicpro.txt" ] }, { "cell_type": "markdown", "id": "d00d4aed-94b4-4de6-83b2-9950c9d7b949", "metadata": {}, "source": [ "### FAN-C" ] }, { "cell_type": "code", "execution_count": null, "id": "0ebd9a60-f0d0-4f0b-9a64-d2ea386a15f9", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "conda create -y --prefix soft/fanc python=3.9 pip hdf5\n", "conda activate soft/fanc\n", "pip install fanc\n", "conda install -y -c bioconda samtools" ] }, { "cell_type": "markdown", "id": "a2b58a8e-b828-47c7-87f2-86337657f5e4", "metadata": {}, "source": [ "### Juicer" ] }, { "cell_type": "code", "execution_count": null, "id": "c2611844-0e32-465f-befa-a8e296bf54d2", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "conda create -y --prefix soft/juicer\n", "conda activate soft/juicer\n", "\n", "conda install -y -c bioconda bwa java-jdk\n", "conda install -y -c conda-forge coreutils\n", "\n", "# Download the recommended stable version:\n", "wget https://github.com/aidenlab/juicer/archive/refs/tags/1.6.zip\n", "unzip 1.6.zip\n", "rm 1.6.zip\n", "mv juicer-1.6 soft/juicer-1.6\n", "\n", "# Download compile jar files of the stable version:\n", "wget http://hicfiles.tc4ga.com.s3.amazonaws.com/public/juicer/juicer_tools.1.6.2_jcuda.0.7.5.jar\n", "mv juicer_tools.1.6.2_jcuda.0.7.5.jar soft/juicer-1.6/CPU/scripts/common/juicer_tools.jar\n", "\n", "# Copy the scripts to some accessible location:\n", "mkdir -p soft/juicer-1.6/CPU/scripts/\n", "cp -r soft/juicer-1.6/CPU/[^s]* soft/juicer-1.6/CPU/scripts/" ] }, { "cell_type": "markdown", "id": "3e02b40b-1f5c-4bf8-89fc-36af2f485c55", "metadata": {}, "source": [ "### HiCExplorer" ] }, { "cell_type": "code", "execution_count": null, "id": "8d5e4ffd-7908-44eb-9d22-22cb24170207", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "conda create -y --prefix soft/hicexplorer python=3.9\n", "conda activate soft/hicexplorer\n", "conda install -y -c bioconda hicexplorer bwa" ] }, { "cell_type": "markdown", "id": "380efd65-263d-4b24-9921-8d0be8013c7d", "metadata": {}, "source": [ "### TADbit" ] }, { "cell_type": "code", "execution_count": null, "id": "040231d7-c0c4-425f-85a4-da0cfc62eec1", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "conda create -y --prefix soft/tadbit\n", "conda activate soft/tadbit\n", "\n", "# # Install mappers:\n", "conda install -y -q -c bioconda gem3-mapper bowtie2\n", "\n", "# install tadbit\n", "conda install -y -q -c bioconda tadbit" ] }, { "cell_type": "markdown", "id": "e325db7c-93d8-4e48-9ba6-8867956398cd", "metadata": {}, "source": [ "## 2. Download data and genome" ] }, { "cell_type": "code", "execution_count": null, "id": "aaea1786-7c9b-425c-9aac-de8ac709688c", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "mkdir data" ] }, { "cell_type": "markdown", "id": "d4372383-a702-44f5-89e7-66746700f765", "metadata": {}, "source": [ "### Download raw data\n", "\n", "Test data from Rao et al. 2017, 1 mln pairs: " ] }, { "cell_type": "code", "execution_count": null, "id": "05b7140b-454d-4bd2-842f-a0d042701a4e", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "fastq-dump -O data --gzip --split-files SRR6107789 --minSpotId 0 --maxSpotId 1000000" ] }, { "cell_type": "code", "execution_count": null, "id": "2d2952e1-528a-41dc-8efc-be866e958c89", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Put the data in accessible folder for juicer: \n", "mkdir -p data/4juicer/fastq/\n", "mkdir -p data/4juicer/splits/\n", "cp data/SRR6107789_1.fastq.gz data/4juicer/fastq/SRR6107789_R1.fastq.gz\n", "cp data/SRR6107789_2.fastq.gz data/4juicer/fastq/SRR6107789_R2.fastq.gz\n", "cp data/4juicer/fastq/* data/4juicer/splits/" ] }, { "cell_type": "code", "execution_count": null, "id": "083d9534-ce41-45b1-98f4-2007c64fb5f3", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Put the data in accessible folder for HiC-Pro:\n", "mkdir -p soft/HiC-Pro_env/HiC-Pro/rawdata/sample1\n", "cp data/S*fastq.gz soft/HiC-Pro_env/HiC-Pro/rawdata/sample1/" ] }, { "cell_type": "markdown", "id": "a4683297-4109-4786-8faa-26089fa8d3e4", "metadata": {}, "source": [ "### Install genome" ] }, { "cell_type": "markdown", "id": "1c29a2d6-cdf4-4552-b856-9316b8e332d4", "metadata": {}, "source": [ "#### Genomepy installation\n", "will install fasta, bwa and bowtie2 indexes:" ] }, { "cell_type": "code", "execution_count": null, "id": "3bf9ab65-da9c-41f0-adc6-f7f9d268e55e", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Activate bwa plugin for genomepy:\n", "! genomepy plugin enable bwa bowtie2" ] }, { "cell_type": "code", "execution_count": null, "id": "2b7dc978-408d-4b32-8a32-119645b24c9f", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Install hg38 genome by genomepy:\n", "! genomepy install hg38 -g data/" ] }, { "cell_type": "code", "execution_count": null, "id": "3fe79dca-fc66-4b81-904f-bfedc7cfd5b1", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Restrict the genome:\n", "! cooler digest data/hg38/hg38.fa.sizes data/hg38/hg38.fa DpnII --rel-ids 1 -o data/hg38/hg38.DpnII.bed" ] }, { "cell_type": "markdown", "id": "8db4bf50-7e32-4b01-bb2c-a2f1c02565f7", "metadata": { "tags": [] }, "source": [ "#### Build genome index: bwa-mem2" ] }, { "cell_type": "code", "execution_count": null, "id": "e2691bce-a469-495c-aa3e-2abb6105b1f4", "metadata": {}, "outputs": [], "source": [ "%%bash \n", "mkdir data/hg38/index/bwa-mem2/\n", "soft/bwa-mem2/bwa-mem2 index -p data/hg38/index/bwa-mem2/hg38 data/hg38/hg38.fa" ] }, { "cell_type": "markdown", "id": "3274559c-b130-4d40-93f1-59efc3abb1ed", "metadata": { "tags": [] }, "source": [ "#### Build genome index: chromap" ] }, { "cell_type": "code", "execution_count": null, "id": "993b7093-d896-4726-bfd5-77c86bb5d302", "metadata": {}, "outputs": [], "source": [ "%%bash \n", "mkdir data/hg38/index/chromap\n", "chromap -i -r data/hg38/hg38.fa -o data/hg38/index/chromap/hg38" ] }, { "cell_type": "markdown", "id": "aecf762a-f9e4-4b87-863a-ca92ae88bb2e", "metadata": { "tags": [] }, "source": [ "#### Build genome index: GEM" ] }, { "cell_type": "code", "execution_count": null, "id": "3ccdc3c1-f762-4cac-9821-4479d44c2f78", "metadata": {}, "outputs": [], "source": [ "%%bash \n", "mkdir data/hg38/index/gem\n", "gem-indexer -T 8 -i data/hg38/hg38.fa -o data/hg38/index/gem/hg38" ] }, { "cell_type": "markdown", "id": "5a9bd0a9-9dc0-4942-bb1b-cf7b77363bb6", "metadata": {}, "source": [ "## 3. Run\n", "\n", "The banchmarking is usually cumbersome, but it can be simplified by snakemake. We provide a Snakemake pipeline that will allow you to benchmark different approaches.\n", "\n", "The output of snakemake will consist of resulting Hi-C pairs/maps in `output` folder and benchmarking files in `benchmarks` folder. \n", "The file names have the information on parameters in their names:\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "ad48c488-05f4-4b2d-a18d-2b399e8b03b0", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Running \n", "snakemake --cores 10" ] }, { "cell_type": "code", "execution_count": null, "id": "9b086bae-ef42-41bb-9254-42af10c9ab1b", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%bash\n", "\n", "# Cleanup (only if you want to erase all the output)\n", "rm output/*; rm benchmarks/*" ] }, { "cell_type": "markdown", "id": "e46dffea-87ac-4157-8938-ae032d50a591", "metadata": {}, "source": [ "## Manual run\n", "\n", "You may also run them to test individual steps of the pipeline." ] }, { "cell_type": "markdown", "id": "6dcbff7b-8caf-4512-9c44-375eac698730", "metadata": {}, "source": [ "### pairtools" ] }, { "cell_type": "code", "execution_count": null, "id": "7da2496b-fd21-4383-a3df-ba9fadb9e505", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "soft/bwa-mem2/bwa-mem2 mem -t 5 -SP data/hg38/index/bwa-mem2/hg38 data/SRR6107789_1.fastq.gz data/SRR6107789_2.fastq.gz | \\\n", " soft/pairtools1.0.2/bin/pairtools parse --nproc-in 5 --nproc-out 5 --drop-sam --drop-seq -c data/hg38/hg38.fa.sizes | \\\n", " soft/pairtools1.0.2/bin/pairtools sort --nproc 5 | \\\n", " soft/pairtools1.0.2/bin/pairtools dedup -p 5 --backend cython \\\n", " -o output/result.pairtools.pairs" ] }, { "cell_type": "markdown", "id": "b0c9a7e3-8e08-42bf-9748-cd94eff6731a", "metadata": {}, "source": [ "### chromap" ] }, { "cell_type": "code", "execution_count": null, "id": "e3012cdb-be1c-46ef-bb7a-20eff2d34fba", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "soft/chromap/bin/chromap --preset hic --low-mem \\\n", " -t 5 -x data/hg38/index/chromap/hg38 -r data/hg38/hg38.fa \\\n", " -1 data/SRR6107789_1.fastq.gz -2 data/SRR6107789_2.fastq.gz -o output/result.chromap.pairs" ] }, { "cell_type": "markdown", "id": "32e60c83-1fab-4fcb-ba0b-8c1258e457c6", "metadata": {}, "source": [ "### HiC-Pro" ] }, { "cell_type": "code", "execution_count": null, "id": "5931f3a6-82f1-4fd8-b65c-9ed648b5f986", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "cd soft/HiC-Pro_env/HiC-Pro\n", "bin/HiC-Pro -i rawdata/ -o output -c config-hicpro.txt\n", "\n", "cd ../../../" ] }, { "cell_type": "markdown", "id": "43171a68-8928-418c-9779-268a5d4923d3", "metadata": {}, "source": [ "### FAN-C\n", "Based on [CLI tutorial](https://fan-c.readthedocs.io/en/latest/fanc-executable/fanc-generate-hic/fanc_modular_steps.html):" ] }, { "cell_type": "code", "execution_count": null, "id": "802e66a8-4c93-45d6-a735-4a68a1d9184a", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "fanc map -t 5 data/SRR6107789_1.fastq.gz data/hg38/index/bwa/hg38.fa output/fanc-output_1.bam\n", "fanc map -t 5 data/SRR6107789_2.fastq.gz data/hg38/index/bwa/hg38.fa output/fanc-output_2.bam\n", "samtools sort -@ 5 -n output/fanc-output_1.bam -o output/fanc-output_1.sorted.bam\n", "samtools sort -@ 5 -n output/fanc-output_2.bam -o output/fanc-output_2.sorted.bam\n", "fanc pairs output/fanc-output_1.sorted.bam output/fanc-output_2.sorted.bam output/fanc-output.pairs -g data/hg38/hg38.DpnII.bed" ] }, { "cell_type": "markdown", "id": "46f11121-bff6-4f92-8d80-aa86b01ffcc0", "metadata": {}, "source": [ "### Juicer" ] }, { "cell_type": "code", "execution_count": null, "id": "a1a5571c-b1da-4125-b915-34884be7299e", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "soft/juicer-1.6/CPU/juicer.sh -g hg38 -d data/4juicer/ -s DpnII -S early -p data/hg38/hg38.fa.sizes -y data/hg38/hg38.DpnII.bed -z data/hg38/index/bwa/hg38.fa -t 5 -D soft/juicer-1.6/CPU\n" ] }, { "cell_type": "markdown", "id": "871ac7b7-0180-4103-a8b3-bd49b7269d83", "metadata": {}, "source": [ "### HiCExplorer\n", "Based on the example: https://hicexplorer.readthedocs.io/en/latest/content/example_usage.html\n", "\n", "Note that it does not procude the pairs, but binned coolers." ] }, { "cell_type": "code", "execution_count": null, "id": "5f14967d-ed63-4d20-a006-bc038d1f1f6f", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "hicBuildMatrix --samFiles \\\n", " <(bwa mem -t 4 -A1 -B4 -E50 -L0 data/hg38/index/bwa/hg38.fa data/SRR6107789_1.fastq.gz | samtools view -Shb -) \\\n", " <(bwa mem -t 4 -A1 -B4 -E50 -L0 data/hg38/index/bwa/hg38.fa data/SRR6107789_2.fastq.gz | samtools view -Shb -) \\\n", " --restrictionSequence GATC \\\n", " --danglingSequence GATC \\\n", " --restrictionCutFile data/hg38/hg38.DpnII.bed \\\n", " --threads 4 \\\n", " --inputBufferSize 100000 \\\n", " --QCfolder hicexplorer_tmp \\\n", " -o hicexplorer_output.cool" ] }, { "cell_type": "markdown", "id": "3a856970-2770-4d52-b170-2308b9864ea3", "metadata": {}, "source": [ "### TADbit" ] }, { "cell_type": "code", "execution_count": null, "id": "463b8edd-9b9b-405a-ba21-6b76429ece41", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "tadbit map tadbit_output --fastq data/SRR6107789_1.fastq.gz --read 1 --index data/hg38/index/gem/hg38.gem --renz DpnII \n", "tadbit map tadbit_output --fastq data/SRR6107789_2.fastq.gz --read 2 --index data/hg38/index/gem/hg38.gem --renz DpnII \n", "\n", "tadbit parse tadbit_output --genome data/hg38/hg38.fa \n", "\n", "tadbit filter tadbit_output --format short" ] }, { "cell_type": "markdown", "id": "f2b8fa6a-d282-4ae5-9154-4578be8418dd", "metadata": {}, "source": [ "### Read mapping only" ] }, { "cell_type": "code", "execution_count": null, "id": "6b48d56b-122d-4827-a384-0cfeb797e081", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# bwa mem\n", "soft/pairtools0.3.0/bin/bwa mem -t 4 -SP data/hg38/index/bwa/hg38.fa data/SRR6107789_1.fastq.gz data/SRR6107789_2.fastq.gz > bwa-mem.sam\n", "\n", "# bwa mem2\n", "soft/bwa-mem2/bwa-mem2 mem -t 4 -SP data/hg38/index/bwa-mem2/hg38 data/SRR6107789_1.fastq.gz data/SRR6107789_2.fastq.gz > bwa-mem2.sam\n", "\n", "# bowtie2 only\n", "soft/tadbit/bin/bowtie2 -p 4 -x data/hg38/index/bowtie2/hg38 -1 data/SRR6107789_1.fastq.gz -2 data/SRR6107789_2.fastq.gz -S bowtie2.sam\n" ] }, { "cell_type": "markdown", "id": "9b3b93e5-47b1-408f-a4d5-32a85060fd8a", "metadata": {}, "source": [ "## 4. Visualize benchmarks" ] }, { "cell_type": "code", "execution_count": 2, "id": "8eb57b57-db42-420a-a2e7-631fda0676e4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "36 CPUs at 1211 GHz\n" ] } ], "source": [ "# Check the CPU properties:\n", "import psutil\n", "print(f\"{psutil.cpu_count()} CPUs at {psutil.cpu_freq().current:.0f} GHz\") " ] }, { "cell_type": "code", "execution_count": 3, "id": "5a59f6bc-be2d-442b-b4ac-07237f38c38b", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "mpl.rcParams['font.family'] = \"sans-serif\"\n", "figsize_A4 = np.array([11.69, 8.27])\n", "plt.rcParams[\"figure.figsize\"] = figsize_A4.T\n", "plt.rcParams['figure.facecolor']='white'\n", "plt.rcParams['font.size']=16\n", "\n", "import glob" ] }, { "cell_type": "code", "execution_count": 4, "id": "986fae72-ac93-4bff-9749-3b3a70057e17", "metadata": {}, "outputs": [], "source": [ "## If you start from .csv. file: \n", "# df = pd.read_csv('benchmarking_1mln.csv')" ] }, { "cell_type": "code", "execution_count": 13, "id": "dd9e829a-f25e-4c66-b22d-01e008143396", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "39\n" ] } ], "source": [ "# If you start from your own benchmarks:\n", "files = glob.glob(\"benchmarks/*\") #+ glob.glob(\"benchmarks_v1_2022/*\")# + \n", "print(len(files))" ] }, { "cell_type": "code", "execution_count": 14, "id": "08707677-e087-44ca-8e8a-9d74ef4482a4", "metadata": {}, "outputs": [], "source": [ "def get_params(filename):\n", " split = filename.split('.')\n", " util= split[1]\n", " ncores = int(split[2])\n", " \n", " return util, ncores\n", "\n", "timings = []\n", "for f in files:\n", " t = pd.read_table(f)\n", " t[['util', 'ncores']] = get_params(f)\n", " timings.append(t)\n", "timings = pd.concat(timings)" ] }, { "cell_type": "code", "execution_count": 15, "id": "d43f8549-4765-441c-b94c-eb76a950ca4d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sh:m:smax_rssmax_vmsmax_ussmax_pssio_inio_outmean_loadcpu_timeutilncores
0482.10290:08:0217068.9720572.7316931.9116951.7116275.210.02102.18493.82pairtools_bwamem21
1482.52610:08:0217079.4620508.7316941.4616956.3432534.1139.25101.73498.88pairtools_bwamem21
2488.99970:08:0817055.0420508.5916920.9616939.6942104.6178.47100.17502.58pairtools_bwamem21
3484.34600:08:0416981.5920380.6016961.3016962.3745493.36117.7093.0650.54pairtools_bwamem21
4483.31590:08:0316969.0220595.5116944.7516945.7961922.79156.9399.61507.64pairtools_bwamem21
\n", "
" ], "text/plain": [ " s h:m:s max_rss max_vms max_uss max_pss io_in \\\n", "0 482.1029 0:08:02 17068.97 20572.73 16931.91 16951.71 16275.21 \n", "1 482.5261 0:08:02 17079.46 20508.73 16941.46 16956.34 32534.11 \n", "2 488.9997 0:08:08 17055.04 20508.59 16920.96 16939.69 42104.61 \n", "3 484.3460 0:08:04 16981.59 20380.60 16961.30 16962.37 45493.36 \n", "4 483.3159 0:08:03 16969.02 20595.51 16944.75 16945.79 61922.79 \n", "\n", " io_out mean_load cpu_time util ncores \n", "0 0.02 102.18 493.82 pairtools_bwamem2 1 \n", "1 39.25 101.73 498.88 pairtools_bwamem2 1 \n", "2 78.47 100.17 502.58 pairtools_bwamem2 1 \n", "3 117.70 93.06 50.54 pairtools_bwamem2 1 \n", "4 156.93 99.61 507.64 pairtools_bwamem2 1 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timings.head()" ] }, { "cell_type": "code", "execution_count": 87, "id": "ba0c1c4f-ac4c-43f5-8245-e32d1d4cc3cf", "metadata": {}, "outputs": [], "source": [ "df = timings.sort_values(['ncores', 'util'])" ] }, { "cell_type": "code", "execution_count": 88, "id": "06fa2f0b-1c9e-473b-bbdd-3157f1d81a1a", "metadata": {}, "outputs": [], "source": [ "df.to_csv('benchmarking_1mln.csv')" ] }, { "cell_type": "code", "execution_count": 17, "id": "306e3829-ab40-4bfb-804b-775b5bf6a170", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['bowtie', 'bwamem', 'bwamem2', 'chromap', 'fanc_bowtie2',\n", " 'fanc_bwa', 'hicexplorer', 'hicpro', 'juicer', 'pairtools',\n", " 'pairtools_bwamem2', 'tadbit', 'tadbit_bowtie2'], dtype=object)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.unique(df.util)" ] }, { "cell_type": "code", "execution_count": 21, "id": "8b20d808-78aa-4efc-9c2d-999b4e393968", "metadata": {}, "outputs": [], "source": [ "labels = [\n", " 'chromap', \n", " 'pairtools_bwamem2', \n", " 'tadbit',\n", " 'pairtools', \n", " 'tadbit_bowtie2',\n", " 'juicer', \n", " 'hicpro', \n", " 'hicexplorer', \n", " 'fanc_bwa', \n", " 'fanc_bowtie2',\n", " 'bwamem2',\n", " 'bwamem',\n", " 'bowtie',\n", "]\n", "labels_mod = [\n", " 'Chromap', \n", " 'bwa-mem2 + pairtools', \n", " 'GEM + TADbit',\n", " 'bwa mem + pairtools', \n", " 'bowtie2 + TADbit',\n", " 'Juicer', \n", " 'Hi-Pro', \n", " 'HiCExplorer', \n", " 'bwa mem + FANC', \n", " 'bowtie2 + FANC',\n", " 'bwa-mem2',\n", " 'bwa mem',\n", " 'bowtie2',\n", "]" ] }, { "cell_type": "code", "execution_count": 24, "id": "8f31f3be-cf8f-4976-9a60-28e97c13593d", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABLQAAAMpCAYAAAAdBGqwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddXgUV9sG8Hvj7gIJElyDBIdAcC/uTltaKC3WvhQoEqxI4UUCBUpb3CVIgeIEgjsEt0AIBCJECMTP90e+nXc32d1sdLNw/65rL8LMnDPPzM7OnH32zBmZEEKAiIiIiIiIiIhITxjoOgAiIiIiIiIiIqLsYEKLiIiIiIiIiIj0ChNaRERERERERESkV5jQIiIiIiIiIiIivcKEFhERERERERER6RUmtIiIiIiIiIiISK8woUVERERERERERHqFCS0iIiIiIiIiItIrTGgREREREREREZFeYUKLqJBbu3YtZDKZypeRkREcHR3RpEkT/Pbbb4iJidF1uPnG19cXMpkMHh4eug6lUFE8PgqzN2/eYNSoUahQoQLMzc2lmNeuXZun69F0nJw6dUpab3BwsMrycXFxmDx5Mjw9PWFpaSkt7+vrq7Tcrl270LJlSzg5OcHQ0JDHZh6S7/MhQ4ZotbyHhwdkMhmaNm2aaV5wcLBU36lTp/IkvsTERKxfvx59+/ZFuXLlYGdnBxMTEzg7O6Nhw4b48ccfcfny5TxZF2mWH+8vaabNeTQ/6du5NzQ0FLt378aECRPQvHlz2NjY5Nv1L781bdo0W+dmylphaMOtXLkSMpkMX3zxhcr56r6DZHzt3LkzxzHIr+MZ21qU7lPdP4sXL4ZMJkO3bt1yVQ8TWkR6LDU1FVFRUThz5gzGjx+PqlWrIigoSNdhESl5//49GjZsCD8/Pzx8+BAJCQm6DkmltLQ0tG7dGrNnz0ZQUBA+fPigcrnff/8dPXr0wPHjxxEZGYm0tLQCjrRw+ZySCjt37kS5cuUwePBgbN26FY8fP0ZMTAySk5MRERGB8+fP47///S/q1q0LHx8f3Lt3T9chkx7gDzba0cdzb6NGjdC9e3fMmzcPJ0+eRFxcnK5DIpLExcVJSZLCmiz5VM+PhSGZqWvDhw9H0aJF4e/vj8DAwBzXw4QWkR45ePAg4uLipFdYWBjOnz+Pr776CjKZDC9fvkSnTp2QmJio61CJJJs3b8bTp08hk8mwevVqhIaGSsfwgAEDdB2e5NixY7hw4QIAYMaMGXjx4oUU56RJk6TlZs+eDQBo3Lgxbty4gejoaMTFxeHu3bs6iZsKxq+//oqePXsiJCQE5ubmGDVqFI4ePYrg4GBERkbi/v372Lp1K3r16gVDQ0OcPn0ahw8f1nXYRJ8MfT732tnZoWXLlujVq5euQyGSzJ07F2/evEGnTp1Qq1YtjcuuXLlS6TtIxlfXrl0LKGr6VJiZmWHChAkAgJ9++inH9RjlVUBElP/Mzc1hZWUl/d/Kygqurq6oX78+rK2tsXjxYjx79gz+/v7o06ePDiMl+p+bN28CAKpVq4avv/5aZ3E0bdoUQgi18+Vx2traYsqUKSqXCQ8Px6tXrwAA48aNQ/Xq1fM+UMozHh4eGt9zbW3fvh2//PILgPTj+J9//kHx4sWVlnFwcECFChXQu3dv3L9/H8OGDcv1ekmzvHp/qfDT13Ovn58fypcvj/Lly0u9WLdv367rsIgQFxeHpUuXAgBGjRqV5fKmpqZK30Hyki5uX9Ynn/L++eqrrzBp0iRcvHgRR44cQevWrbNdB3toEX0ivv32W+lvjt9ChYn81j07OzvdBpIFbeJUvA2xsG8P5Y24uDjp/Orq6orjx49nSmZlVLFiRZw4cQLt27cviBCJPnn6eu794osvUKFChc/6tiIqnDZu3Ij379/Dzc0NzZo103U49JmytLREly5dAACrVq3KUR1MaBF9IkqUKCH9rW7sH7lTp05h4MCBKFWqFMzNzWFjY4MaNWpgypQpiIqKUlsu40CmGzZsQJMmTeDg4ABzc3NUrlwZU6dOxfv377OM9+nTp/jxxx9Ro0YN2Nvbw8zMDKVLl0abNm2wYsUKREREaCz//PlzjBw5EqVLl4aZmRmcnJzQsWNHnDlzRm2ZIUOGKA0effXqVfTt2xfu7u4wNzdHuXLlMGnSJKXB9RMSErBo0SLUqlULtra2sLa2ho+PDw4dOqR2PWlpaThx4gTGjBmDhg0bomTJkjA1NYW9vT3q1KmDadOmITIyUm35jPfVv3z5EmPHjkWFChWkgcqz82vN8uXLpcFzBw0ahJSUFK3LysXHx2P+/Plo0KABHBwcYGpqCnd3d/Ts2VPtbVXyQSzlx0tAQIDSAKKqBvHOSkJCAn799Vd4enrCwsICjo6O8PHxwcaNG7Msq24wY/lAt/LxI54/f64Up4eHh/SeKI7h0KxZM6XlVI0fdePGDXzzzTcoX748rKysYGlpicqVK2Ps2LEICQlRG2vGAUC3bt2K1q1bo0iRIjA0NFQ5KO/evXvRo0cPFC9eHGZmZrC3t0f9+vUxf/58xMfHq1xPxvGvUlJS4Ofnh7p168LW1haWlpaoWbMm/vvf/yI5OVllnKVKlVK7T3Q9rlZejO+1atUqREdHA0i/5cnJyUmrcsbGxihfvny21pXxGI2NjcXUqVNRuXJlWFpaokiRIujSpQuuXr2qVO7EiRPo3Lkz3N3dYWZmhvLly2P69Okax6sLDg7Gb7/9hvbt26NSpUqwsbGBhYUFSpcujUGDBuHixYsaY1W8HqSmpmLZsmWoW7cu7OzsYG1tjTp16mDZsmVITU1Vu37F9+bjx4+YPXs2qlWrBmtra9jZ2aFJkybYtGmTxm3Q9P5m/Bz9888/aNu2LVxcXGBmZoYyZcpg7NixCA8P17itQPr1rnHjxtL2Va9eHXPnzkVCQkKOB0qXl5s+fTqAzOceTePGHDp0CD169IC7uztMTU3h4OCAhg0bYsGCBVm2AQDgxYsXGDduHKpUqQJra2tYWFigXLlyGD58OO7fv6/1NmQkhMCWLVvQvn17FC1aFCYmJrC1tUXZsmXRqlUrzJ8/Hy9evNC6vpyce+UxdOjQAUWKFJEe2tCiRQv88ccfGq+BOTn36lrGmHfu3IkWLVrA2dkZVlZW8PLywh9//KHUm/HVq1f4z3/+gwoVKsDCwgLOzs7o1asXHjx4kKMYMo5zlJM2WlYyft4TEhIwf/581KlTB/b29ioH2k9ISMCyZcvQokULuLi4wMTEBC4uLmjXrh22bt2qsYfnnTt3MH36dLRs2RLlypWDpaUlrKysULFiRQwfPlyrMRJTU1Px+++/o06dOrCysoKdnR3q1q2r8dyoSN72atiwIRwcHGBsbAxnZ2dUrlwZPXv2xOrVq9Ve37MiTx707dsXBga6TQmoGvQ8N+fHJ0+eYMyYMahatSpsbGxgbm6OsmXLYtiwYRrft4wPPjh8+DC6dOkCd3d3GBkZKbVbk5OTsX//fgwfPhx169aFu7s7TExM4OjoCG9vbyxcuFDleyM/jocOHSpNUzXIflb7J6PIyEhMmTIFXl5esLOzg5mZGTw8PDBo0CBcunRJbbmM168PHz5I12IrKyvY2NigQYMG+PvvvzV+XiIiIjBlyhTp+5KxsTFcXV1RtWpVDBo0CBs3blR77pUPP7Jv3z6EhYWpXYdagogKtTVr1ggAAoA4efKk2uXu3r0rLTdr1iyVyyQkJIiBAwdKy6l6ubi4iIsXL6osL1/mzz//FD179lRbh5eXl4iPj1cb68KFC4WRkZHGOKZNm6ZUZtq0aQKAKFmypAgICBB2dnYqyxkYGIiNGzeqXO/gwYMFAOHj4yPWr18vjI2N1cYfExMjIiIiRP369VUuI5PJxLp161SuZ8+ePRq3DYAoUqSIuH79usryiu/5+fPnhb29fabyz549y7SsKpMnT5bm//jjjyItLU3t+6LOnTt3RIkSJTRuz8CBA0VSUpJSuZIlS2os4+Pjk6043r59Kzw9PdXWN3jwYKXjJKOTJ09m2n9CCOHj46MxzpIlSyrtZ3Uvxc9nWlqaGD9+vJDJZGqXt7S0FPv371e5rfJ9N3XqVNGvXz+V2yoXHR0tWrdurTG2MmXKiEePHmVaz7Nnz6Rl/vnnH9G4cWO1dbRr106kpqaqjFPb/aINVduoiTwGVceT4vZlNw45+TnA0tJS43ktLygeo4GBgaJs2bIq96mZmZk4evSoEEKImTNnqt33rVq1yvSeyak7hyqe43799Ve1scqX++OPP0TLli01fs7fv3+fqbzie+Pv7y+qVaumto4+ffqIlJQUjXWoen/lx8a0adPEuHHj1Nbv4eEhXr16pXI7k5OTRY8ePdSWrVmzptI5X/HckhXF91vT+UdRYmKiynNCxu25d++e2vXu2LFDmJmZqS1vaGgoli1blmXMGbc1JSVFdO7cOctt+u2337TeR9k998bExIjmzZtrXL5mzZpq3+/snHtzQnH/rVmzJld1ZYx52rRpYvjw4Wq3++uvvxZCCHHlyhXh6uqqchlbW1tx69YtleuRXytV7YO8aKNlRfHzvnPnTlG1atVM9Svu06CgIFGqVCmNx0L79u1Vnp+io6OzPO6MjY3F+vXr1cYbHx8vmjVrprZ8y5YtxR9//CH9P6NXr16JcuXKZRnH5cuXs70vHz58KJU/duyYxmUz7tvExMRsry8risewXE7Oj0IIsWTJErXtewDCyMhI/PHHHyrjUDzGJ0yYkKmsYjtj8eLFWcZXoUIFERwcrLQOxeNY0yur/aMoICBA5XcFxdeECRNUllXcz+fPnxeVK1dWW8e3336rso47d+4IFxeXLLcpPDxcZfnExERhamoqAIjff/9d5TKaMKFFVMhpm9BSbKyrS0j17t1balB8++234ty5cyI8PFy8fv1a7Ny5UzqJOTs7q2zsyesvU6aMMDAwEOPGjRM3btwQkZGR4s6dO+Krr76Slvnll19UxvDf//5XWqZs2bLi77//Fk+fPhVRUVHi0aNHYtOmTaJLly5ixowZSuXkjSU7Ozvh6OgoqlSpIrZv3y5CQ0PF27dvxY4dO4Sbm5sAIKytrUVkZGSmdcsTWm5ubsLU1FS0aNFCnDx5UoSHh4snT56IiRMnSrFNnjxZdOrUSVhZWYnffvtNPH78WERGRopjx46JihUrCgDCxsZG5Xr2798vfHx8xKJFi0RAQIB4/PixiIiIEEFBQWLVqlWifPnyAoAoVaqU+PjxY6byiu+5u7u7KFasmPj777/FixcvxNu3b8XRo0dFdHR0pmUVpaSkiK+//loA6V9MFyxYoPL9yEpkZKRwd3cXAISJiYmYNm2aePDggYiIiBCnT58Wbdu2ldb/ww8/KJWNj48XcXFxon///gKA8Pb2FnFxcdLrw4cPWseRlpYmmjZtKq1r+PDh4ubNmyIiIkJcvHhRSrDKG6/ZSWh9+PBBxMXFSe9/iRIllOKMj48XycnJIi4uTty5c0eq4+DBg0rLKX7h/vnnn6XlevXqJY4fPy7evHkj3r59Kw4dOiQaNGggAAhzc3Nx+/btTLHKGy/yfT948GBx8eJFERERIR4/fiwCAgKEEOlftr29vQUAYWpqKiZMmCCuXr0qIiMjRUhIiFizZo0oVqyY1LDK2HBXbFiVKVNGmJubixkzZoh79+6JqKgoce3aNdGpUydpmdWrV2d6jzXtk4z7RRvyugpDQuvDhw9Swzi7CdicUDxGS5UqJVxdXcUff/whXrx4IcLDw8WuXbtEkSJFpPnbtm2TjrHz58+LyMhIcf/+faVzccb3TM7Ly0uMHTtWHDhwQNy6dUuEh4eLZ8+eicOHD4vu3btL5Q8dOqSyvGKcAMTIkSPFrVu3Mn0mAYh+/fplKq/43pQqVUoYGxuLyZMni/v374uIiAhx6tQppcTEpEmTNNahKaFVpkwZAUAMGTJEXLhwQURGRorHjx+LiRMnSknn/v37q9xOxS81rVq1EqdPnxYRERHi4cOHYvr06cLU1FSqP+O5JSspKSkazz3y848ixYRFmzZtREBAgIiIiBAPHjwQvr6+wsTERAAQxYsXF+/evcu0zrNnzwpDQ0MBQBQtWlT8/fffIiQkRISFhYldu3ZJ1ycAYteuXZnKa0po/fnnn9K8Hj16iICAAPHy5UsRFhYmrly5IjZs2CA6dOggFi9erPU+yu65t127dtJy/fv3F5cuXRIRERHi9u3bYvTo0dL7XatWrUw/wgih/bk3p/IzoaX4WZS3zW7cuCE6duyo9J6WKFFClClTRmzZskW8evVKhIWFiTVr1ggrKysBQDRq1EjlerRJaOWmjZYVxc+7u7u7MDMzE9OnTxf37t0TkZGR4urVq+LOnTtCCCFCQkKEk5OTdJwvW7ZMPHjwQERFRYn79++LmTNnSkndAQMGZFpXdHS0qFKlivjll1/EkSNHxJ07d0RERIR49OiR2LNnj2jRooXULlKXABw0aJAUb/fu3aXj6ObNm2LEiBFK71nGNpwQQgwYMEBqs0+aNElcv35dvH37Vjx//lycPXtWLF68WNSuXVtcuXIl2/ty9erVUvtQ3p5URx5f+fLlpaSJkZGRKFOmjPjqq6/U/jibHaoSNjk5P65YsULpfP3PP/+IV69eSW3WDh06SNt95MiRTHHIj3H5579Dhw4iICBAhIeHi+fPnyuVWbFihWjXrp1YtWqVCAwMFM+ePRPh4eHi5s2bYsGCBVId9evXV1pHWlqaiIuLEytXrpRizbhdcXFxWe4fucePH0ufXRsbG7Fo0SLx9OlT8fbtW3H48GFRp04daT0LFy7MVF7xnFSmTBnh4OAglixZIn3vCQwMFA0bNpSWkf+YpkjeDjU3Nxfz58+XPi9Pnz4VAQEBYvbs2aJSpUpqE1pCCFGvXj0BQPTu3VvtMuowoUVUyCkmLDI24t68eSMuXLggvvnmG2FgYKCxUe7v7y/Vs23bNpXLxMTESI3ZkSNHZpovLw9ArF27VmUd7du3lxoQGT1//lz6clinTh0RExOjdruTk5OV/i9vLAEQnp6emU72Qghx6dIlaZmVK1dmmi9PaMkvUqq+aMuTL4aGhsLIyEgEBgZmWubBgwdSo3jVqlVqt0GduLg46QvQ33//nWm+4nvu6OgoXrx4obYuVQmtjx8/Sr+SGxkZafwFMStjxozR+OUmNTVVdOnSRVpGVXJGsWdcTu3atUtax8SJE1Uuo9j7MDsJLTlNvbvktEmQXLt2TTo+5s2bp3KZpKQkqTdUhw4dMs1X7Pk0fvx4tfEsWrRIAOm/FJ85c0blMooN+4w9IxS3x9DQUBw/fjxT+ZSUFKn3TMaGWcY6ctoLSpHil1FVjbyML3nvwfxIaCn+ij18+PBcb1tWFI9Ra2tr8fDhw0zLHD16VOk9UxdXo0aNBADRoEGDHMUyfvx4AUA0adJE5XzF64Gvr6/KZRQ/kxcuXFCal/FXalXXlOTkZKmHg5GRkQgJCVFbh6aElqYYv/vuO+mLaWxsrNK8ly9fSr2JW7ZsqfKasWXLFqXtyE5CS06bc48QQty4cUNaT5cuXVT2vlM8V/7444+Z5tesWVNKPDx58iTT/IiICOlLdtGiRTMlfTSdR7t16yaA9B5QOekNrIk2n2XFnnIZf2CRW7hwobSMn59fpvnanntzKj8TWgDE3LlzM81PTEyU3lNDQ0NRvHhxlV8s5UkOAOL+/fuZ5muT0MpNGy0rGc8ZBw4cULusvA1UqlQpERYWpnKZQ4cOSXXlpJeT/EfiQYMGZZp35coVqe6+ffuqLK/Yg16xDSfn4OAgAIgxY8ZkO7asyM/NFStWzHJZxRhVvWQymZgwYUKuPvOaEjbanh9fv34tJSm/++47tcv17dtXABBVq1bNNE+xx37v3r1ztU2hoaFST8UTJ05kmp/VHRaKNO0feRvc2Ng403VWiPQf5urWrSuA9N7dGT/7iuckS0tLKSmsKDY2VurV2adPH6V5MTExUvns/FiR0ahRowSQfgdLdjGhRVTIadPdHkjPqi9ZskTt7SXyk3T79u01rm/t2rUCgHBwcMh0IpevS9WXWrmdO3dKy2VMxMh/6ZbJZCpPmJooNpb+/fdftcvJu6B/+eWXmeYpJrRUfVEUIr13leIXanVq1aqldj3a+M9//qO2oaP4nqtqnKpbVggh3r17JyVKLC0txcGDB3MUnxDpiQz5xbht27Zql1P80jdq1KhM8/MioSX/Vc3Z2VkkJCSoXCY8PFzqnaDLhJZ8e6tUqaKxMXTq1Cnp8xAVFaU0T954sbe3V9mLT87DwyPLxpsQQvj6+goAokaNGmq3J2MjRdGCBQukL/0Zk835ldDK7is/EloXLlyQyqvrrp+XFI9Rdb1c09LSpASlhYWF2l/X/fz81L5n2pD3iDE0NFR5q6U8Tjc3N5U9XYRQ/kwOGzZMaZ7ie1OnTh21cdy6dUtabvbs2Wrr0JTQKlasmNp9oPjF8/Tp00rz5s2bJ827efOm2hjlPS7VnVuyou0Xtu+//156T16+fKl2OXnPWXt7e6U2geK2arq2bN26VVpu9+7dSvM0nUflvTk7duyocTtyQpvPsrwnkoODg9rbg9PS0qTe6NWqVcs0X9tzb07lZ0KrRIkSanvE/vjjj9J61fXajImJkX6MUfVDmLYJrZy20bKieAxoapM8ffpU2o7t27drrFPe8zsnSaMDBw4IQPUPuCNHjpSSDOoSaomJiVKPW3kbTpGNjY0AkOMe9prI27CqflDLqH79+mLZsmXi6tWr4s2bNyIxMVE8ffpULF++XOp1B6TfpptTeZHQki/n6Oio8bMbHBwsxXzjxg2lefJj3NDQUISGhuZkU5TIeyqr+iE2LxJab968kTo0aPrRTbEt89///ldpnuI5SVM7R379KV26tNL0qKgoqfzOnTuz3BZ1lixZItUTERGRrbIcFJ7oExEcHIxDhw7h9u3bmeZ9+PAB586dAwC0atUK79+/V/uqUqUKACAqKgpPnz5Vua527dqpjaNSpUrS3xkH9jt+/DgAoE6dOqhcuXL2NvD/mZqaonnz5lmuX9OggqVLl0a5cuVUzitTpoz0d5s2bdTWIV/u9evXKuenpKRg3bp16NSpE0qUKAELCwulwR5/++03AMhyANYOHTponK/o1atXaNKkCc6cOQNHR0ccP35c43uVldu3b0uDYffs2VPtcu7u7mjUqBEA5GrAV3WEEDh79iwAoH379jA1NVW5nJOTE3x8fPJ8/dl19OhRAOmftfj4eLWfNfmxKoTAtWvXVNbVvHlzmJmZqZz36NEjaQDqFi1aaPxcV61aFQBw69YtJCUlqaxPm891UlIS3r17l/VOoFxTd/6RyWQoXbo0AKB+/fqwtbVVuZz8HJWUlKT2YR9XrlzB8OHDUa1aNdja2koPj5DJZNK1IDU1FU+ePFEb5xdffAFjY2OV8xQ/k4GBgWrr6Natm9p5np6e0vlaUx2atGrVCkZGRirnabpmya+bpUqVQrVq1dTW37lz5xzFlV3y82vDhg3h7u6udrnevXsDAN69e4egoKBM5QHN5/QuXbrAxMQkU5ms1KhRA0D6gPXLly/Hx48ftS6bW4rXiQ4dOsDCwkLlcjKZTNp2xWtcRprOvYVVy5YtYWhoqHKeNm0bGxsbODs7A1DftslKXrTRtKGpbXTs2DEIISCTydCkSRON18bq1asDSD8XqnLixAkMHjwYFStWhLW1NQwMDKRzpDyG169fIy4uTqmc/FzVsGFDuLq6qqzbxMQEX3zxhdrtkH+eFixYgMOHDyMtLU3tstklfxCGg4NDlsueP38eI0eOhJeXlzSwfqlSpfDdd9/h+vXr0vl5zpw5ar83FAR528vHxwcpKSlq33NHR0fp4S7q3vcaNWrAzc0ty3V++PABy5cvR5s2beDm5gYzMzOltv6OHTsAZN3Wz6lz585Jx4Wmc3q9evVQsmRJAJrP6dq0AzN+du3t7aUHk02ePBnnz5/XLvgMFI9FbR7UoogJLSI9cvLkSYj0npUQQiA1NRURERH4559/ULt2bfz777/w9vbO9MSfp0+fSk8oGzt2LKytrdW+6tSpI5VTd0LRdJJXbERmfNKS/EuR/CKdE05OTmq/PCmuX9NTnjTFb25unq3lVDXYw8PDUa9ePQwZMgT79+9HSEiI2oa94hMVVZF/cdVGgwYNcPv2bZQoUQKBgYGoV6+e1mVVef78ufS3/MutOvL52XnCl7ZiYmKkLx2KXz5VyWmiNK+8f/8er169AgAsXrxY42dNsZGr7rOm6f1XbCB1795d47p69OgBIP0JnOqSGzn9XOeXwYMHK53v1L3kjbTs0vQlR06xgaXui29+0eb8o+25TNX5Z/Lkyahbty5WrVqF27dvIzY2Vu0XJk3nKW0/k5rODXlRhyY5Pbbl66tYsaLG+rOan1fk52Rtz8eA8j6Tl5c/VVgdU1NTlC1bNlP5rIwdOxbFixdHamoqvv/+ezg5OaF169bw9fWVnqKaX2JjY6Vku7b7Rwih9omL2bn2Fhb53bbRRl600bShzbVRCIEiRYpovDYuWbIEQOZrcGpqKoYOHYoWLVpg/fr1ePDgAd6/f6/2KW8Zz5Hyz01u2ixz586FiYkJwsLC0LZtWxQtWhQ9e/bEokWLcOvWLY31ZiU7CS1NXFxcpH2YnJyM7du356q+3JC/77t379b4nltbW0tPUs9J20vu0aNHqFq1Kr7//nscOXIEr1+/RmJiospls2rr51Ret9O1uVaq+uwuXLgQMpkM9+/fR8OGDVGiRAkMGDAAv//+Ox49eqQxLjlHR0fpbya0iD4jBgYGcHR0RIcOHXDy5ElUqFAB79+/x9ChQ5UeB5zTE6m6R76r+6U7o4wX/tjYWACAtbV1juLJzboVqfsFMyfLqVrPoEGDcO3aNRgZGWHUqFE4evQonj17hsjISMTFxSEuLg4TJkwAgCwb+Op+ZVZF3pg3NTWFjY2N1uXUUfzF0crKSuOy8vc046+UeUExwZBVHFnNz295/VnT9P4Xls+1vtLU2JVzd3eXvpxp84j2vKTN+Ufbc1nG92zbtm2YPXs2hBBo3LgxNm3ahDt37iA8PByxsbGIi4tT6u2r6Tyl7Wfy48ePah9Tr20dOT2/5PTYlp97LC0tNZYrqPOOfPu1PR8rlslOecU6srPP7ezscPnyZYwcORJ2dnb48OEDjh49iunTp6NZs2Zwd3fH4sWL8+UckpPrVcZyirJz7S0s8rtto42Cuo7k9bUx43VxwYIFWLt2LYD0Xqi7du3C/fv3ERERIbXjDhw4IC2f8RwpP3fkps3SoEEDXLhwAV26dIGxsTHevn2LnTt3Yty4cahevTqqVauGf//9NzubKZHJZDkqp0qrVq2k3ozqepsXhLx43+Wy+vynpqaiW7duePbsGSwtLfHLL78gICAAL168QFRUlHSM9O3bF0DWbf2cyut2uraf34x69OiB48ePo0WLFjAwMEBISAg2bdqEkSNHonz58vD29salS5c01qF4Tsju8cmEFtEnwtzcHP379weQnn2/ePGiNE/xJOfv769VrwchBJo2bZqnMcqTLPmR9Cgsnj59KjUw/Pz8sGTJErRs2RIeHh5wcHCAlZUVrKys8qWXy+HDh2FjY4NHjx7Bx8cHoaGhuapPsdGvmFRSRT4/N8lKdRSP3/j4eK3i0BXFWBctWqT1Z23IkCG5Wtf169e1XpeHh0cebOnnwcLCAl5eXgDSb00oqN5p+W358uUA0m+HOXXqFPr164fKlSvDyckJ1tbWsLKyknr1ZkXbz6S5ubnaL9La1pEf5xdN5J+xwnLekW+/tudjxTLZKa+4THb3uaurK5YtW4aIiAhcvnwZfn5+6Nq1K8zNzfH27VuMHTsWY8eOzVad2sjJ9SpjOfo0yD+3tra2Wl8XM/ZakZ8je/fujX379qFbt26oUKECHB0dpXacut44ijHk9txRs2ZN+Pv74927dzh+/DhmzZqFJk2aQCaT4fbt22jfvj38/f2z2iWZyG8tVddjOzuMjIyknl4F3ZNZkXyfjx49Wuv33dfXN0frCggIkG7n3rlzp/S+FC9eHPb29tIxktX7n1uFpZ0OAM2aNcOxY8cQGRmJgwcPYvLkyahVqxYA4OzZs2jcuLHSd9OMFI9F+fGpLSa0iD4hRYoUkf5W7Ibq4eEBA4P0j7sufz2R38Jw48YNncWQ3xS3Tf7LjCqqxjrLrQYNGuDIkSOwtbXF48eP4ePjg5CQkBzXp5j4uHPnjsZl5Rf2/EiW2Nraws7ODkDWvWQKuhdNRra2tlK36fz+rCmOiaLLz7W+0tTIVdS9e3cA6V9MtmzZootQ85z8PNWrVy/p2pCRtucobT+Tms4NeVFHfpCvL6vxT/JrfJSM5PFoez5WLKP4d0JCgsaxbhITE6XbRHK6zw0NDVG7dm18//332L17N0JCQtCgQQMAwLJlyxAZGZmjetWxsbGBvb09AO33j0wmk8Z+oU+H/NoYExOTozGdoqKipLZTTttx8s9NXrVZLC0t0bx5c6kn0I0bN+Do6AghBKZPn65VHYryMqGVnJwsfZ7ln0FdkL/vBdEekl9D7e3t0bZtW7XL5UdbX1FhaacrsrOzQ7t27TBz5kxcuXIFx48fh5mZGZKSkjBnzhy15ZjQIiIAwMuXL6W/FTPwtra20nhKGzdu1PqX97zWqlUrAMDly5d1nnjIL4q/2Km7vebFixc4ffp0vqy/Xr16OHr0KOzs7PDkyRM0bdpU7RghWalataqUSNq5c6fa5UJDQ6XBeBs3bpyjdWkik8mkQecPHjyodlDzyMhIBAQE5Pn6s6t169YAgL179+ZJY1GdKlWqSOMdrFmzJt/WkxXF8VLUHfP67Ntvv5UGXv/ll1+ksTeykpKSgocPH+ZnaDkmP09per82bNigVV379+9XezuF4mfS29tbbR2aehjcuXNH2o+a6sgP8vPO06dPlZJEGe3duzdX65F/hrL6/MjPr+fOnZPG6lNl27ZtANK/bMkfCKFYHtB8Tt+zZ490ns2rc7qjo6PUMys1NTXPPxsymUw6Pg4cOKB2DCghhDRQs6enp3SNo0+H/BoMAH///Xe2y2vTjktLS8PmzZvV1iE/Fs+ePYu3b9+qXCY5ORn79+/PdnwAUK1aNenhDzlpT8vHU9L0wA9tHTx4UNpn8h7NeUnb86P8fT937ly+/8igzTX07NmzePbsmdr5edF2atiwodTzWdM5/eLFi1JHh/xop2vSvHlz6UERmo5V+bFYpEiRbI/txoQW0SciNjYW69evB5A+tlbdunWV5v/4448AgGfPnmHUqFFZPi0lPy4GI0aMgImJCYQQGDp0qMbusfk5eGx+UhxIUtWXnOTkZAwbNixfv/jXqVMHx44dg729PZ4+fYqmTZsq9djTlqGhIYYOHQog/alV+/bty7RMWloavv/+e+n9GjZsWO6CV+PLL78EALx9+xYzZ85UucxPP/2k8RaAgjJu3DgA6Z/JIUOGZBlTTj9rMplMWldgYKDGX76A9AbT48ePc7QuTRwcHKTxDjR9ydZXNjY2WLFiBQDgzZs3aNGiRZY9Hx89eoQWLVrg4MGDBRFitsnPU/v27VM5ls26detw7NgxreoKDQ3FvHnzVM5T/EzKP8OqXLx4EZs2bco0PSUlBWPGjAGQflvLoEGDtIopr/Tv318aU+THH39Ued7esWOH9DTEnJI/cSs8PFzjte+rr74CkP5ZHjVqlMr3bvfu3dJt71999ZVSDzwvLy/UrFkTQPqA06oGB46MjMTEiRMBAEWLFkXHjh213o779+9rnK/45VlxAOC88vXXXwNI/6X/l19+UbnMokWLcPfuXQDAN998k+cxkO6VL19eOm4XLFiQ6UFJGcXGxio91dHFxUW6fU1dsnrGjBkar93ytlNycjJ++uknlcv8+uuvap8mGR8fn+V1Rv55yslnSf702QcPHmgce0rxh3JVQkNDMXr0aADpCZpevXplO5asaHt+HDlyJMzMzJCamoqBAwdK4/aqk9X5ShP5NTQ2NhYnT57MND82Nhbfffedxjrk2wXkvO3k7OyMTp06AQD+/PNPlU9tTEhIwKhRowCkPxBk4MCBOVqXOhERERp73KampkrXGk3H6oULFwAgR08rZ0KLSI98/PhR6UlccXFxePHiBbZt24ZGjRpJJ4yvv/4aLi4uSmW7d+8ujbG1cuVKNGnSBDt27MDz588RHR2Nly9f4uTJk5g+fToqVaokJcDykru7OxYuXAgg/QtMrVq1sHbtWgQHByM6OhpPnz7F9u3b0bNnT8ydOzfP118QateuLV3oRo8ejaVLl+LJkycIDw/Hv//+Cx8fHxw5ciTfn8ZXq1YtHD9+HA4ODnj27Bl8fHxy9ISwyZMnS4+H7927N2bOnIlHjx4hMjISgYGB6NChA/bs2QMA+OGHH5R6A+Slrl27SmO6zZo1C9999x1u376NqKgoXLlyBX369MHatWtRqlSpfFl/dtSuXRuTJk0CkN57pXbt2li7di2ePHmC6OhovH79GmfPnsVvv/2GOnXqSLe05cSoUaOk/TJp0iR88cUX+OeffxAaGoro6Gg8f/4chw8fxs8//4zSpUtj8eLFebCFyszNzaVfe5cvX467d+8iMTERKSkpSElJ+SQGke/bt690W8etW7dQsWJFjBkzBsePH0dISAjevXuHR48eYceOHejfvz8qV66cb70w84L8l/2AgAD069cPV69eRWRkJG7duoVx48bhq6++0voc5eHhgSlTpmDUqFEICgrK9JkEgH79+qF+/foa6xg6dCimTZuGR48eISoqCmfOnEHbtm2lxNr48eNRrFix3G14Nrm5uUlfRo8cOYL27dsjMDAQUVFRePz4MWbNmoWBAwcq3f6bE7Vr1waQ/qv/rFmz8PbtW+nzo5hEq169OoYPHw4A2LVrFzp27IizZ88iMjISjx8/xowZM9CvXz8AQPHixVUmdZYtWwZDQ0O8e/cO3t7eWLduHV69eoW3b9/C398fDRs2lHoVLFu2TOMT6zJq164d6tevj4ULF+L8+fMICwtDZGQkgoKCMHPmTEybNg1AemKtfPnyOdtZGnTq1El67PyiRYswePBgXL16FVFRUbhz5w7GjBkjvZ9eXl4FktB6+fIlLly4IL3kyTQgPSGhbh7lzooVK+Dq6orExES0bt0aP/zwg9RbKioqCg8fPsTOnTvx5ZdfolixYlIvcyD9xzz5dXn9+vUYPXo0goKCEBkZicuXL2PIkCGYPn26xnNkrVq1pAT8hg0b0KtXL1y+fBlRUVG4ffs2vv/+e/j6+qpts4SHh6N06dLo3Lkz1qxZg9u3byMyMhJhYWE4d+4cBg0ahMOHDwPQfFukOvKkgRACly9fVrtcp06d0Lp1a6xatQrXrl3D27dv8e7dOwQFBeG3335DjRo1pB9Mp0yZki9tMG3Pj+7u7vDz8wOQfidI9erVsXz5cty/fx/R0dF48+YNLl++jGXLlqFZs2ZKT3XPrrZt20o9t/v27Yv169fjxYsXCAsLw86dO1G/fn0EBQWhQoUKauuoWbOm1Ltq5syZCA0NRXJysrRt2vrtt9+kcS9btWoFPz8/PH/+HBEREThy5Ah8fHykAdlnz56tlEjLC0FBQShevDj69euHLVu24P79+4iKikJoaChOnDiBTp06Sec2dcdqUlKSdBtnThJaEERUqK1Zs0YA0PrVs2dPkZCQoLKupKQk8f333wuZTJZlPd26dctUXj5vzZo1auN99uyZtNzJkydVLrNw4UJhZGSkcf3Tpk1TKjNt2jQBQJQsWVLj/ho8eLAAIHx8fLI1LzvxZ1VXQECAMDc3V7ttP/30k8btUXzPs5LVstevXxeOjo4CgChRooR48uRJlnVmFBQUJEqUKKHx/Ro4cKBISkpSWV6b/a6Nt2/fiqpVq6qNYcCAARr368mTJ6Vlnz17lmm+NseYtsdHWlqamDVrljA0NMzys+bl5ZWpfMmSJVV+DlSJjY0VPXr00Or8MG7cuBxtT1b7TtN5SlO9qsjLDR48WKvl5ftK1fGl7fZpa+vWrcLd3V2rfd2iRQvx4MGDbNWf1X6W8/HxyXIfaaorPj5e1KlTR23sVapUERcvXtS47+TzVq1aJZo1a6a2Lh8fH/H+/ftM5RXfm927d2v8bPfu3VukpKRorENVjNp+jjRd25KTk0X37t3Vxla9enXh7+8v/T8kJETjutRp2rSpyvozno8SExNFv379NB57Hh4e4t69e2rXtX37dmFmZqa2vKGhoVi2bJnKspqOK/n+ziq27H4uhND+sxwdHS2aN2+uMYaaNWuKV69eqSyfnXOvNuTXFW1eOb1GahOztu0KTXVpOu/kRRstK9k9nz98+FB4enpqte/37dunVDYsLEyUKlVK7fJNmjQRBw8e1Hi+jo+P13hubN68uVi1apXK90VxWzW9WrZsqfL8qg0vLy8BQPz4449ql6levXqWMRgZGYnp06fnKAa5rI5hbc+PQgjx119/aWyDy18ODg6ZympzbZXbsmWL2jaegYGBWLp0aZbHu3y+qld29k9AQICwt7fXuL0TJkxQWVbbdoe6c4hieU2vAQMGqLyOCyHEoUOHpGPp9evXamNQhz20iPSYTCaDlZUVKlasiMGDB+P48ePYvn07TE1NVS5vbGwMPz8/3LhxAyNHjkTVqlVhY2MDQ0ND2NnZoWbNmvj+++9x/PhxaQyO/DBu3Djcu3cPo0aNQuXKlWFlZQVzc3OULl0abdq0wcqVK/HDDz/k2/rzW5MmTXDp0iX06dMHLi4uMDY2RpEiRdCxY0f8888/+O233woslho1auDEiRNwcnLCixcv0LRp02yPmVClShXcvXsX8+bNQ/369WFnZwdjY2O4ubmhe/fu+Pfff7F+/fps/ZKfE87Ozrh8+TJmz56NqlWrwtzcHPb29mjUqBHWrFmj9Zg/BUEmk+GXX37Bo0eP8J///AdeXl6ws7ODoaEhbGxsULVqVXz11VfYv39/rm9Xsra2xo4dO3DmzBl8+eWXKF++PKysrGBkZARHR0fUq1cP48ePx/nz57FgwYI82kJlQ4YMwY4dO9CiRQs4Ojpq/fh4fdO7d288fvwYa9asQa9evVCmTBnY2NjA2NgYTk5OaNCgAX788UdcvXoVx44dy5deKHnBwsICp06dwrRp01CxYkWYmprC1tYWNWvWxOzZs3Hp0qVMvXzVMTExwZEjR7Bo0SLUqlUL1tbWsLS0RK1atbB06VIcP34clpaWGuuwt7fHxYsX4evriypVqsDS0hI2Njbw9vbGhg0bsHXrVp0dU0ZGRtixYwfWrVuHRo0aSdvn6emJmTNn4vz580qxyZ/mm1379u3DpEmT4OnpCUtLS7WPLTcxMcGmTZtw8OBBdOvWDW5ubjA2NoadnR0aNGiA+fPn486dO6hYsaLadfXs2RMPHjzAmDFjUKlSJVhaWsLc3Bxly5bFN998g9u3b2PkyJHZ3obDhw9j6dKl6NKlCypVqgR7e3sYGRnByckJTZo0wcKFCxEUFJSvnwtbW1scO3YMmzdvRrt27aRrsKOjI5o1a4aVK1fi0qVLKFq0aL7FQIVDuXLlcP36dWzatAldu3ZFsWLFYGpqChMTE7i5uaFFixaYP38+Hj9+jC+++EKprKurKy5fvoyxY8eiVKlSMDY2hoODAxo0aAA/Pz+cOHEC5ubmGtdvYWGBo0ePYtmyZahduzYsLS1hbW2NWrVqYdGiRTh8+DBMTExUli1RogTOnj2L6dOno0WLFihTpgwsLS1hYmKCYsWKoVOnTti2bRuOHDmS5flVnW+//RYAsGXLFrXDkCxcuBATJ05Es2bNULp0adjY2Ci1LX7++Wfcv38fU6dOzVEM2tL2/Aik397+7Nkz+Pr6okGDBlKbxNLSEhUqVEC/fv2wbdu2HA3FoahPnz4ICAhAx44dYW9vL703vXr1wunTp7X6HrN69WrMmzcPtWvXhrW1tcbt0qRJkyZ4+PAhJk+ejBo1asDGxgampqYoWbIkBgwYgAsXLmQ5LEVONWzYEMeOHcPEiRPRuHFjeHh4wNzcHKampvDw8EDv3r3x77//YsOGDWqv4xs3bgSQ3iNQ8QFn2pIJ8QncC0BEREREBUbe8F6zZg2GDBmS7fLBwcHS7SknT56Ubp3VR4sWLcK4ceNgY2OD6OjoHH8pISIqKO/fv4ebmxvi4uJw5MgR6cFNRAUpPj4erq6uiI+Px+HDh5Ue6qAt9tAiIiIiIsoh+cDRXl5eTGYRkV6wsrKSHrqxdOlS3QZDn62//voL8fHxqFu3bo6SWQATWkREREREKiUnJyMuLk7t/M2bNyMgIADA/wbbJyLSB+PHj4erqyv++ecfXL16Vdfh0GcmISFBegiY/KFhOcGEFhERERGRCjExMShdujQmTZokPSUtMjISly5dwujRo6UnmZUrVw6DBw/WcbRElJ88PDwgk8ly9NTowsjKykp6gq+vr6/SvFOnTqFZs2awsbGBTCb7pLabCoeVK1fi9evX6Nq1K7y9vXNcDxNaRERERERqREREYM6cOfD29oarqyucnJxQr149LF26FKmpqShRogT27t2b5SDRRJ8beQJIJpNhz549apdr2bIlZDIZ1q5dW2CxUbpvv/0WQgjs379fmnbnzh20adMGp06dgpOTExo1aoRGjRrBzMxMh5HSp2bMmDEQQmD37t25qscoj+IhIiIiIvqk2NnZYf369Th8+DCuX7+ON2/eICYmBra2tqhUqRI6deqEESNGwMrKStehEhVqvr6+6Ny5M8eZ0wN//fUXkpKS8MMPP3B8LSr0mNAiIiIiomzJ7UOyPTw8cl1HQTAyMsLAgQMxcOBAXYdCpLcMDQ1x8+ZN7Nq1Cz169NB1OJSF+/fvAwDatWun40iIssZbDomIiIiIiChf9O3bFwAwffp0vUhkf+4+fvwIALyNmvQCE1pERERERESUL7788kt4eHggKCgI27dv17rckCFDNI6t5evrC5lMlmlAc8XpkZGR+O6771CsWDGYm5ujevXq2Lp1q7Ts8+fPMXToULi5ucHc3By1atXCgQMHsozt8OHDaNq0KWxtbWFjY4NWrVrhzJkzWZbp1KkTXF1dYWpqimLFimHo0KF48uRJpmWDg4Mhk8ng4eEBAFi9ejXq1KkDa2vrbN22mZycDD8/P9StWxc2NjawtLRE9erVMXv2bHz48EFpWfn+PnXqFACgWbNm0hhoQ4YM0XqdHz58wIIFC1C/fn3Y2dnBwsIC5cqVw8CBA6WnwiqKj4/HrFmzUK1aNVhaWsLGxgb16tXD8uXLkZKSkmn5U6dOQSaToWnTpkhJScH8+fPh6ekJCwsLaX/J3b9/Xzr+TE1N4ejoiA4dOuDEiRMqY4+MjMRPP/2EihUrwszMDJaWlvDw8EDbtm3x+++/a70PqODwlkMiIiIiIiLKF8bGxvjll18wbNgwTJ8+HT179oSBQf73q3j37h3q16+PFy9eoGrVqgCAW7duoW/fvkhKSkK9evXQpEkTvH//HpUqVUJycjKuXbuGzp07499//0XLli1V1rt161ZMmjQJ9vb2KF++PJ49e4Zjx47hxIkT2Lp1K3r27JmpzJgxY7BkyRIAgIuLC6pUqYInT55g7dq12L17Nw4dOoSGDRuqXN+IESOwcuVKFC9eHBUrVsTjx4+12v6PHz+iY8eOUvKmUqVKMDY2RlBQEG7duoWdO3fi2LFjcHR0BACUL18ejRo1wu3btxEbG4uqVavC1tZWmqeNFy9eoG3btrh37x6A9CfAWltbIzg4GBs3bkRISIiUMAOA8PBwtGjRArdv34aBgQGqVq2K5ORkXLp0CZcuXcLevXuxb98+lQPSCyHQpUsXHDhwAGXKlEHlypWRkJAgzd++fTsGDhyIpKQkWFtbo3LlyggLC8PBgwdx6NAhLFmyBD/88IO0fExMDOrVq4cnT57AxMQEZcuWhZmZGV6+fIkjR47gwoUL+O6777TaD1SABBEREREREVEeKlmypAAgzpw5I5KTk0Xp0qUFALFp0yal5Vq0aCEAiDVr1ihNHzx4sMrpctOmTRMAxLRp01RONzY2Fs2aNRNv3ryR5s2dO1cAEEWLFhV169YVffr0EbGxsUIIIVJTU8W3334rAIi6deuq3R4jIyMxbtw4kZSUJIQQIjk5WYwfP14AEDY2NuLVq1dK5VauXCkAiFKlSomTJ09K01NSUsSsWbMEAFGsWDHx8eNHad6zZ88EAGFoaCgsLS3F3r17pXkfPnxQuT8y+vHHHwUA4ebmJq5evSpNf/TokahYsaIAIHr16pWpnI+PjwCgFKs2UlJSRK1atQQAUbt2bXH37l2l+devXxe///670rTu3bsLAKJKlSri8ePH0vTLly8LV1dXAUCMHz9eqczJkyelfePi4iLOnTsnzZPvw5s3bwpTU1NhZmYm/vjjD5Gamiots2/fPmFjYyMMDQ3FjRs3pOkLFiwQAETr1q1FZGSk0jqfP38uFi1alK39QQWDCS0iIiIiIiLKU4oJLSGEWLNmjQAgKlSoIFJSUqTl8iuhZW5uLkJDQ5XmpaSkiGLFiklJrfj4eKX57969E2ZmZgJApqSGfHuqV6+uMh4vLy8BQEydOlWalpiYKIoUKSIMDQ3FtWvXVJaTJ3XWr18vTZMntACIhQsXqiynSUxMjLCwsBAAhL+/f6b5ly5dEgCETCZTSiQJkfOE1vbt2wUA4eLiIiIiIrJc/uHDh0ImkwkAKveNvD5LS0sp6SjE/xJaAMSuXbtU1t2tWzcBQCxZskTlfD8/PwFAfPnll9I0eTJTMXlIhR/H0CIiIiIiIqJ8NXDgQJQrVw4PHjzApk2b8n197dq1g5ubm9I0Q0NDeHp6AkgfrN7CwkJpvp2dHUqVKgUAePbsmcp61d12Jp9++PBhadr58+cRFhYGLy8v1KxZU2W5Tp06AYDK8aUAYNCgQSqnaxIYGIgPHz6gRIkS6Ny5c6b5derUQYMGDSCEwNGjR7Ndvyp79+4FkD5mmvw2Rk2OHj0KIQS8vb1V7pvu3bujWLFiiI+Px9mzZzPNt7W1VbltSUlJOHjwIAwNDdWO/aVqnxcvXhwA4O/vr3LsLiqcOIYWERERERER5StDQ0NMmTIFgwYNwsyZM9GvXz8YGeXf19EyZcqonO7s7Jzl/Hv37uH9+/cq51eqVEnj9IcPH0rTbt++DSB9kHdvb2+V5aKjowEAoaGhmeY5OTnByclJZTlN5DFUrFhR7SDyVapUwfnz55XizQ35uFn169fPVoyVK1dWOd/AwAAVK1bEy5cv8fDhQ7Rt21Zpfrly5WBoaKiy3oSEBJiYmKB9+/Yq6xb//7RNxX0+dOhQ/Pbbb1i7di0OHTqEtm3bonHjxmjWrBlKly6t1TZRwWNCi4iIiIiIiPJdv379MHv2bDx48AAbNmzA0KFD821dGXtfyckTPFnNlyc9MnJxcVE53dXVFQAQFxcnTYuJiQGQPvh5eHi4xng/fvyYaZqlpaXGMurIk3HqYgVUx5sbsbGxANJ7uWkjtzGq2zfyfZ6UlKSyZ5cixUHk3dzccP78eUyZMgUHDhzAunXrsG7dOgDpSbr//ve/aNCggcb6qODxlkMiIiIiIiLKd4aGhpg6dSoAYObMmRpv7coqsRQfH5/3AWpBXWLq7du3AABra2tpmpWVFQCgf//+EOnjV6t9KT79L7fk65XHpMqbN28yxZsb8nrkPc6ykl8xyut1d3fPcp9nPLYqVaqEnTt3Ijo6GidPnoSvry8qVqyICxcuoHXr1ggODtY6DioYTGgRERERERFRgejTpw8qV66MZ8+eYe3atWqXk/fAUZdAevz4cX6ElyX5rXXqppcvX16aJr+dLigoKP8DUyCP4d69e2oTgnfu3FFaNreqVKkCALhw4YJWy8vXe/fuXZXz09LScP/+faVltVGuXDkYGxvj9evXiIqK0rqcIlNTUzRt2hTTpk1DUFAQGjVqhPfv32PLli05qo/yDxNaREREREREVCAMDAwwbdo0AMCsWbOQnJyscjn5uEWXL1/ONO/ly5dKg68XpN9//13j9NatW0vTGjduDCcnJ9y8eTNPe2BlxdvbGxYWFggJCZEGa1d05coVnD9/HjKZDK1atcqTdXbp0gUA8Pfff2uVSGrdujVkMhkCAwNx/fr1TPN3796Nly9fwtLSEo0aNdI6DgsLC7Rp0wZpaWlYunSp1uXUMTQ0RJ06dQAAr169ynV9lLeY0CIiIiIiIqIC07NnT3h6euL58+dqxzlq164dAGDPnj04ePCgNP3169fo37+/zp5EFxQUhPHjx0uJuJSUFEyaNAlXr16FtbU1hg8fLi1rZmaGGTNmAEjfZn9//0w9poKCgvDzzz9nOd5TdtjY2GDEiBEAgO+//14pYfTkyRMMHjwYANCrVy+1g+NnV5cuXVC7dm28ffsW7du3x4MHD5Tm37x5EytWrJD+X7ZsWXTr1g1A+pMcnz59Ks27du0aRo0aJcWf3dsiZ86cCVNTU8yaNQtz587NND7Z69evsWTJEqxcuVKa9ssvv+Cvv/7KdMtkUFAQtm/fDgDw8vLKVhyU/5jQIiIiIiIiogIjk8mkXlqpqakql6lUqRK++uorpKSkoEOHDihdujRq1qyJEiVK4O3bt/juu+8KMmTJzJkzsWDBAhQtWhR169ZF0aJFMWfOHBgYGOCPP/6Am5ub0vIjRozAhAkTEBERgW7dusHJyQl169ZFrVq14OjoCE9PT8yfPz/PBmdXjLNZs2YIDQ2Fl5cXqlSpgho1aqBChQq4e/cuqlevjuXLl+fZ+gwNDbFr1y5UqFABFy9eRMWKFVGhQgXUrl0bTk5OqFGjBrZt26ZUZsWKFfD09ERQUBDKly+PGjVqoEqVKqhVqxZev36Nli1bwtfXN9ux1KhRA1u2bIGpqSkmTpwIBwcH1KxZE/Xq1UOJEiXg5uaGMWPGKI2JdefOHXz99ddwdHREuXLlUK9ePZQrVw6enp549eoVmjVrhoEDB+ZyL1FeY0KLiIiIiIiIClS3bt1Qo0YNjcusXLkSM2bMQJkyZRAaGorw8HB8++23OH/+vNZP08trffr0waFDh1ClShXcv38fCQkJaN68OU6ePIk+ffqoLDNnzhycPXsW/fr1g6WlJW7evIng4GAUK1YMX375JQ4cOIAWLVrkaZzm5uY4fPgwlixZgtq1a+P58+d4+PAhKleujFmzZuHcuXNwdHTM03WWKFECV69exZw5c+Dl5YVXr17h3r17cHBwwODBgzFz5kyl5Z2dnXH+/HnMmDEDlSpVwsOHD/H8+XPUqVMHfn5+OHjwIMzMzHIUS9euXXH37l2MHj0aHh4eePDgAe7evQsLCwt07doV69atw4QJE6TlJ0+ejAkTJqBOnTp4//49bty4gY8fP8LHxwfr16/HkSNHYGRklKv9Q3lPJtSNEkdERERERERERFQIsYcWERERERERERHpFSa0iIiIiIiIiIhIrzChRUREREREREREeoUJLSIiIiIiIiIi0itMaBERERERERERkV5hQouIiIiIiIiIiPQKE1pERERERERERKRXmNAiIiIiIiIiIiK9woQWERERERERERHpFSa0iIiIiIiIiIhIrzChRUREREREREREeoUJLSIiIiIiIiIi0itMaBERERERERERkV5hQouIiIiIiIiIiPQKE1pERERERERERKRXmNAiIiIiIiIiIiK9woQWERERERER5bnJkydDJpNBJpNh1qxZug6HckkIgcDAQPznP/9B/fr1YWdnBxMTE7i5uaF79+44efKkrkOkXHr27BlWr16NYcOGoXr16jAyMirUn18jXQdAREREREREn5Z79+7ht99+03UYlIdOnDiBli1bAgAMDAxQtmxZWFpa4tGjR9i9ezd2796NyZMnY+bMmTqOlHJqyZIlWLJkia7D0BoTWkRERERERLnUv1tXRL99o+swtGbn4opNu/3zpW4hBL799lsYGxvD29sbJ06cyJf1FLSevfsiPCpK12FozdnBATu2bcmz+oQQKFu2LMaNG4c+ffrA3t4eAJCUlARfX1/MmTMHs2bNQr169dCxY8c8W29B6dajC96G689nGABcnF2xe+eePKvPyckJHTt2RN26dVGnTh38+eef2LVrV57Vn9eY0CIiIiIiIsql6LdvsK5rc12HobXB/vmXZPrrr79w5swZzJs3D3fv3s239RS08KgoDJ+xSNdhaG3l1LF5Wl/dunVx7949GBkppxFMTEzw66+/4saNGzh06BBWr16tlwmtt+Fv0PnLJroOI1v2/n06T+ubPHmy0v+3bt2ap/XnNY6hRURERERERHkiPDwcP//8MypXroyxY/M2oUK6ZWNjkymZpahVq1YAgIcPHxZUSPSZYw8tIiIiIiIiyhNjx45FVFQUdu/eDWNjY12HQwUoISEBAGBubq7jSOhzwR5aRERERERElGvHjx/Hpk2bMGDAAPj4+Og6HCpAQgjs2LEDANCoUSMdR0OfCya0iIiIiIiIKFcSEhIwfPhw2NraYsGCBboOhwrY6tWrcf36dZiYmGDMmDG6Doc+E7zlkIiIiIiIiHJl1qxZePz4MZYtWwZXV1ddh0MF6Nq1axg9ejSA9OOgTJkyOo6IPhfsoUVEREREREQ5du/ePfz222/w8vLCiBEjdB0OFaBnz56hY8eOSEhIQL9+/fDTTz/pOiT6jDChRURERERERDn23XffISUlBStWrICBAb9ifi7CwsLQqlUrvH79Gh06dMDatWshk8l0HRZ9RnjLIREREREREeXY9evXIZPJ0KlTp0zzYmJiAADz5s3DsmXLULx4cVy+fLmgQ6Q8FhUVhVatWuHJkyfw8fHBjh07+FRLKnBMaBEREREREVGupKam4s2bN2rnv3//Hu/fv4eZmVkBRkX54f3792jfvj2CgoJQp04d7N+/H+bm5roOiz5D7A9KREREREREORYdHQ0hhMrX4MGDAQAzZ86EEALBwcG6DZZyJTExEZ07d8bFixdRpUoV/Pvvv7C2ttZ1WPSZYkKLiIiIiIiIiDRKTU1Fnz59cOLECZQpUwZHjx6Fg4ODrsOizxhvOSQiIiIiIiIijbZv3449e/YAAAwMDNCzZ0+VyxUtWhQ7duwowMgor5w9exadO3eW/v/+/XsAwJw5c7B48WJp+vXr11G8ePGCDi8TJrSIiIiIiIiISKPExETp70ePHuHRo0cqlytZsmRBhUR5LDk5GZGRkZmmf/jwAR8+fJD+n5qaWpBhqSUTQghdB0FERERERKTP+nfriui36gdFL2zsXFyxabe/rsPQKz1790V4VJSuw9Cas4MDdmzbousw9Ea3Hl3wNlx/PsMA4OLsit079+g6DJ1hQouIiIiIiIiIiPQKB4UnIiIiIiIiIiK9woQWERERERERERHpFSa0iIiIiIiIiIhIrzChRUREREREREREeoUJLSIiIiIiIiIi0itMaBERERERERERkV5hQouIiIiIiIiIiPQKE1pERERERERERKRXmNAiIiIiIiIiIiK9woQWERERERERERHpFSa0iIiIiIiIiIhIrzChRUREREREREREeoUJLSIiIiIiIiIi0itGug6AiPRfWloaXr16BWtra8hkMl2HQ0REnyghBOLi4uDm5gYDA/4um1O8bhMRUUHI7+s2E1pElGuvXr1C8eLFdR0GERF9JkJCQlCsWDFdh6G3eN0mIqKClF/XbSa0iCjXrK2tAQB3796Fu7u70rzU1FTcunUL1apVg6Gh4Wc1LzY2FsWLF0dISAhsbGwKZYyFZZ8Utji5XwrHPO4X7peM8969ewcPDw/pukM5o+m6rYmm96YwlctNWU2fr/xYH/dN4SmXm7LcN+px36j3Oeyb/L5uM6FFRLkmv13B2tpa5ZcrKysr2NjYqPzS8inPk7OxscmU0CosMRaWfVLY4uR+KRzzuF+4X1TNA8Db5HJJ03VbE22Oy8JQLrdlAdWfr/xYH/dN4SmX27IA940m3Dfqfer7Bsi/6zYHHyAiIiIiIiIiIr3ChBYREREREREREekV3nJIRHlmaLcuMDExgZ2LKzbt9td1OERERKSB/LqtLQGBxIREmJqZQgbtbx8p6HK5KZuWlooyzg7o3bYVDAy0v7WG+ybv18d9k//l2GYnfceEFhHlmT86N4O1mSkG+5/QdShERESUBfl1mzJqpesACjHuG/X0b9+wzU76jrccEhERERERERGRXmFCi4iIiIiIiIiI9ApvOSSiPDUx8BYSTMzQpk0blC5dGsuWLdN1SEREREREn72JgbcQnZQMOxNjzPGupnKZESNGICoqCg4ODlixYkUBR0iUPUxoEVGeeh73AZDJkJKSgqdPn+o6HCIiIiIiQno7PVUIvEtIwogTV5FgYobevXsrLRMVFYW0tDRER0frJkiibGBCi4jyVJoQ//s7LU2HkRARERERkZy8nS4ARCUkATIZIiIiVC/LdjzpASa0iChPGchkSP3/i6WBAYfpIyIiIiIqDOTtdBkAezMTRH1MhJOzs9Iy8h5abMeTPmBCi4jylK2pcfovPgDs7Ox0GwwREREREQH4Xzvd3swEK5rXwmD/E9i2bZvSMr1790ZERATb8aQXmNAiojxlZ2KMqI+JMDI2hoODg67DISIiIiIipLfTFf9VRd5+Zzue9AETWvRJ8fX1xfTp0zFt2jT4+vrqOpzP0hzvahjsfwIHTpwAAKSmpuo4IiIiIiIiUvdkQ0V8siHpE94YS4Xe2bNn8c0336BixYqwtbWFqakp3N3d0bFjR/z555+Ij4/XdYhEREREREREVICY0KJC68OHD+jduze8vb2xevVqPH/+HMWLF0e1atUghMCBAwcwbNgwlCtXDrdv39Z1uERERERERERUQHjLIRVKycnJaN26Nc6ePYsiRYpg3rx56NmzJ8zNzaVl7t69i6VLl+Kvv/7CkydP4OnpqcOICQBartkLA0MjGBgZommrNtJ0U2MjHNy/T4eRERERUUby67b2BIQQkMlkAGSFuFzu1pmUnAQTY5Nsl+O+yfv1cd/kb7mMbfasJCYkwt2tCHZu25qNdRLlHya0qFCaPn06zp49C1dXV5w/fx4eHh6ZlqlcuTJWrlyJAQMG8LGyhcQvKzfCwtIq0/Ql47/TQTRERESkibrrNhGROiunjtV1CEQSZgGo0ImJicHSpUsBAIsXL1aZzFLk7e2Nhg0bqqxnzJgxKFGiBExNTVG2bFnMnDkTKSkpmZb19fWFTCaDr68vwsPD8f3338PDwwPGxsYYMmSItFxycjL8/PxQt25d2NjYwNLSEtWrV8fs2bPx4cOHTPUGBwdDJpNJ2/Dnn3+iZs2asLCwgLu7O0aNGoW4uDgA6YOnL1y4EFWqVIG5uTmKFSuGCRMmICkpKVO9Hz9+xJYtW9CnTx9UqFABVlZWsLKyQo0aNTBr1iy144p5eHhAJpMhODgYhw8fRtOmTWFrawsbGxu0atUKZ86c0biviYiIiIiIiAoD9tCiQufAgQOIi4uDs7MzevTokaM6YmJi0KBBAzx69AhVq1aFoaEhnjx5gqlTp+LFixdYvXq1ynLh4eGoXbs2QkNDUaVKFdja2sLQ0BBAehKpY8eOOPH/T++rVKkSjI2NERQUhFu3bmHnzp04duwYHB0dVdb9448/4r///S/KlCmDMmXK4P79+/Dz88OdO3dw9OhR9OjRA3v27EGlSpVQsmRJPHz4EPPmzcPr16+xbt06pbquXr2Kfv36wcjICEWKFEGlSpUQExODO3fu4ObNm/D390dgYKDSLZqKtm7dikmTJsHe3h7ly5fHs2fPcOzYMZw4cQJbt25Fz549c7TfiYiIiIiIiAoCe2hRoXPu3DkAQKNGjWBklLOc6/Lly+Hs7Iznz5/j+vXrePbsGfbt2wdDQ0P8+eefuH//vspyq1atgru7O4KDg3Hz5k3cvHkTy5cvBwBMmTIFJ06cgJubG65evYq7d+/i5s2bePDgASpWrIgbN27gu+9U31oXGhqKv/76C8eOHcPjx49x+/ZtXL9+HY6Ojjhx4gS6d++OK1eu4Pr167h79y7u37+PEydOwMTEBOvXr8fdu3eV6itevDi2b9+Od+/eISQkBJcvX8bDhw8REhKCHj164Nq1a5g/f77a/TNlyhSMHTsWYWFhuHz5MsLCwjB+/HikpaXh66+/xuvXr3O03zPy/30+Ns+fAnNjA/Tr1w8jRozIk3qJiIiIiKjg+P8+H39NHQODtBS26anQYEKLCp3Q0FAAQKlSpXJch5GRETZt2gQ3Nzdp2hdffIHOnTsDAA4dOqS23M6dO1GsWDFpmpmZGWJjY7FixQoA6ckyLy8vaX7ZsmWxfv16AMCOHTvw5MmTTPWmpKTA19cXLVq0kKZVrVoV33zzDQBgz5498PPzQ40aNaT5TZs2Rbdu3QAAhw8fVqqvZMmS6NmzJ6yslMe9KFKkCNavXw8TExNs2rRJzd4BqlSpgoULF8LY2Fja7nnz5sHLywuxsbFYuXKl2rIAkJiYiNjYWKWXKlFhrxAfGw0AiIiIwNOnTzXWS0RERHlP2+s2EZE6UWGvkJaWChnANj0VGkxoUaEjH1PK0tIyx3W0bdtWKSklV6dOHQDqT8ItW7ZUSoLJBQYG4sOHDyhRooSUFMtYb4MGDSCEwNGjR1XW/eWXX2aaJk9gOTg4oEuXLpnm16xZU228aWlp2Lt3L0aOHIl27dqhcePG8Pb2RqtWrSCTyfDo0SOV43oBUNuTTD49YwItozlz5sDW1lZ6FS9eXOVyQqQBwP8/SSU9ZiIiIipY2l63iYjUkbfrAbbpqfDgGFpU6FhbWwOA2oHNtVGmTBmV011cXAAA79+/Vzm/UqVKKqc/fPgQAFCxYkUpOZNRlSpVcP78eWlZRc7OzrCxsVE5XVO88vkZ442Ojkb79u1x/vx5leXk3r17BwsLi0zT1W2nfLqqbVA0ceJEjBs3Tvp/bGysysaxTGYAIVKlxwPzaZREREQFT9vrNhGROvJ2PQC26anQ4JFIhY67uzsA4NmzZzmuQ13vLvnJVwiRrXLyhJI8IaaKq6srgP/1MFOkKqkE/K/nUlbzM8Y7btw4nD9/HhUqVMCuXbsQGhqKxMRECCEghJD2YXJyssp61W2Hpm1QZGpqChsbG6WXKuZW1kr/t7Oz01gvERER5T1tr9tEROootuvZpqfCggktKnQaNmwIIH1w+JSUFB1Hk04+VtXbt2/VLvPmzRsA/+thll9SUlKwfft2AMDevXvRrVs3uLm5wcTERJofFhamsY7w8HCV0+Xbl1fbYG5lDUsbOwCAk5MTHBwc8qReIiIiIiIqOOZW1jAwMIQA2KanQoMJLSp02rdvDysrK7x9+xY7d+7UdTgAgPLlywMA7t27p7Z31507d5SWzS/h4eGIj4+Hg4MDKlSokGl+UFAQUlNTNdZx7949jdPzahu6fjce/cbPxMfkNGzevFkaWJ+IiIiIiPRH1+/G46sZi5FmYMQ2PRUaTGhRoWNnZ4cffvgBADBmzBgEBwdrXP7s2bM4d+5cvsbk7e0NCwsLhISEYO/evZnmX7lyBefPn4dMJkOrVq3yNRZzc3MA6eNffPz4MdP8+fPnZ1nH77//rnF669atcxEhERERERERUf5iQosKJV9fXzRo0ABv3rxBgwYNsGHDBiQkJCgt8/DhQ4wcORJNmzbVeCtgXrCxscGIESMAAN9//z2uX78uzXvy5AkGDx4MAOjVq5faAd7zip2dHapUqYKUlBSMHTsWSUlJAIDU1FTMmzcP27Ztk24/VCcoKAjjx4+XxthKSUnBpEmTcPXqVVhbW2P48OH5ug1EREREREREucGnHFKhZGJigiNHjmDIkCHYtWsXBg0ahG+//RZlypSBubk5Xr16hdDQUABAsWLFULZs2XyPaebMmbh27RpOnjwJLy8vVK5cGcbGxtItftWrV8fy5cvzPQ4g/fHbnTt3xqpVq7Bjxw6ULl0awcHBiIiIwJQpU7B+/Xo8f/5c47ZMmjQJf//9N0qXLo1nz54hIiICBgYG+OOPP+Dm5pajuKYN66ryqScymQxNmjeCq3MR7N65J0d1ExERUd5Sd93WRP7k4uwq6HK5KZuUlJTlj4N5uT7um8JTLjdlP4d9k5oiUL++d47KEuUHJrSo0LKyssLOnTtx5swZrFu3DmfOnEFwcDCSkpLg5OSEDh06oFu3bujbt690G15+Mjc3x+HDh7FixQps2LAB9+7dQ1paGipXrozevXtj7Nixap9WmNe++OILHDp0CDNmzMD169fx4MEDVKlSBYsXL0b//v2xfv16jeX79OmDmjVr4tdff8X169chhEDz5s0xbdo0NGnSJMdxffNzT5iZm6qdv/fv0zmum4iIiPJWVtdtIiJF234/gm2bN+k6DCIJE1pU6DVu3BiNGzfWallfX1/4+vqqnT9kyBAMGTIk2+XkjI2NMWrUKIwaNUqreDw8PNQOIg8ATZs21ThfXbwA0KZNG7Rp00blvKzGHcuqPBEREREREVFhxjG0iIiIiIiIiIhIrzChRUQF4tyBuzAxNEebNm2kAfaJiIiIiKjwO7LpGmws7fHFF1/oOhQiCRNaRFQg4t59hEwmQ0pKCp4+farrcIiIiIiISEtpaWmQyWTSU9KJCgMmtIioQCiOFZaWlqbDSIiIiIiIiEjfcVB4os+INoPF5xeZTCYltbL7iHAiIiIiIiIiRfxWSUQFwsTsf/lzOzs73QVCREREREREeo8JLSIqEKbmxhBCwMjICA4ODroOh4iIiIiItGRgYAAhBIyNjXUdCpGECS0iKhANO1RGUupHHD58GCtWrNB1OEREREREpKXW/b0QG/8O+/fv13UoRBImtIiIiIiIiIiISK8woUVERERERERERHqFTzkkojyzf10gTEyU76sXEEhMSISpmSlcnYvoKDIiIiLKSNV1WxPFa7oMskJbLjdl09LS8OjxI5QrWy5bT2Xmvsn79XHfFJ5y8rJ2tvbZKkOU35jQIqI8s3vHHhQrVkxpWmpqKm7cuIEaNWrA0NBQR5ERERFRRqqu25rk9Jpe0OVyUzY2Nha2trZ48uAobGxs8n193DeFp1xuyn5O+4aoMOEth0REREREREREpFeY0CIiIiIiIiIiIr3ChBYREREREREREekVJrSIiIiIiIiIiEivMKFFRERERERERER6hQktIiIiIiIiIiLSK0xoERERERERERGRXmFCi4iIiIiIiIiI9IqRrgMgok/H0G5dYGJiojRNQCAxIRGmZqaQQQY7F1ds2u2vowiJiIhITtV1W5OM1/TCWi43ZdPSUlHG2QG927aCgYFhvq+P+6bwlMtNWX3aN4ZmFthz+IjWZYgKMya0iCjP/NG5GazNTDUuM9j/RAFFQ0RERJpoc93+PLXSdQCFGPeNevqxb3pvOajrEIjyDG85JCIiIiIiIiIivcKEFhERERERERER6RUmtIioQEwMvIV+hy4gwcQMI0aM0HU4RERERESflYmBtwAbO7Rv357tcfokMKFFRAXiedwHpAoByGR4+vSprsMhIiIiIvqsPI/7AMhkSElJYXucPglMaBFRgUgT4n9/p6XpMBIiIiIios8P2+P0qWFCi4gKhIHsf48UNjDgqYeIiIiIqCCxPU6fGh7FRFQgbE2Npb/t7Ox0FwgRERER0WeI7XH61DChRUQFws7EGIYyGSAEHBwcdB0OEREREdFnxc7EGBACRkZGbI/TJyHbCS2ZTAaZQldFok/NqVOnIJPJ0LRpU12HkieaNm0KmUyGU6dO6TSOOd7VsLldfZglJWDFihU6jYWIiIiI6HMzx7saEBuNgwcPsj1OnwT20PpMpKam4vDhw/jhhx/g5eUFa2trmJqaomTJkhg0aBCuXbum6xA/GWvXroWvry+Cg4N1HQoRERERERHRJ4kJrc/E2rVr0bZtWyxbtgy3b99GiRIlUKlSJYSHh2PDhg2oV68e/vjjD12HWShYWFigQoUKKFGiRI7Kr127FtOnT2dCi4iIiIiIiCifGOk6ACoYQgh4eXlh7Nix6Nq1KywtLQEAsbGxGD16NNauXYvvvvsO9evXR7Vq1XK9Pl9fX0yfPh1r1qzBkCFDcl1fQapbty7u37+v6zD0Uss1e2FgmPG0IiCE+P9blWUwMDJE01ZtpLmJCYlwdyuCndu2FmisREREnzvV121NlK/phbdc7taZlJwEE2OTbJfjvsn79XHfZL+cSE5EBTdXdaVgYWefjfUQFW5MaH0munfvjq+++irT+Gc2NjZYvXo1rly5gqCgIPz1119YsmSJjqIkfffLyo2wsLTKdrmVU8fmQzRERESkSU6v20RUeK2cOhYHjh5WOS81NRU3btwo2ICI8lGubjncvHkz6tatCysrKzg4OKBLly4ICgrKtFz16tUhk8lw69Ytpelv3ryRBpmfMmVKpnKqBrMOCwuDn58f2rRpAw8PD5iZmcHe3h4+Pj7YsGFDjrdFcbB7f39/NGzYEFZWVnB1dcXgwYMRFhYmLbtmzRrUqlULlpaWcHFxwfDhwxETE6O27pcvX2LUqFEoX748zM3NYWdnh2bNmmHnzp0ql1fc7lu3bqFz585wcnKCjY0NWrZsiStXrkjLnjlzBm3btoWDgwOsra3RoUMHlb2L7O3t1Q7mb2RkhObNmwMAHj58mPXOKmDBwcGQyWTw8PCAEAJ+fn7w9PSEhYUFXFxcMHDgQLx48UJl2aCgIEybNg0NGjRA0aJFYWJigqJFi6Jbt244d+6cyjLqBoVXjAMAVq9ejTp16sDa2lp6v2QyGQICAgAAzZo1k44rmUyGtWvXKtX34sULjBgxAqVKlYKpqSmcnJzQrl07HDp0SOP+OHDgANq2bQsnJyeYmpqiVKlS+O677xASEpL1zlSQkpKCJUuWoG7dutKYam5ubmjYsCGmTZuG6OjobNVHREREREREVFBynNCaP38++vfvj5CQEFSqVAkpKSnYu3cv6tati8DAQKVlmzRpAgDSF305xf9nnJeYmIiLFy/C1NQU9evXl6b/+eefGDVqFM6cOQMjIyN4enrCxsYGp0+fxqBBgzBixIicbhIAwM/PD926dUNISAjKli2LmJgYrF+/Hi1atEBCQgJGjx6NL7/8EtHR0ShVqhTevXuHVatWoXPnzhBCZKovICAAVatWhZ+fH16+fIly5crBxsYGp06dQs+ePfHTTz+pjeXixYuoX78+Tp8+DQ8PDxgYGOD48eNo3rw57ty5gx07dqB58+a4fv06SpUqhbS0NBw8eBBNmjTBmzdvsrXdCQkJAABzc/Ps7bACNnLkSIwaNQqxsbGoXLky4uLisHHjRtSuXRsPHjzItPyYMWMwY8YM3L9/H/b29vD09ERKSgr8/f3RpEkTbN68OUdxjBgxAt988w3evHmDihUrws7ODra2tmjUqBFsbGwAAFWrVkWjRo2kl6vr/7r+Xrx4EdWrV8fKlSsRHh4OT09PmJub499//0X79u0xdepUleudOHEiOnbsiMOHD8Pc3Byenp54+/YtVqxYgerVqyslO7PSp08fjBkzBpcvX4arqyuqV68OIyMjXLp0CTNmzOAYYERERERERFRo5TihNXnyZCxcuBChoaG4fPkywsLC0L9/f3z8+BEDBgzAx48fpWV9fHwAqE9oubu749KlS1JSBYD0/7p168LMzEya3rRpU5w4cQJxcXF4/PgxLl++jOfPn+PmzZuoVKkSVq5cmWk92TFx4kRs3rwZISEhuHHjBh4/foyyZcvi7t276Nu3L9atW4djx47hyZMnCAoKwrVr1+Dg4ICAgAD8+++/SnW9evUK3bp1Q2xsLH799Ve8e/cOt27dwosXL3D27Fm4u7tj4cKF+Oeff1TGMmXKFIwYMQJv3rzBlStX8ObNG3Tu3BlxcXH4/vvv8c0332DevHl4/fo1rl69itDQUNStWxfh4eH473//q/U2JyQkYN++fQCARo0a5Xjf5bfQ0FD8+eef2LJlC54/f44rV67g5cuXaNmyJcLDwzFo0KBMScXhw4fj1q1bePfuHe7evYurV6/i7du32LNnD8zNzTFixAjExcVlK46XL19iw4YN2Lt3L168eIHLly/j1atXqFmzJgIDA1GzZk0A6cnRwMBA6dWuXTsAwIcPH9CrVy9ER0ejV69eeP36Na5cuYKQkBCsXbsWhoaGmDlzZqaeWv/88w/mzp0LIyMjbNy4ESEhIbhy5Qpev36Nrl274t27d+jZs6fSZ0+dq1evYteuXShevDju3r2Lx48f49KlS3jx4gWioqKwevVqODo6Zmu/5NSa6eNgkJaC9u3bF8j6iIiIiIg+Nf6/z8dfU8fAIC0l1508iPRFjhNa7dq1w7hx42BgkF6FhYUF/v77bxQpUgTPnz/H1q3/G+BZ3kPr9OnTSnUEBATAwcEBX331FRITE3HhwgWlecD/kmFy3t7eaNasGQwNDZWmV6tWDX5+fgCATZs25XSz8PXXX6Nv377S/4sVK4b//Oc/AIA9e/bA19cXLVq0kOZ7enrim2++AYBMCa2FCxciKioKY8aMwcSJE2FqairNa9iwIVauXAkAWLRokcpYqlatigULFsDExAQAYGpqivnz5wNIvy3Ox8dH6T2ws7PDjBkzVMaiyYwZMxAWFia9F4VVSkr6yblPnz7SNEdHR2zatAlmZma4dOmS0u2pANCjRw94enoqTZPJZOjcuTPGjBmD2NhY7N+/P1txpKamYsaMGejUqZM0LTs92zZv3owXL17A1dUV69atg7W1tTRv8ODB+PbbbwEAc+bMUSo3d+5cAOm91Pr37y9Nt7GxwcaNG+Hk5ITg4GBs2bIlyxgePXoEIH3/VKpUSWmejY0Nvv76axQvXlxt+cTERMTGxiq9cio1JQUyAMnJyTmug4iIiNTLy+s2ERVOUWGvkJaWChmAp0+f6jocogKR44TWyJEjM00zMTHB119/DQA4fPh/A9G5uLigYsWKCA8Px7179wAAkZGRuHv3Lpo0aSKNVaTYs0qe/JInwxTFxcVh9erVGDx4MFq3bo3GjRvD29sbEyZMAADcvHkzp5ulMqFTo0YN6e8vv/wy03x5j5yMJ47du3cDgLRPMmrbti1MTExw7tw5pKSkZJo/dOjQTONelS9fHhYWFmpjVReLOgcOHJASJStXroSdnZ1W5XRF1XHn4uKCHj16AFA+7uRevHiBuXPnolevXmjevDm8vb3h7e2Nbdu2AcjZ8TJo0KBsl5E7cuQIAGDYsGFKvQ/lRo8eDQA4d+4c4uPjAQDv37/H+fPnAQA//PBDpjIWFhYYNmyYUv2ayJNVx48fR1RUVLa3Yc6cObC1tZVempJfREREpFu8bhN9+oRIk/5OS0vTsCTRpyPHTznM2Ksj4/SMg4s3adIE9+/fR0BAACpVqoTTp09DCAEfHx/Ur18fJiYmUkIrJSUF586dg5GRERo2bKhUz/Xr19GxY0e8evVKbWw5+YIuV6ZMmUzTnJ2dpX/l4yOpmv/+/Xtp2vv376UxiOQ9uNRJSEhAZGSk0hhL6mIBACcnJ7x48UJjrIqxqHPlyhX06dMHQghMnDgRPXv2zLJMRr6+vpg+fbra+UOHDsXQoUMzTV+zZg2GDBmSrXUZGxujbNmyKuepO+7WrVuH4cOHK93OmlF2jxcnJyc4OTllq4wieYyVK1dWOb9cuXIwMTFBUlISnjx5gmrVquHx48dIS0uDqakpSpcurbJclSpVlOrXpEGDBqhXrx4uXryI4sWLo1WrVmjSpAl8fHzg5eWl9gECchMnTsS4ceOk/8fGxrJxTEREVEjxuk306ZPJDCBEKgBId/AQfepynNBycXFROV2elMk4LpGPjw/++OMPBAQEYPjw4Uq3FJqbm6NOnTq4cOECkpKScO3aNcTHx6N+/fqwtLSU6khNTUWvXr3w6tUrtG/fHj///DOqVKkCOzs7GBoa4vHjxyhXrlymW5e8vb0zxVm0aFHs2LEj03R57ydF8i/3quYpzlccv0nxqYdnz55VWU6RqnGPslqfplizcu/ePbRr1w7v37/HN998g19//VWrchmVKFFC5bhbL168QEhICMqVK6fyWMmYvNOGo6Oj2pOzquPuyZMnGDZsGJKTk/Hjjz9iwIABKFOmDKysrCCTyfDnn39K87ND8ZjMCXmyUd1nSCaTwdnZGaGhodL2yMs4OzurfY/VffZUMTAwwKFDhzB9+nRs3LgRe/fuxd69ewEAJUuWhK+vr8aEo6mpqdIttERERFR48bpN9Okzt7JGfGw0ABT6u26I8kqOE1rh4eEoVqxYpulv374FAKVxgYDMA8MHBATA1tYW1atXl+afPXsWly5dkhJAGcfPunTpEh4/foySJUti9+7dmS7MISEhKmNVlVAqWbJkltuYG1ZWVtLfSUlJMDY2ztf1ZUdwcDBatWqFiIgI9OnTBytWrMhxXV9++aXK2zDlPbcmTZqU7Z5Y6kRGRiItLU1lUkvVcbd9+3YkJyejT58+WLBgQaYy6o6X/CY/NuQxZySEQHh4OID/bY+8THh4OIQQKpNa8idbZvzsqWNvb4/Fixdj0aJFuHnzJk6fPo09e/bg5MmTGDp0KKysrKRbOfOToZERkpOTC9VnhIiIiIhIn5hbWePj+zikpqXCwcFB1+EQFYgc90WUj4Wlbnr58uWVpru7u6N06dLSE91u3bqFxo0bS8kJefLq1KlTasfPkt/CV6tWLZW/MqkbC0kIkeklryu/2Nraws3NDQBw586dfF1XdoSFhaFly5YIDQ1Fx44dsX79er3pkpqcnIwnT56onKfquJO/xxlvW5XLzVhrmmTVS04e4927d1XOf/ToEZKSkmBoaCjdVlq2bFkYGBggMTFR7fho8uMs42dPm3hr1KiBUaNG4cSJE9JYdKtXr85WPTk1dNp/kWZghIMHDxbI+oiIiIiIPjVdvxuPr2YsRpqBUa46LBDpkxxnMn7//fdM05KSkvDXX38BAFq3bp1pvjxBNWvWLKSlpSn1wGrYsCGMjIxw4sQJBAYGwtDQMNOtgvInycl7oihKTk7G4sWLc7o5+aJbt24AUGjiioqKQqtWrfDkyRM0a9YMO3bs0LteMaqOu/DwcOn2UcXjTtPxcv/+/Ww/3VBb8vWquo0UANq0aQMgPWGkamyvpUuXAgAaNWok3d5oZWUlJebkT/NU9PHjR/z5559K9edU/fr1AUDjOHVEREREREREupTjhNaBAwewZMkSadyojx8/YtiwYXj16hWKFy+OPn36ZCojT2Dt27dP6f9A+hd2Ly8vnDp1CrGxsahRo0amAdjr168PIyMjnD17FuvXr5emx8TEoH///ioTF7r0888/w8HBAevWrcO4ceMQHR2tND8qKgp///03Zs2ale+xxMfHo0OHDggKCkK9evWwb98+lU/YK8yMjIzw+++/K419FhUVhQEDBiAhIQG1a9dGs2bNpHnyhOjvv/+OGzduSNMfPnyInj17wsTEJF/ilA/arvjUTkV9+/ZFiRIl8ObNGwwZMkRpAP+NGzdi1apVACD1lJL7+eefAaRvz+bNm6XpcXFxGDRoEMLDw+Hh4aHys5fRpk2bMHPmzEw9FSMjI6WEmpeXV5b1EBEREREREelCjsfQmjVrFsaMGYO5c+eiePHiePDgAWJjY2FmZoaNGzeqHLBc3kNLCAFra+tMX5h9fHxw6dIl6e+MihQpgjFjxmDBggUYPHgwpkyZAmdnZ9y9excpKSlYunQpRowYkdNNynPFihXDvn370KVLFyxatAjLli1DxYoVYWFhgfDwcDx79gxCCPTu3TvfY1m6dCkuXLgAID251bZtW5XL1axZU2UPoMLA3d0d7du3R69evVCyZEk4Ozvjzp07+PjxIxwdHbF+/Xql2/26dOmC+vXr48KFC6hduzbKly8PQ0ND3LlzB0WKFMHkyZMxefLkPI+zd+/eWL58OebNmwd/f38UKVIEMpkMEyZMQNu2bWFhYYHt27ejTZs22LZtG/755x9UqlQJb968kcb1mjx5Mtq1a6dUb8eOHTFhwgTMnTsX/fv3x4QJE+Dq6op79+4hPj4e9vb22L59u9RDTJPw8HBMnToVU6dOhbu7O9zc3PDx40c8fPgQSUlJcHd3x8yZM7O97dOGdVV5C6u6cb/k84yMDOHt00B5OgQSExJhamYKGWRaz3N2csHkSVOzHTsREdHnRt11WxNN1/TCVC43ZZOSknL0wyf3Td6vj/tGczkIA5QuW0lpujPHz6LPSI4TWuPHj0exYsWwePFi3LlzB8bGxujUqRNmzpyJatWqqSxTunRpFCtWDC9fvkSjRo1gaGioNN/Hxwe//fYbgMzjZ8nNnz8fxYoVw8qVK/H06VN8+PABLVu2xC+//JKjJ+flt0aNGuHu3btYsmQJ/vnnHzx58gSpqalwd3dH27Zt8cUXX0i3JuanxMRE6e+goCC1yxkZ5fiQKBDLly9HxYoVsXr1agQFBcHKygrdunXD7NmzMw30b2RkhMOHD2Py5MnYtWsXHj9+DFdXV3z11VeYMWMGDh8+nC8xNm7cGJs3b5Y+Gw8fPgQApcHx69Wrh5s3b2LOnDn4999/cevWLVhaWqJ169YYPXo02rdvr7LuOXPmoFGjRli6dCmuXLmCN2/eoGjRohg4cCAmTZqk9SO4u3fvjqSkJBw7dgwPHjzA7du3YWlpiapVq6Jbt24YOXJkjp6O8s3PPWFmrtunKO35W3XPOCIiIlJWGK7bRJRze/4OwKmj+fOdhkgfZDt7Ib/FEAD69euHfv36Zau8pifLdejQQal+VWQyGUaPHo3Ro0dnGV92aCrn4eGhcX7Tpk01znd2dsasWbO0vrXw1KlTGudnNaC9qlh8fX3h6+ur1frzQn6tTyaTYdSoURg1apRWy9vY2GDp0qXSbXSKhgwZovIJjOrez6yOA0V9+/ZF3759NS5TsmRJrFy5Uqv6FHXs2BEdO3bUenlVx1Px4sUxfvx4jB8/PtvrJyIiIiIiItI1/Xi8HRERERERERER0f9jQouIPgnnDtzF4Y1XYWpogSVLlug6HCIiIiKifKHY7i1MY0gTFTQmtIjokxD37iNEWvqgmq9fv9Z1OERERERE+UKx3fv06VNdh0OkM0xoEdEnQXF8s5yOpUdEREREVNgptnXT0tJ0GAmRbhXuR9oRIXuDsdPnSyaTScdJTh/TTERERERU2Cm2ew0M2EeFPl88+onok2Bi9r/8vLW1tQ4jISIiIiLKP4rtXjs7O90FQqRjTGgR0SfB1NwYMoP0X6usrKx0HQ4RERERUb5QbPc6ODjoOhwinWFCi4g+CQ07VEabAbWQmPoBo0eP1nU4RERERET5QrHdu2LFCl2HQ6QzTGgREREREREREZFeYUKLiIiIiIiIiIj0Cp9ySER5Zv+6QJiYGCtNExBITEiEqZkpZJDl+zwXJ9c83CIiIqJPl6rrtiaarr+FqVxuyqalpeHR40coV7Zctp4ex32T9+vjvsm6XPFiJbQuQ/QpYkKLiPLM7h17UKxYMaVpqampuHHjBmrUqAFDQ8MCm0dERESaqbpua6Lp+luYyuWmbGxsLGxtbfHkwVHY2Njk+/q4bwpPudyU1eW+Ifqc8ZZDIiIiIiIiIiLSK0xoERERERERERGRXmFCi4iIiIiIiIiI9AoTWkREREREREREpFeY0CIiIiIiIiIiIr3ChBYREREREREREekVJrSIiIiIiIiIiEivMKFFRERERERERER6xUjXARDRp2Noty4wMTFRmiYgkJiQCFMzU8ggUzvP3qUINu32L8hwiYiIPmuqrtuaaLqmF6ZyuSmblpaKMs4O6N22FQwMDPN9ffq+b+xcXNl+IyKdYUKLiPLMH52bwdrMNEdlB/ufyONoiIiISJPcXLc/ba10HUAhprxv2H4jIl3iLYdERERERERERKRXmNAiIiIiIiIiIiK9wlsOiUjnJgbeQoKJGdq0aYPSpUtjxYoVug6JiIiI6JM2MfAWopOSYWdijDne1XQdjkpLlixBYmIiHBwc2D4kokyY0CIinXse9wGQyZCSkoKnT5/qOhwiIiKiT97zuA9IFQLvEpIw4sTVHNWRYGKG3r17Z7lccnIyjI2Ns11/ZGQkhBCIjo7OQXRE9KljQouIdC5NiP/9nZamw0iIiIiIPg/y9pcAEJWQlLNKZDJERETkXVBqsH1IRKowoUVEOmcgkyH1/xtVBgYc2o+IiIgov8nbXzIA9mYmOaoj6mMinJyds1wutz202D4kIlWY0CIinbM1NZZ+GbSzs9NtMERERESfAXn7y97MBCua18pRHYP9T2Dbtm0al0lNTcWNGzdQo0YNGBoaal13amoqevbsiZiYGLYPiUglJrSISOfsTIwR9TERRsbGcHBw0HU4RERERJ88OxNjpX8LIysrKxizfUhEajChRaRn1q5di6FDh2Lw4MFYu3at1uWCg4NRqlQplCxZEsHBwfkWX07M8a6Gwf4ncODECV2HQkRERPRZKKxPNlQ0evTobPfsIqLPB29G/gRcunQJI0eORNWqVWFvbw9jY2M4OTmhYcOGGD9+PK5eVf3UkiFDhkAmk2X5GjJkiNpytWpp7p5869YtpbpOnTqVR1ude02bNtVq+zO+Mvrhhx+keUePHtW4zrVr12aqz9TUFC4uLvD09MTgwYOxceNGJCQk5Ndmq7R48WL4+vryCTJERERERESkF9hDS499+PABX3/9NbZs2QIAMDY2RpkyZWBjY4OoqChcunQJ58+fx2+//YZ27drh4MGDKutxcXFBuXLl1K6nfPnyauddu3YNd+/eReXKlVXO37BhQza2qGB5enoiJSUl0/SzZ88CAKpWrQpbW1uNdSQnJ2Pr1q3S/zds2IBWrVpluW5TU1PUrl0bACCEQExMDIKDgxEUFIT169dj3LhxWLFiBbp3756dTdLI2NgYFSpUgLu7e6Z5ixcvxvPnzzFkyBCOUUBERERERESFHhNaeio5ORlt2rRBYGAgihYtitmzZ6NXr16wtLSUlomOjsbevXsxf/58nNBwK1e7du2ydeuaXIUKFfDgwQNs2LABc+bMyTQ/LS0NmzdvhrW1NaytrfHq1atsr0MV+a1zPj4+uerx5efnp3K6vBeWn58fmjZtqrGOf//9FxEREbCzs0N0dDR2796NFStWKL0PqhQpUgSBgYFK01JTU3Hp0iXMnTsX+/btQ48ePbBy5Up8++232m+UBu7u7rh//36e1KVOyzV7YWCY8bQiIIT4//2asYfb/+YZGBmhaas2SnMTExJhamaqNM3ZwQFbN2/M89iJiIg+N6qv25pouqYXpnK5W2dSchJMjE2yXe5z3DcGRoaZ2m+qqGrTaSO/yjk7OGDHti3ZrpeIChcmtPSUr68vAgMD4ebmhgsXLqB48eKZlrGzs8PgwYPRv39/zJs3L89j6Nq1K/z8/LB582b8+uuvmW7HO3HiBF69eoUhQ4bgzJkzeb7+wkDeA23kyJHYs2cP7ty5A39/fwwYMCDbdRkaGqJBgwbYu3cvfvnlF/z666/44Ycf0Lx5c4096AqTX1ZuhIWlVb6uY+XUsflaPxER0eeiIK7bRIUR25NEnwaOoaWHoqOjsXTpUgDA0qVLVSazFBkZGeGXX37J8zgsLS3RpUsXvHjxAgEBAZnmy5M9OUnu6IOYmBjs378fANCvXz/069cPQN7cZjlz5kzUrFkTycnJWLhwodrl4uLiMG7cOHh4eMDMzAylS5fGL7/8gg8fPmRaNjg4GDKZDB4eHtI0+Zhez58/BwCUKlWq0I55RkRERERERCTHhJYeOnjwIN6/f48iRYqgS5cuOo1l4MCBAICNG5VvAfvw4QP8/f3h7u6OZs2a6SK0fLd9+3YkJCSgevXqqFy5Mvr16weZTIbjx4/j9evXuarbwMAA33zzDQDgwIEDKpdJTEyEj48PFi9eDCsrK5QrVw7BwcH49ddf0aJFC5VJrYxcXV3RqFEjmJqmd8muXbs2GjVqJL2yGkOMiIiIiIiISBeY0NJD586dAwA0aNBA54+wbdmyJYoUKYKdO3cqPZlvz549iIuLQ//+/WFg8GkeZvKeWP379wcAeHh4oGHDhkhNTcXmzZtzXb+3tzcA4OXLlwgLC8s0f+fOnXj79i2uX7+OoKAg3L59G7du3ULx4sVx4cIFTJs2Lct1tGvXDoGBgShSpAgAYMeOHQgMDJReNWvWzPV25JT/7/Oxef4U+P8+P1vlRo4cidmzZ2PkyJH5FBkRERER6Sv/3+fDIC0Fbdq0wYgRI3QdDhHlAsfQ0kOhoaEAoHTrWG6sW7cO69atUzvf399fbU8wQ0ND9O3bF4sWLcK+ffvQq1cvAJ/+7YbBwcEIDAyETCZDnz59pOn9+vXD2bNnsWHDBvz444+5WofiraRv376Vkk5yKSkp8PPzQ/Xq1aVpVatWxfLly9GpUyesWLECU6dOhbW1da7iUCUxMRGJiYnS/2NjY/N8HVFhr5CWlooPcTHYPH+KNN0gLQX9+vVDcnIyjI2NM5eLikJaWhri4+PzPCYiIiJ9VBDXbSJ9ERX2CjKkt6WfPn2q63CIKBc+za4zn7i4uDgAUPskva1btyqNgyR/qXuSoYuLi9JtZhlfjo6OGuPJeNvhmzdvcOzYMVSvXh2enp453MrCbePGjRBCoHHjxkqJp169esHY2Bg3b97E7du3c7UOxfdX/p4rcnd3R+fOnTNN79ixI0qUKIH4+HicPXs2VzGoM2fOHNja2kqvrMZxywkh0v7/X4H42GjpJQMQERGBmJgYREREZHqlpaWXk/9LRET0uSuI6zaRvpC3MQG2F4n0HXto6SF5jxt1PVCcnZ3RqFEj6f9BQUGIiYlRW1+7du3UJru0UbNmTVSpUgX//vsvIiIisGXLFqSkpOS6d1ZwcDBKlSqldn5AQECmJysCgI+PT74PZi5P3skHgpdzcnJC69atceDAAWzYsAHz52fvdjlF79+/l/62sbHJNL9ChQoqb+eUyWSoUKECXrx4gYcPH6Jt27Y5jkGdiRMnYty4cdL/Y2Nj87xxLJMZQIhUyGQyWFj/byyv97HRcHZyyrKH1qd6qysREVF2FcR1m0hfyNuYANheJNJzTGjpIXd3dwDpCR9VWrRogRYtWkj/b9myJY4fP56vMQ0YMAATJ07Etm3bsHHjRhgYGGRK9mSXmZmZUmJOLjExEVeuXIGNjY3KHmD53Svs0qVLePDgAYyNjdGzZ89M8/v3748DBw5g8+bNmDt3bo4vlC9evJD+dnFxyTRf1TQ5V1dXAKp7duUFU1NTaSD5/GJuZY342GhYWNui3/iZ0vSVU8di8+bNuHHjBmrUqJFpHLnevXsjIiICdnZ2+RofERGRviiI6zaRvpC3MQGwvUik55jQ0kMNGjTA8uXLce7cOaSmpup8YHggPYkzadIkzJ8/Hy9evECrVq3g5uaWqzqLFCmCwMDATNPlPbdq1qyZ7z2xVFm/fj0AIDk5WePtmKGhoThx4gRatmyZo/XIt71EiRJSgkpReHi42rJv374FgHwZP6ugmFtZK/2rLXt7eyQnJ8Pe3j4/wiIiIiIiPWZuZY33sdEwNjKCg4ODrsMholxgQksPtW/fHlZWVnjz5g38/f3Ro0cPXYeE4sWLK93q96kOBp+cnIxt27YBABwdHWFkpPojFB8fj/fv32PDhg05SmilpaXhjz/+AAB06NBB5TIPHjxQeWudEAIPHjwAAJQvX16r9am6dVPXun43Pkflli9fLvXeIiIiIiJS1PW78Vg5dSwOHz6s61CIKJd407Aesre3x/fffw8AGD16tNKtabo0atQotGjRAq1bt0a3bt10HU6+OHToECIiImBpaYng4GCEhYWpfO3atQsAsHv3bnz48CHb65kyZQpu3rwJY2NjtU9LfPnyJfbv359p+oEDB/D8+XNYWlqqvGVTFXNzcwDAx48fsx0rERERERERUUFjQktPTZ8+HQ0aNMCrV69Qr149/P3330qDiAPpvYl27twp9dbJb127dsWxY8dw+PBhWFlZFcg6C9qGDRsApG+rpm1s0aIFihYtivfv38Pf31+rutPS0nD+/Hl07twZv/76KwBgxYoVKFOmjMrljYyM8MMPPyg9TfHu3btSsnP48OFa33JYunRpAOkD7RMREREREREVdrzlUE+ZmJjg6NGj+PLLL7F9+3Z89dVXGD58OMqUKQMbGxtERkbi9evXUu+g1q1bo1mzZirrOnToELy9vdWuq1y5clizZk2+bIc+iY6OlnpEDRw4UOOyhoaG6NOnDxYtWoQNGzagf//+SvPDwsKkfS6EQGxsLJ4/fy4N4u7s7IxVq1aha9euatfRo0cPPHjwANWrV0eVKlUgk8kQFBQEIQTq1KmD6dOna71tvXv3xoEDBzBixAgsX75cGhts8eLF2bp1b9qwrioHwRdCqL2tMbvzDA0N0aR5IyQmJMLUzBQypM93cXbF7p17tI6ViIjoc6fuuq2Jput2YSqXm7JJSUkwMTEpsPVx3xR8OWPD7G8DERU+TGjpMUtLS2zbtg3jxo3D2rVrcfr0aYSGhuLx48ewtbWFp6cnvL290a9fP3h5eamt5+3bt9Ig4qpk7Pn1udqxYwcSExNRpEgRpadIqjNgwAAsWrQIx44dQ1hYGIoUKSLNS0xMxNmzZwEAxsbGsLW1RcmSJeHl5YVWrVqhZ8+eWT6NyNTUFAEBAZg6dSp2796NsLAwlChRAn379sXkyZNhaWmp9bYNHDgQ7969w19//YVHjx4hKCgIQHoSLzu++bknzMx18xSlvX+f1sl6iYiI9JUur9tEusR2I9GngQmtT0C9evVQr169bJdbu3Yt1q5dWyDlHj9+nO31qOPh4QEhRJ7Vl5G6uocNG4Zhw4ZpXY+Xl1emuoYMGYIhQ4bkJrxMdSxatAiLFi3KslxW+23UqFEYNWpUrmIjIiIiIiIiKggcQ4uIiIiIiIiIiPQKe2gRkd45d+AuEj8mw9TcGA07VFa5zMiRI/Hu3Ts4ODhgxYoVBRwhERERERVGRzZdg4mhOdq3b4+DBw/qOhwiygUmtIhI78S9+wiRJpD4MRknd94EAJgYmqF3794A0p/wGRcXh7S0tGyPA0ZEREREn660tDTIZDIkJyfrOhQiyiUmtIhI70hjgQkg8UN6Y0QmM0BERESmZdPS0goyNCIiIiIiIioATGgRkd6RyWTpSS0ZYGpuDABIiE+Es7MLAOUeWtl9HDkREREREREVfkxoEZHeMTEzQuKH9DG0mvWoDiD98cvbtm1Damoqbty4gfnz5yMiIgJ2dna6DZaIiIiIiIjyHBNaRKR35L2y5P+qYm9vDwBwcHAokJiIiIiIqPAzMDBAakoqjI3VtyOJSD8woUVEekfdkw0VLV++HIaGhgUQDRERERHpi9b9vbD379M4cfCErkMholzi4DJERERERERERKRXmNAiIiIiIiIiIiK9wlsOiSjP7F8XCBMT5fEIBAQSExJhamYKGWT5Ns/F2TUftoiIiOjTpeq6rYmma3NhKpebsmlpaXj0+BHKlS2XrSclc9/k/frysxzbjUSfBia0iCjP7N6xB8WKFVOaJn/qYI0aNTKNaZUf84iIiEg7qq7bmuT0+lvQ5XJTNjY2Fra2tnjy4ChsbGzyfX3cN4WnHBHpH95ySEREREREREREeoUJLSIiIiIiIiIi0itMaBERERERERERkV5hQouIiIiIiIiIiPQKE1pERERERERERKRXmNAiIiIiIiIiIiK9woQWERERERERERHpFSa0iIiIiIiIiIhIrxjpOgAi+nQM7dYFJiYmStMEBBITEmFqZgoZZBrn2bm4YtNu/4IMmYiI6LOl6rqtiaZremEql5uyaWmpKOPsgN5tW8HAwDBP1sf2DRFR/mBCi4jyzB+dm8HazDTH5Qf7n8jDaIiIiEiT3F63P12t8rQ2tm+IiPIHbzkkIiIiIiIiIiK9woQWERERERERERHpFSa0iKhQGPjvRSSYmKF9+/a6DoWIiIgoT7B9Q0SUf5jQIqJCITktDZDJkJycrOtQiIiIiPIE2zdERPmHCS0iIiIiIiIiItIrTGgREREREREREZFeYUKLiIiIiIiIiIj0ChNaRFQoGBsYAELA2NhY16EQERER5Qm2b4iI8k+BJrRkMhlkMllBrpIo29auXQuZTIYhQ4boOpQ84eHhAZlMhuDgYF2HotGGtvVglpSAgwcP6joUIiIiojzB9g0RUf5hDy2iPLZ48WL4+voiOjpa16EQERERERERfZKY0CLKwNbWFhUqVEDRokVzVH7x4sWYPn06E1pERERERERE+cRI1wHQp2nIkCFYt24dTp48iaZNm+o6nGzp2rUrunbtqusw9FLLNXthYJjxtCIghPj/240z3nKsPM/AyBBNW7WR5iYmJMLUzFTlulTNc3ZwwNbNG3O9HURERJ8D1ddtTTRd0wtTudytMyk5CSbGJtkuJ4SASElGRTdXpTl2Lq5qyhARUW4woUVEeeaXlRthYWmls/WvnDpWZ+smIiLSN7q+bn+KVk4diwNHD+s6DCKiz4LObjncvHkz6tatCysrKzg4OKBLly4ICgrKtFz16tUhk8lw69Ytpelv3ryRBpmfMmVKpnJNmzaFTCbDqVOnpGlhYWHw8/NDmzZt4OHhATMzM9jb28PHxwcbNmzI0XYoDnTv7++Phg0bwsrKCq6urhg8eDDCwsKkZdesWYNatWrB0tISLi4uGD58OGJiYtTW/fLlS4waNQrly5eHubk57Ozs0KxZM+zcuVPl8orbfOvWLXTu3BlOTk6wsbFBy5YtceXKFWnZM2fOoG3btnBwcIC1tTU6dOiA+/fv52gf5LdTp05BJpOhadOmSE5OxvTp01G+fHmYmZnB3d0dI0eORFRUlMqyFy5cwPjx41G7dm24uLjA1NQUxYsXx8CBA3Hnzh2VZdQNCq8YR0pKCubPnw9PT09YWFjAw8NDKvf8+XMAQKlSpaTjI+OxCAB37tzBwIEDUaxYMZiYmMDV1RXdu3fHhQsX1O4LIQQ2btwIHx8f2NnZwdzcHBUrVsTPP/+sdh+oEx8fjxkzZqBatWqwtLSEmZkZihcvjqZNm2Lu3LlITk7OVn1EREREREREBUUnCa358+ejf//+CAkJQaVKlZCSkoK9e/eibt26CAwMVFq2SZMmAICAgACl6Yr/zzgvMTERFy9ehKmpKerXry9N//PPPzFq1CicOXMGRkZG8PT0hI2NDU6fPo1BgwZhxIgROd4mPz8/dOvWDSEhIShbtixiYmKwfv16tGjRAgkJCRg9ejS+/PJLREdHo1SpUnj37h1WrVqFzp07QwiRqb6AgABUrVoVfn5+ePnyJcqVKwcbGxucOnUKPXv2xE8//aQ2losXL6J+/fo4ffo0PDw8YGBggOPHj6N58+a4c+cOduzYgebNm+P69esoVaoU0tLScPDgQTRp8n/s3XlYVNX/B/D3nYGZYUdkM1BxTVzR1ExRsNTcMrUUU3NNi+ybZj9zV1LLMi3NFMo0DTNNc01bLAMFKzXFDRdwwYVUEFlEGIaZ+f1BMzHMwrDODLxfzzOPM+fcc+/nXkbOzIdzzu2Bu3fvlvsaVDW1Wo0hQ4YgIiICABAYGIh79+5h7dq1ePLJJ3Hv3j29NqNHj8ZHH32E69evw8fHB4GBgcjJycHmzZvRqVMnvSSTuXEMHjwYM2fORF5eHlq2bKlNYnbr1g1SadE0uI4dO6Jbt27ah5ubm3Yfe/fuxRNPPIHNmzcjNzcX7dq1g1qtxs6dO9GtWzesW7fO4HFHjx6Nl19+GYcPH0bdunXRsmVLXLt2DcuWLUOHDh1w9epVs86hsLAQvXr1wsKFC3H+/HnUr18fbdq0gUqlwpEjRzB79mzk5uaW+doQERERERERVQeLJLTmzZuHFStW4Pbt2zh+/Dju3LmDUaNGIS8vD6NHj0ZeXp5225CQEADGE1p+fn44duwY8vPztXWa1507d4ZMJtOWh4aG4tChQ8jJyUFycjKOHz+OlJQUnD59GoGBgYiKitI7jrlmz56NLVu24ObNm0hISEBycjKaNm2KxMREvPTSS9i0aRN+/fVXXLlyBefOncPJkyfh4eGB2NhY/PTTTzr7Sk1NxdChQ5GdnY33338fDx48wJkzZ3Djxg3Ex8fDz88PK1aswA8//GAwlvnz5yM8PBx3797FiRMncPfuXTz//PPIycnBG2+8gcmTJ+PDDz/EP//8g7///hu3b99G586dkZaWho8//rhc518djh49iiNHjuDQoUO4fPkyTp06hStXrqBdu3ZITk7GlClT9NosWLAAV65cQXp6Os6ePYuEhASkp6fjyy+/hEKhwMSJE6FSqcoUR3x8PI4fP46jR48iOTkZJ06cwIkTJ9CvXz/ExcXB19cXALB9+3bExcVpH+3btwdQ9PN9+eWXIZfLMXXqVNy9e1f7/+C9996DSqXClClT9EYlrlmzBlu2bIGLiwt++eUXXLlyBX///TdSUlLQrVs3pKSkYOTIkWadw549e/Dnn3+iXbt2SElJwcWLF3H8+HHcvn0bd+7cwcqVKyGRSMp0XSxp19pl2LJsPkSqQkyZMgXvvfeewfcDERERUVX56t3pEKkK0b9/f0uHQkRUK1gkodWvXz9Mnz4dIlHR4R0dHbFhwwb4+voiJSUFW7du1W6rGaF1+PBhnX3ExsbCw8MDEydOhFwu15mmpUlKaZJhGsHBwejZsyfEYrFOedu2bbF69WoAwDfffFOuc3rllVfw0ksvaV/7+/tjxowZAIDdu3cjIiICzzzzjLa+TZs2mDx5MgDoJbRWrFiBjIwMTJs2DbNnz9aO+AGArl27IioqCgDwySefGIyldevWWL58uTYhIZVKsWzZMgBF0+ZCQkJ0rr+7uzsWLVpkMBZrUlhYiIiICPTs2VNb1qBBA3z99dcAgO+//15vhNKYMWPQuHFjnTI7OztMnDgRI0aMwNWrV01O8TNEqVQiMjISTz31lLaseOK0NGvXrkV2djaCgoJ0EkcikQhz5sxB//79oVAosHz5cm0btVqt/RkuWrQIvXv31tb5+vpi27ZtkEgk+Ouvv3Do0KFSY0hKSgIATJgwAf7+/jp1Xl5emDp1KhwdHY22l8vlyM7O1nlYUsadVORmZwIArly5gqysLFy7ds2iMREREVkLa+u3ayplYSEEgMs2EBFVE4sktAyNnJBIJHjllVcAAD///N9Cit7e3mjRogXS0tJw4cIFAMD9+/eRmJiIHj16aO+gV3xklSb5pUmGFZeTk4N169Zh7Nix6NOnD7p3747g4GDMmjULAHD69OlyndPEiRP1yoKCgrTPJ0yYoFevGbFTMgmzc+dOANBej5L69u0LiUSCo0ePorCwUK9+/Pjx2nW9NJo3b65NUBiK1Vgs1qT4e6S4tm3bIjg4GGq1Gr/88ote/cWLF7Fw4UIMHToUoaGhCA4ORnBwsPY9U9afuZubG55//vnynQSgjfGNN94wWD916lSd7QDgwoULuHnzJmQyGSZNmqTXxs/PDy+88IJeO2Pq168PANi/fz8ePXpUthMAsHTpUri5uWkfmv1ZilpdNMpOALQj7so68o6IiKimsrZ+m4iIqDJY5C6HgYGBJssvX76sU96jRw9cvHgRsbGxCAwMxOHDh6FWqxESEoIuXbpAIpFokxOFhYU4evQo7Ozs0LVrV539nDp1CgMHDkRqaqrR2Mq6sLZGkyZN9Mq8vLy0/7q6uhqtf/jwobbs4cOHuH79OgBoR3AZk5+fj/v378PHR/dWwIZiAQBPT0/cuHHDZKzFYzHHuHHjsGnTJqP1xUdTFff7779rk5Hm8vf3h4uLi8G6wMBAxMXF6b13li5dinnz5plMbpT1Z96sWTO9UX5loYmxZcuWButbtWoFoOjGB9nZ2XB1ddW2adCgAZycnEy2K3kNDBk8eDACAgLwyy+/4LHHHkPfvn3RvXt3hIaGavdjyuzZszF9+nTt6+zsbIt+OBYEEdRqJdQAxCIRVCqVdgQiERFRbWdt/TYREVFlsEhCy9vb22C5JjGTk5OjUx4SEoIvvvgCsbGxeO2113SmFDo4OKBTp074888/UVBQgJMnTyI3NxddunTR+eKvVCoxfPhwpKamon///pg5cyZatWoFd3d3iMViJCcno1mzZuUeImxoepZmlJSxqVua+uKLwhe/62F8fHypxy2+3pipWEqLp+SILnM1b94c3bp10ytPSkrCvXv30Lp1a53F0DUMlZXG2PsGMPzeOXz4MObMmQOxWIylS5di0KBBaNiwIRwdHSEIAubNm4f33nuvzD9zYwklc2mShqX9PwCKzsfV1bXUNsXblfz/Y4iTkxOOHDmCBQsWYMeOHdi2bRu2bdsGoCjR9uGHH2LgwIFG20ulUp2psJbm4OyinXLo4eGB9PR0uLu7WzQmIiIia2Ft/TYREVFlsEhCKy0tTW/dHgDau9SVHIVTcmH42NhYuLm5oV27dtr6+Ph4HDt2TJsEKrl+1rFjx5CcnIyGDRti586dep36zZs3K+HMKs7Z2Vn7vKCgAPb29haMpnRz5szBnDlz9Mo1I7dWr15d5pFYxqSlpRmtM/Te0ayHNmPGDO2U0uIs9TN3dnZGVlYW7t27Z3C0XPE7TWrOR/O+MHQnx5LtjI1iK8nf3x8bNmzAF198gb///hsxMTHYsWMHTpw4gcGDByM+Ph5PPvmk2edlSQ7ORef8MDsTderUgUKhQJ06dSwcFREREdUmYjs7KBQKq//8TkRUU1hkTo5mLSxj5c2bN9cp9/PzQ+PGjfHPP//gxIkTOHPmDLp3766dUqRJXsXExBhdP0szje+JJ54w+Beq8q6dVdnc3Nzw2GOPAQDOnz9v4Wisy82bN41OiTT03tH8zEtOPdWoqp95aaPdNDEmJiYarNf83H18fLRTVTVtbty4YfQaaNqV/P9TGjs7Ozz55JOYOXMmjh8/jhEjRkCpVGLDhg1l2o8lDXn9HYx8ZzFUIjusWbMGc+fOxZo1aywdFhEREdUi4xd+DJXIDgcOHLB0KEREtYJFElpr167VKysoKMD69esBAH369NGr1ySolixZApVKpTMCq2vXrrCzs8OhQ4cQFxcHsViM4OBgnfYODg4AdEe/aCgUCqxcubLc51PZhg4dCgBWFZM1KP4eKe7cuXM4cuQIBEHQufufqZ/5L7/8UmUJLc1xDU0HBYBnn30WAPDZZ58ZrP/00091tgOK1ghr0KAB8vPz8eWXX+q1SU1Nxffff6/Xrjy6dOmi3ScRERERERGRNbJIQmv//v1YtWqVdu2ovLw8TJo0Campqahfvz5GjBih10aTwNq7d6/Oa6BoOlaHDh0QExOD7OxsBAUF6S3C3qVLF9jZ2SE+Ph5ff/21tjwrKwujRo0ymPSwlJkzZ8LDwwObNm3C9OnTkZmZqVOfkZGBDRs2YMmSJZYJ0ELs7OywcOFCnTta3rp1C2PGjAFQlAgsPoVPk9T84IMPcO3aNW358ePHMWHCBMhksiqJs3HjxgB077xZXHh4OFxdXZGQkIC33noLBQUFAIruyrds2TLs378f9vb2ePvtt7VtBEHAjBkzAAALFy7Eb7/9pq27e/cuRowYgYKCAnTp0sXoQvzFffLJJ1i5cqXe+/7GjRvahFmHDh3KcNZERERERERE1ccia2gtWbIE06ZNwwcffID69evj0qVLyM7Ohkwmw+bNmw0uWq4ZoaVWq+Hi4qL3ZTskJATHjh3TPi/J19cX06ZNw/LlyzF27FjMnz8fXl5eSExMRGFhIT799FOEh4dXwdmWnb+/P/bu3YvBgwfjk08+wWeffYYWLVrA0dERaWlpuHbtGtRqNcLCwiwdarXq2rUrXFxcEBoaiubNm8PJyQlnz55FYWEhGjdurDfiafLkyYiMjMSVK1fQokULPP744ygoKMClS5fQsmVLhIWF4eOPP670OMPCwrB//36Eh4djzZo1qFu3LoCiEXdBQUF47LHHEB0djWHDhmHlypXYtGkTmjZtipSUFNy7dw8ikQifffYZ2rZtq7PfKVOm4I8//sCWLVvQq1cvNG3aFK6urjh37hwKCgrQoEED7bphpUlJScGqVavw1ltvISAgAN7e3sjOzkZSUhKUSiVat26tczckcy2cNMTg3QXVarXRqZiVWScWi9Hj6W6Q58shlUkhQLdeDXW11qlUKnj61kHfAb3h61MPO3fsNnguRERElmCs3zbFVN9sTe0q0ragoAASicT846gENG4aCHm+HH6P+Zb5eEREVD4WSWi988478Pf3x8qVK3H+/HnY29tj0KBBWLx4sd6XeI3GjRvD398ft27dQrdu3SAWi3XqQ0JC8NFHHwHQXz9LY9myZfD390dUVBSuXr2KR48eoVevXpg7d67OneWsQbdu3ZCYmIhVq1bhhx9+wJUrV6BUKuHn54e+ffviueee005NrC0EQcCuXbvw/vvvY/PmzUhMTISXlxcGDx6MRYsWwdPTU2d7V1dXxMXFYdasWThw4AAuXboEPz8/TJ8+HQsXLqySZBYAvPzyy3jw4AHWr1+PpKQknDt3DgB0RtoNGjQIf//9Nz744AMcOnQICQkJcHd3x5AhQzBjxgw89dRTBs9/8+bN6Nu3L9atW4fTp0/j5s2baNiwIQYPHoyZM2dqk2elee2111CnTh0cOnQIV65cQUJCAurUqYNOnTph1KhRmDhxonbqZFlMnjkMMgfeRUlXKABgz4bDlg2DiIioBPbblWPPhsP47acDSEhIQFBQkKXDISKqNao1oaWZYggAI0eOxMiRI8vU3tRd6QYMGKCzf0MEQcDUqVMxderUUuMzl6k2AQEBJutDQ0NN1nt5eWHJkiVmTy2MiYkxWa9ZJN2Y8py/MRs3bsTGjRsrbX8a9vb2WLhwIRYuXGjW9vXq1cOmTZsM1kVERCAiIkKvfNy4cRg3bpxeeWk/r+LefPNNvPnmmya3ad26NTZv3mzW/jQEQcDLL7+Ml19+2ew2hn7uLVq0KNN1JCIiIiIiIrImFllDi4iIiIiIiIiIqLyY0CIiqmJH9ydCInbAs88+azVr9REREVHFHN2fiJ83/w2J2AFTpkyxdDhERLUOE1pERFUs50EeBEFAYWEhrl69aulwiIiIqBLkPMiDWlW08HzxO2oTEVH1YEKLiKiKFV97TaVSWTASIiIiqizs34mILMsidzkkKouyLMZOZI0EQdC+h8t6e3QiIiKyTuzfiYgsi795iYiqmET2398O3N3dLRcIERERVRr270RElsWEFhFRFZM62EOtVsPOzg4eHh6WDoeIiIgqgdTBHoKoaJRWnTp1LB0OEVGtw4QWEVEV6zqgJQqUefj5558RGRlp6XCIiIioEnQd0BLPjn4CBco8rFmzxtLhEBHVOkxoERERERERERGRTWFCi4iIiIiIiIiIbArvckhElWbfpjhIJPY6ZWqoIc+XQyqTQoBQq+pUKhWSkpPQrGkz+PrUM3TJiIiILMZQv22KqT7PmtpVpG3xvtvcOxd6e/mUKTYiIqocTGgRUaXZuX03/P39dcqUSiUSEhIQFBQEsVhcq+qys7Ph5uaGK5cOwtXV1dAlIyIishhD/bYppvo8a2pXkbbl7buVSmWZ4iMioorjlEMiIiIiIiIiIrIpTGgREREREREREZFNYUKLiIiIiIiIiIhsChNaRERERERERERkU5jQIiIiIiIiIiIim8KEFhERERERERER2RQmtIiIiIiIiIiIyKYwoUVERERERERERDbFztIBEFHNMX7oYEgkEp0yNdSQ58shlUkhQChXXR1vX3yzc1eVx09ERFSbGOq3TTHVb1u6nbu3Dz8rEBHVMkxoEVGl+eL5nnCRSSt9v2N3Har0fRIREdV2VdVvWwI/KxAR1T6cckhERERERERERDaFCS0iIiIiIiIiIrIpTGgRkVWbHXcG+RIZnn32WYSHh1s6HCIiIrIyL//0F/IlMvTv39/SoRARUTViQouIrFpKziNAEFBYWIirV69aOhwiIiKyMgqVChAEKBQKS4dCRETViAktIrJqKrX6v+cqlQUjISIiIiIiImvBhBYRWTWR8N9tukUi/soiIiIiIiIiJrSIyMq5Se21z93d3S0XCBEREREREVkNJrSIyKq5S+wBtRp2dnbw8PCwdDhERERkZexFIkCthr29fekbExFRjcGEVikEQYBQbMpTTRETEwNBEBAaGmrpUKiMrl+/DkEQEBAQUOa2AQEBEAQB169fr/S4qsrS4LaQFeTj559/RmRkpKXDISIiIisT3fdJyAryceDAAUuHQkRE1YgJrRoqIiICERER1Xa89PR0fPHFF3jxxRfRqFEjSKVSuLi4oEOHDli0aBGysrKqLRZzRUREaBOWZXnExMTo7Of777/X1s2dO9fkMTXJqOIPzcijpk2bYujQofj444+RlpZWhWeub/fu3YiIiEBCQkK1HpeIiIiIiIioPOwsHQBVjXfffRcAjCa1HB0d8fjjj6NBgwaVcrwhQ4YgLi4OAFCnTh20bt0aGRkZSEhIwKlTp7BhwwYcOnQIjRs3rpTjVYYGDRqgW7dueuVnz55FdnY26tevb/D6uLm56byOjo7WPt+8eTOWLFli1qi+jh07QiqVAgAePnyIf/75B7t27cKuXbswe/ZszJo1CwsWLIBYLC7rqRnVpEkTyGQyvSH5u3fvxqZNmxAQEICgoKBKOx4RERERERFRVWBCq5bq3LkzLl68WGn7E4vFGDt2LMLDw9G5c2dtQufUqVMICwtDUlISwsLCcPz48Uo5XkBAAFJSUqBWq8u9jwkTJmDChAl65aGhoYiNjcWECRNKHeV2//59HDhwAIIgwMXFBTdu3MDhw4cREhJS6vG3b9+uN20wOTkZkZGRWLVqFRYtWoSkpCRs2bKlLKdl0m+//VZp+zKk11d7IBKX/LWihlqt/vc9UTLRZ16dyM4Oob2f1amV58shlUm1r708PLB927eVdCZEREQ1n+F+2xRT/bZl24mF8n8mJCIi28SEFlWKnTt3Glywu3379oiOjkaXLl1w4sQJnDp1Cu3bt7dAhFVj27ZtUCgU6NatG9q1a4e1a9ciOjrarISWIU2bNsWKFSvQu3dvDBw4EN9++y2effZZjB07tpIjrxpzozbD0cnZIseOWvCWRY5LRERkqyzZb1c2fg4gIqp9uIZWGWzZsgWdO3eGs7MzPDw8MHjwYJw7d87o9rm5uViyZAnatm0LJycnuLq64sknn8SaNWtQWFios+2pU6cgCAI6dOigt58PPvhAu97SlStXdOpSUlJ0FgjXrAulUXK9Js1i4KUtCv/o0SN8+OGH6NixI1xdXeHo6IigoCB89NFHkMvletubuvvck08+qZ2md/nyZaPb2SLNdMORI0di1KhRAIpGXuXn51dov3379sUbb7wBAFi6dKnR7dRqNVavXo02bdrA0dER3t7eePnll3Hjxg2D25dcFF6zptemTZsAAOPHj9d5v1TnOmxERERERERE5mJCy0zLli3DqFGjcPPmTQQGBqKwsBB79uxB586dtWtHFZeWloannnoK8+fPx/nz59G0aVP4+/vj2LFjeOONN9C/f3+dpEe7du3g5uaG06dPIzMzU2dfhw8f1j6PjY3VqdO81owIKrkuVLdu3XQeMpms1HO9ffs2OnXqhFmzZuH06dPw8fFBQEAAzp8/j3feeQe9evVCXl5e6RftX0qlEgqFAgDg4OBgdjtrl5SUhD///BN2dnYYPnw4unbtikaNGiE7Oxt79+6t8P5fe+01AMClS5f0EpkaU6ZMwZtvvons7Gy0bNkSOTk52Lx5Mzp27IhLly6VegyZTIZu3brB29sbANCsWTOd90tlrbFGREREREREVJmY0DLTvHnzsGLFCty+fRvHjx/HnTt3MGrUKOTl5WH06NF6CZ7w8HCcPXsWrVq1wuXLl3H69GkkJibi+PHj8PHxwcGDB7Fw4ULt9iKRCMHBwVCpVDoJMqVSifj4ePj5+QEoPaE1YcIEnfZxcXE6D19fX5PnqVKpMHz4cCQmJmLEiBG4desWkpKSkJiYiGvXrqF79+6Ii4vDggULzL52P/zwAx49egSxWIwuXbqY3c7aaUZn9enTB56engCKRmoVr6uIFi1aoG7dugBgcO2x27dv48svv8S3336LlJQUnDhxArdu3UKvXr2QlpaGMWPGlLrGmK+vL+Li4tCvXz8AwJw5c3TeL4bWGLM2u9Yuw/oF0yBSFSI8PNzS4RAREVE1++rd6RCpCtG/f39Lh0JERNWICS0z9evXD9OnT4dIVHTJHB0dsWHDBvj6+iIlJQVbt27VbpuUlISdO3cCKEpsNGnSRFvXsWNHrF69GgCwZs0a5OTkaOt69OgBQDdpderUKWRnZ2P48OFo2LBhqQmtitq/fz+OHj2KTp06ITo6Gj4+Pto6f39/bNu2Dc7OzoiKijJrlFZubi5mzJgBABg7dqx2JFBNsHnzZgD/JbEAaKcd/vTTT0hLS6vwMerXrw8AuHfvnl5dYWFRAmfEiBHasrp16+Kbb76BTCbDsWPHEBMTU+EYDJHL5cjOztZ5WErGnVSoVEoIAK5evWqxOIiIiKyVNfXbVUFZWAgB0M4IICKi2oEJLTNNmTJFr0wikeCVV14BAPz888/a8oMHD0KtViM4ONjgAugvvPAC/P39kZubi/j4eG25JilVfIqh5nlISAhCQkKQkpKClJQUAEBqaiquXLmCxx57TCdpVhGaRNy4ceNgZ6d/z4B69eqhU6dOePjwIf7+++9S9zdx4kQkJSXB398fH330UaXEaA3i4uJw7do1ODo6YvDgwdrywMBABAUFobCwUCfJWV5OTk4AoJP4LM7Q+9Lb2xsvvvgiAN33ZWVaunQp3NzctA9N4s0S1GqV9rlKpTKxJRERUe1kTf02ERFRZWFCy0yBgYEmy4svdq553rJlS4NtRCIRWrRoodfuiSeegJOTE06ePImHDx8CKBqBJQgCunfvrk14aUZlVfboLAA4e/YsACAyMhLBwcEGH5qF8G/fvm1yX7NmzdKO6Nq9e7fJheON0SxiXvKhSeoZqiu+KH5V0UwpHDRokDbppKEZpVUZ0w417wNXV1e9Ont7ezRt2tRgO0Pvy8o0e/ZsZGVlaR83b96skuOYQxD++zWmGUFJRERE/7GmfpuIiKiy6A/BIYOMTZXTTMkrPoJGk4QwNb3OUDs7Ozt07doVBw8eRHx8PPr06YMjR46gTZs28PDw0JmSOGbMmCpJaGVlZQGAybs3apiacrh8+XJ8+OGHkEql2LNnD5544olyxdOpUyf4+/vrlZ84cQJyuVxnAfzqIpfL8d133wHQnW6o8dJLL2HmzJk4fvw4Ll26hMcff7zcx9J84DT0Xqpbt67RBI6h91dlkkqlkEqlVbLvsnJwdkFudiYAwN3d3aKxEBERWSNr6reJiIgqCxNaZkpLSzOYWNGsbeTi4qItc3Z21qkz5O7du3rtgKJ1tA4ePIjY2Fj4+vriwYMHGD16NACgadOm8PPzq9IRWprYDx48iF69epVrH+vWrcOMGTNgZ2eH7777Dk8//XS549m+fbvB8oCAAKSkpBi8w2RV27dvn/ZOlIMGDTK5bXR0NJYsWVKu4yQmJiIjIwMA0LlzZ736+/fvQ6VSGUxqGXpf1lQOzi7Ie5gDpUpZrlGAREREZNvEdnZQKBSwt7e3dChERFSNOD/HTBcuXDBZ3rx5c22Z5nliYqLBNiqVChcvXtRrB+iuo1V8/SyNHj164MqVKzh58iQuXrwIb29v7fTFyqCZJmnOCC1Dtm7ditdeew0ikQibNm0qNeFjizRTCV1cXODj42PwoUmsbN68udQ7DRoTFRUFoGj6YKNGjfTqFQoFrly5YrCtofelKdUxTbOqDHn9HUxctBIqkR0iIyMtHQ4RERFVs/ELP4ZKZIcDBw5YOhQiIqpGTGiZae3atXplBQUFWL9+PQCgT58+2vI+ffpAEATExcXh1KlTeu127tyJW7duwcnJSW/KXOfOnSGTyXD8+HH8+OOPAP67+2Hx54sWLdKrK87BwQGA6WmBhgwdOhQA8PnnnyM/P79MbQ8cOIAxY8ZApVJh7dq1Bqfj2br79+9rfy579+7FnTt3DD6uXbsGmUyGlJQUHDlypMzH+emnn7TvuTlz5hjdztD7Mi0tTTuyrfj70pTyvl+IiIiIiIiILIEJLTPt378fq1at0o62ycvLw6RJk5Camor69etjxIgR2m2bNm2qTQyNGTMGV69e1dadPHkSb775JgDgjTfe0JsSJpVK8eSTT6KgoAA//fQTWrZsCS8vL229ZrTW3r17dV6X1LhxYwD/TUs015AhQ9ClSxdcvHgRzz33HJKTk3Xq5XI59u/fjwkTJuiUx8XF4cUXX4RCocCyZcvw6quvlum4tmLr1q1QKBRo0KCByamerq6ueO655wCUbXH45ORkvP322xg4cCCUSiVGjx6tnXJakp2dHdauXaszLTMjIwOjR49Gfn4+OnbsiJ49e5p1XM375fDhw+UeUUZERERERERUXbiGlpmWLFmCadOm4YMPPkD9+vVx6dIlZGdnQyaTYfPmzXB0dNTZPjIyEpcvX8bZs2fRvHlztG7dGgqFQjsNsVevXoiIiDB4rB49eiA2NhZqtVovaRIYGAhvb2/tGknGkiphYWFYsGABBg4ciLZt22rvkrd161b4+voaPU+RSISdO3diwIAB+PXXX9GsWTM0bdoUdevWRU5ODpKTk1FQUKBddFxj4sSJyMvL0y4Cv2fPHoP7nzt3Lvr162f0+NZOk5waNWpUqdP0Ro8eje3bt2P79u1YvXo1ZDKZTv2wYcO0C7Tm5uYiNTVV+3OVSCSYP38+5s2bZ3T/fn5+6N+/P4YPH46GDRvCy8sL58+fR15eHurWrYuvv/7a7KmEQ4YMwdy5c7F161b88ccfaNCgAUQiEcaNG4dx48aZtQ8AWDhpiME1vdRqtdFYKqtOLBYjOOQpqKGGPF8OqUwKAbptK1pX378Bdn1v+L1NRERka4z126aY6pst2c5eLCnzvomIyLYxoWWmd955B/7+/li5ciXOnz8Pe3t7DBo0CIsXL0bbtm31tvfy8sIff/yBjz/+GN999x0uX74MkUiETp06YcyYMXj11VeNLlwZEhKCxYsXa5+X1KNHD+zYsQMeHh5o3bq1wX3MmjULSqUSW7duRWJiIuRyOQCYNY2wXr16+OOPP7BhwwZs3boVZ8+exY0bN+Dj44POnTujd+/eGDZsmE4bzf7lcjni4+ON7luzGL4tSkpKwl9//QUARkdNFdevXz/UrVsX9+/fx759+/Su2YkTJwAUJRFdXV1Rt25ddOvWDd27d8fo0aN1RuYZs2bNGrRo0QLr1q3DuXPn4OzsjKFDh+K9995Dw4YNzT63Jk2aYN++fXj//fdx6tQp3LhxA2q1GqGhoWbvAwAmzxwGmUPNvYvS7g1lG/FIRERkzWpSv71nw2FLh0BERNWMCa1SFJ9+NXLkyDKtC+Xk5IT58+dj/vz5ZTrmM888Y3Lal7E7/xVnb2+PiIgIo6PAQkNDTR5DKpUiPDwc4eHhpR4LAK5fv27WdpWlKo8XExNjsLxZs2Zlmo5nb2+P9PR0nbKAgIAKT+kruY8333xTO421NKauW58+fcxec4uIiIiIiIjIkriGFhERERERERER2RSO0CIiMuLo/kTI8xSQOtij64CWAIDw8HBkZGTAw8MDkZGRFo6QiIiIfvnmJCRiB/Tv3x8HDhywdDhERFRNmNAiIjIi50Ee1Co15HkK/L7jNKRiByQnJ0OlUiEzM9PS4REREREAlUoFQRCgUCgsHQoREVUjTjkkIjJCu1aZGpA/UkAQRFCpVACg/ZeIiIiIiIiqHxNaRERGaG8TLgBSR3uo1Srt7c3LeptzIiIiIiIiqjz8RkZEZIREVjQrW+pgj54vtoNcmQcPDw8AgLu7uwUjIyIiIiIiqt24hhYRkRFSB3udfwFoE1qaf4mIiMiyRCIRlIVK2Nvbl74xERHVGExoEREZobmzYXG8syEREZF16TOqA/ZsOIxDBw5ZOhQiIqpGnHJIREREREREREQ2hQktIiIiIiIiIiKyKZxySESVZt+mOEgkuutXqKGGPF8OqUwKAYJN19X3b2D+xSAiIrJyhvptU0z1lZZu5+3lY/Z+iYioZmBCi4gqzc7tu+Hv769TplQqkZCQgKCgIIjFYpuvIyIiqikM9dummOorrakdERHVDpxySERERERERERENoUJLSIiIiIiIiIisilMaBERERERERERkU1hQouIiIiIiIiIiGwKE1pERERERERERGRTmNAiIiIiIiIiIiKbwoQWERERERERERHZFCa0iIiIiIiIiIjIpthZOgAiqjnGDx0MiUSiU6aGGvJ8OaQyKQQIZa7zqd8AW3btrurQiYiIah1D/bYppvpta2pXkbYqlRJNvDwQ1rc3RCJxmY4nljli98+/lClOIiIqPya0iKjSfPF8T7jIpJW6zzG7fqvU/REREVGRqui3a4be5WoV9u2BSo6DiIhM4ZRDIiIiIiIiIiKyKUxoERERERERERGRTWFCi4is0uy4Mwg/9DfkEgeEhYUhPDzc0iERERERGfTyT38Bru547rnnLB0KEVGtwTW0iMgqpeQ8glKtBgCkp6cjMzPTsgERERERGaFQqQBBgEKhsHQoRES1BkdoEZFVUv2bzIJQdGcilUplwWiIiIiIiIjImjChRURWSfRvIgv/JrZEIv66IiIiIiIioiL8hkhEVslNaq/z2t3d3TKBEBERERERkdVhQouIrJK7xB4eMgkAwNPTEx4eHhaOiIiIiMgwe5EIUKthb29f+sZERFQpmNAisrCNGzdCEASMGzfO0qFYlaXBbRH59BOQFuRh27ZtiIyMtHRIRERERAZF930SyM7Evn37LB0KEVGtwYQWUTkEBARAEARs3LjR0qEQERERERER1TpMaBFZmJubGx5//HHUq1fP0qEQERERERER2QQ7SwdAVNsNGTIEQ4YMsXQYlaLXV3sgEpf8taKGWq2GIAgAhDLXie3tEdr7Wb1jyfPlkMqkBuOQ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X39F3759LR0WWRm1Wv3vE0D+SAFBEEEmk+H+/ftQqVQAoP2XiIiIiIiIyo8jtIjMEBQUxEQElUoQhKKklgBIHeyRnyuHXF4APz8/7Qitst4enYiIiIiIiPTxmxURUSWRyIr+RiB1sEfPF9shX/EIR48exZdffgkPDw8A+nfGJCIiIiIiorLjCC0iokoidbDX+bc4TUJL8y8RERHZDpFIBGWhEvb2+n08ERFZBhNaRESVpOSdDYuLjIzUPlcqldURDhEREVWSPqM6YM+Gwzh04JClQyEion9xyiEREREREREREdkUJrSIiIiIiIiIiMimcMohEVWafZviIJHori2hhhryfDmkMikECLWqzrOut6HLREREZBUM9dummOrzrKldRdqqVCokJSehWdNmencm9vbyKVMMRERUtZjQIqJKs3P7bvj7++uUKZVKJCQkICgoCGKxuFbVZWdnw83NzdClIiIisjhD/bYppvo8a2pXkbaavvvKpYNwdXUt0zGJiKh6ccohERERERERERHZFCa0iIiIiIiIiIjIpjChRURERERERERENoUJLSIiIiIiIiIisilMaBERERERERERkU1hQouIiIiIiIiIiGwKE1pERERERERERGRTmNAiIiIiIiIiIiKbYmfpAIio5hg/dDAkEolOmRpqyPPlkMqkECBYpM7d2wff7NxVWadJRERUIxjqt00x1f9aU7uKtFWplGji5YGwvr0hEomr7Hj8bEJEVHFMaBFRpfni+Z5wkUktHYaesbsOWToEIiIiq2Ot/bbl9a7yI/CzCRFRxXHKIRERERERERER2RQmtIiIiIiIiIiIyKZwyiER1Viz484gs0ABub0U4eHhyMjIgFQqxVdffWXp0IiIiKiWevmnv1AgkaF///7Yt2+fpcMhIrJZTGgRUY2VkvMISrUaEAQkJydDpVJBJOLAVCIiIrIchUoFCAIUCoWlQyEismn8ZkdENZZKrS56IghQqVQAALWmjIiIiIiIiGwWE1pEVGOJhH9vm61Wa0dmCULZbvtNRERERERE1ocJLSKqsdyk9trnHh4eAAAXFxdLhUNERERERESVhGtoEVGN5S4pSmg9eJSvTWhJpVJLhkRERES1nL1IhAKlEvb29qVvTERERnGEFlEViomJgSAICA0NtXQotdLS4LaIfPoJSBVyREZGYsuWLZg6daqlwyIiIqJaLLrvk5AV5OPAgQOWDoWIyKYxoUVUioCAAAiCgI0bN5rcLjQ0FIIgICIiolKPW/zh4OCAJk2aYMKECTh//nylHIeIiIiIiIjI1jChRVSFHB0d8fjjj6NBgwbl3kezZs3QrVs3dOvWDU2aNMGtW7fw1Vdf4YknnsC+ffsqMVoiIiIiIiIi28A1tIiqUOfOnXHx4sUK7WPOnDkYN26c9vXdu3cxevRo/Prrrxg/fjyuX78OZ2fnCkZaOXp9tQcicclfK2qo1ep/7y5Y8g6D1VMnshMjtPezAAB5vhxSmeF1tCq7TqVSoV6DAAwc8gJEIhG8PDywfdu3BvdBRERU3Qz326aY6n+tqV3FjlmgKIDEXlLmduYeT62Q48mgtmXYNxERGcKEFpGN8fHxQXR0NAICAnD//n0cPHgQQ4YMsXRYAIC5UZvh6GQdyTVrFLXgLUuHQEREpMV+2zKiFryFb3busnQYREQ2j1MOiapQVS0K7+vri2bNmgEAkpKSAADXr1+HIAgICAgAAKxbtw6dOnWCi4vLv38t/M/Ro0cxdOhQ+Pj4QCKRwN/fH2PGjMGFCxcqNU4iIiIiIiKiqsCEFpGNUqvVRuvCw8MxefJk3L17Fy1atIC7u7u2LjIyEsHBwdi1q+gvg+3atUNubi6io6PRoUMH7N+/v6pDJyIiIiIiIqoQJrSIbNCdO3eQnJwMAGjatKlO3a1btxAdHY09e/bgxo0bOH78OFJTUwEACQkJePPNN6FWq7Fs2TL8888/OH78OO7cuYPXX38d+fn5GDVqFP75559qP6eabNfaZdiybD5EqkKEh4dj5MiRWLVqlaXDIiIiomr21bvTIVIVon///pYOhYjI5jGhRWSm8ePHQxAEo4/Y2NhqiePevXt4+eWXIZfLUadOHfTu3VunXqlUYtGiRRg0aJC2zMHBAQCwfPlyFBYW4vnnn8eMGTMgEhX9CpBKpfjss8/QqlUrZGVlITIy0mQMcrkc2dnZOg8yLuNOKnKzMwEAycnJSE9PZ9KQiIiqDftt66EsLIQAQKFQWDoUIiKbx0XhiczUrFkzeHt7G60/e/ZslXxAfP/99/Hll18CADIzM5GUlISCggLY29tj3bp1cHFx0WszZswYg/v65ZdfAAD/+9//9OoEQcCbb76JV199Fb/88gsWLVpkNKalS5fi3XffLc/p1EpqtQpA0T2PVCrVv2XGp4wSERFVJvbbRERUEzGhRWSmOXPmYNy4cUbrQ0NDq2SUVlJSknbhd4lEAl9fX/To0QNvv/02goKC9Lb39PSEp6enXnlmZibS0tIAAC1btjR4rFatWgEALl++bDKm2bNnY/r06drX2dnZqF+/vlnnUxsJgghqtRJqAGKRCCqVSm+hfiIioqrCfpuIiGoiJrSILCA4OFivrF69eti+fbte+VdffWUykVaSk5OTwfKHDx9qnxsbaebj4wMAyMnJMXkMqVQKqVRqdky1nYOzi3bKoYeHB9LT0w2OrCMiIqoK7LeJiKgmYkKLyALi4+P1yho2bFilx3R2dtY+v3fvHurVq6e3zd27dwGAyZZK5uBcdD0fZmfCw8MDAPjFgoiIqBYS29lBoVDA3t7e0qEQEdk8JrSILMAS6ye5u7vDy8sLaWlpSExMNJjQOn/+PACgefPm1R1ejTbk9XcAAFEL3kJkZCSUSiUSEhIsGxQRERFVu/ELP0bUgrdw4MABS4dCRGTzeJdDolrk2WefBQCsXr1ar06tVmvLNdsRERERERERWSMmtIhqkbfffht2dnbYs2cPVqxYob3jXkFBAaZOnYpz587Bzc0N4eHhFo6UiIiIiIiIyDhOOSSqRYKCgvDpp59iypQp+L//+z989NFHaNCgAZKSkpCZmQmpVIpvvvkGvr6+5dr/wklDIBLp58nVarXRu/rV9LqCggJIJBIAgFgsRnDIU1BDDXm+HFKZFAIEeHv5YOeO3QbbExERVRVj/bYppvo8a2pXkbbF++6qOJ69uOz7JiIifUxoEdUy4eHhaNu2LZYvX474+HgkJCTAy8sLAwcOxOzZs9GyZcty73vyzGGQOXCx87Las+GwpUMgIqJaiP22ZbDfJyKqHExoEZXi+vXrZm0XExOjVxYaGlruBeDNPa5GQECA2cfq1q0bunXrVo6oiIiIiIiIiCyPa2gREREREREREZFN4QgtIiILObo/EfI8BezFUoSHhyMjIwN16tTBpEmTLB0aERERVYFfvjkJidgB/fv3x4EDBywdDhGRTWNCi4jIQnIe5EGtUkOACMnJyVCpVMjMzLR0WERERFRFVCoVBEGAQqGwdChERDaPUw6JiCxEs+aZIAhQqVQAoP2XiIiIiIiIjGNCi4jIQjS39lar1drbppf19ulERERERES1Eb85ERFZiESmmfWthoeHBwDA3d3dYvEQERERERHZCq6hRURkIVIHewBAXm6+NqFVp04dS4ZEREREVUgkEkFZqIS9vb2lQyEisnlMaBERWUjXAS0BAHs2HEZkZCQAQKlUIiEhwYJRERERUVXpM6oD9mw4jEMHDlk6FCIim8cph0REREREREREZFOY0CIiIiIiIiIiIpvCKYdEVGn2bYqDRKK7JoQaasjz5ZDKpBAg1Ko6lUqFpOQkNGvaTOfuhSXbeHv5gIiIqLoZ6rdNMdXnWVO7irQ11ndX5vHY7xMRVQ4mtIio0uzcvhv+/v46ZZo1oYKCgiAWi2tVXXZ2Ntzc3HDl0kG4urqa1YaIiKi6GOq3TSlv/1Xd7SrS1ljfXZWxEhFR+XDKIRERERERERER2RQmtIiIiIiIiIiIyKYwoUVERERERERERDaFCS0iIiIiIiIiIrIpTGgREREREREREZFNYUKLiIiIiIiIiIhsChNaRERERERERERkU5jQIiIiIiIiIiIim2Jn6QCIqOYYP3QwJBKJTpkaasjz5ZDKpBAgWLxOLHPE7p9/qeipEhER2TxD/bYppvpYa2pXkbYqlRJNvDwQ1rc3RCJxlR+P18Z62lWkLa+NcbZ8bdy9ffDNzl1m74OqHxNaRFRpvni+J1xkUkuHYVLYtwcsHQIREZFVsIV+2zJ6WzoAK8ZrYxyvjXG2eW3G7jpk6RCoFJxySERERERERERENoUJLSIiIiIiIiIisimcckhEtcLsuDPILFAAru4YOXIkPDw8EBkZaemwiIiIiIjICmi+L7hL7LE0uC0AIDw8HBkZGfzuYKWY0CKiWiEl5xGUajUAID09HZmZmZYNiIiIiIiIrIbm+8KD/AKEH/ob+RIZkpOToVKp+N3BSnHKIRHVCqp/k1kQiu5aolKpLBgNERERERFZE833BTWAjPwCQBC03xn43cE6MaFFRLWC6N9EFv7tqEQi/vojIiIiIqIimu8LAgAPmQRQq7XfGfjdwTrxp0JEtYKb1F7ntbu7u2UCISIiIiIiq6P5vlBHJkHk009AVpAPDw8PAPzuYK24hhYR1QrukqIOKiNPDk9PT23nREREREREpPm+oPkXgPY7A787WCcmtKjKxMTEoGfPnggJCUFMTIylw6lWtfncrZXmTiVh3x7AloMHIRaLLRwRERERERFZC833heJ4Z0PrximHZFJAQAAEQcDGjRtNbhcaGgpBEBAREVHmYxw4cABjxoxBkyZN4OzsDAcHBwQEBOCFF17A1q1boVAodLaPiIiAIAilPkJDQ8scCxERERERERFZP47Qoirj6OiIxx9/HA0aNDBYn5aWhrCwMPz+++8AABcXFzRu3Bj29va4ceMGdu7ciZ07d6JZs2aIjY1FvXr1dNq7urqiTZs2Ro9vqo6IiIiIiIiIbBcTWlRlOnfujIsXLxqsy8rKQnBwMC5fvoxmzZrho48+Qv/+/WFv/9985RMnTuCjjz7C9u3bcffuXb2EVvv27Tmdz8r0+moPROKSv1bUUKvVEAQBRfcMsWwdRCI807e/wfjl+XL4PeaLHdu2mjpNIiKiGsFwv22KqT7WmtpV7JgFigJI7CVlbsdrU/nH47WxlnYVO6Y1Xhu1Qo7HH/Mp3gryfDmkMimEf9u5e/sYa05WggktsogpU6bg8uXLaNmyJQ4fPoy6devqbdOxY0ds27YNI0aMgJOTkwWipLKaG7UZjk7Olg6jQqIWvGXpEIiIiKpFTei3iYjKI2rBW9h/8Gfta6VSiYSEBAQFBXGtXRvCNbSoysTExBhcyyo5ORnffvstAGD9+vUGk1nFDRkyBM2aNatQLEeOHIFYLIaTkxMuXbqkV5+YmAgHBweIxWIcOXJEW65ZrysiIgJ37tzBxIkT8dhjj0EmkyEwMBDLly9HYWFhmeO5ceMGwsPD0ahRI0ilUnh6eqJfv3748ccfDW5fPI60tDS88cYbCAgIgL29PcaNG6ez7c8//4xBgwbBx8cHUqkU/v7+GD9+PK5cuaK33+vXr0MQBAQEBAAA1q1bh06dOsHFxeXfv2oQERERERERWR8mtKjafffdd1CpVGjfvj26dOlSLcfs3r073n77bTx69AijR4/WSUIpFAq8/PLLyM/Px4wZM9C9e3e99vfv30fnzp2xadMm+Pj4oGHDhrh48SJmzJiBYcOGQaVSmR3LX3/9hXbt2iEqKgppaWlo06YNHBwc8NNPP6F///5YsGCB0bZpaWno2LEjoqKi4ObmhpYtW+r8BWHatGno27cv9u3bBwBo1aoVcnJysHHjRnTo0AFHjx41uu/w8HBMnjwZd+/eRYsWLeDu7m72ORERERERERFVJya0qNppkiohISHVetwlS5agbdu2OHHiBN59911t+cKFC3Hy5Em0a9cOixYtMtg2KioK7u7uSE5OxqlTp3Dp0iXExsbCzc0Nu3fvNvt2ro8ePcLw4cORmZmJ4cOH459//sGJEydw8+ZNbNy4EWKxGIsXLzY6Uuvzzz+Hn58frl+/jtOnT+P06dNYs2aNtm7VqlVo1KgRfv/9d9y9excnT55ERkYGlixZguzsbISFhSE/P19vv7du3UJ0dDT27NmDGzdu4Pjx40hNTTXrnGqKXWuXYcuy+RCpChEWFobw8HBLh0RERERERBWg+Yy/a+0yk9tNmTIF7733HqZMmVJNkVFlYEKLzDJ+/HgIgmD0ERsba/a+bt++DQBo1KhRhWKKjY01GdPKlSt1tpdIJNi8eTOkUimWLl2KP/74A0ePHsWyZcsgk8nwzTffQCKRGDxWYWEhNm7cqJ2aBwA9evTA4sWLAQDLly+HWq0uNeYtW7bgxo0b8PHxwaZNm+Di4qKtGzt2LF599VUAwNKlSw22t7Ozw44dO+Dv768tk8lkKCgoQEREBMRiMb7//nudaZ5isRhz587FCy+8gFu3bmH79u16+1UqlVi0aBEGDRqkLXNwcDB6HnK5HNnZ2ToPW5dxJxW52ZkAgPT0dFy9etWyAREREVWSmthvExGZQ/MZ//4/t7Bl2XztQ/NHbM3jypUryMrKwrVr1ywdMpUBF4UnszRr1gze3t5G68+ePWv2h6OcnBwAqPBC766urmjTpo3Rej8/P72yNm3aYMmSJZgxYwZefvllqNVqKJVKfPTRR2jVqpXRfT311FPo0KGDXvmECRPwzjvv4Pr167h06RJatGhhMuZffvkFADBp0iTIZDK9+qlTp2Lt2rU4evQocnNz9a5Rr1698Nhjj+m1++OPP3Dnzh106tQJ7du3N3jsQYMG4fvvv0dsbCxefvllvfoxY8aYjL24pUuX6oxyqwnU6qJpo5qVw8oyjZSIiMia1cR+m4jIHJrP+Gq1WvvHa6DoM396erre9vwOYFuY0CKzzJkzR2/x8eJCQ0PNHqWlGZWUm5tboZjat2+PmJiYMrebPn069u/fr2379NNPY9q0aSbbBAYGGix3cnJC/fr1kZSUhMuXL5ea0Lp8+TIAoGXLlgbrmzVrBolEgoKCAly5cgVt27Y1K46zZ88CKFrkPTg42OA2mZmZAP4bIVecp6cnPD09TcZe3OzZszF9+nTt6+zsbNSvX9/s9tZIEERQq5VQo6iDE4k4gJWIiGqGmthvExGZQ/MZXxAEOLq4acsfZmfCq9j3n4yMDKhUKn4HsDFMaFG18/PzQ0JCgsWGc4pEIoSEhGgTWuPGjSv1jn6mRqf5+PggKSlJO/LMlIcPH5rcnyAI8PLywu3btw3uz9iotqysLABFi8anpaWZjCEvL8/s/RojlUohlUrL1MbaOTi76PzVhoviExFRTVET+20iInNoPuM7urhh5DuLteVRC97Ctm3btK/DwsKQnp7O7wA2hulHqnZdu3YFgDKtu1WZEhISsHTpUm32/Z133jE43LQ4U0mie/fuAYDOeljGODs767QpSa1Wa49lzv5K7nfUqFFQq9UmH+UZ1VYbODi7wMnVHUDRiDUPDw/LBkRERERERBWi+Yzv4Gz6u1WdOnXg5uaGOnXqVFNkVBk4Qouq3bBhwzB//nycOnUKf/75J7p06VJtx87Pz8fo0aNRUFCAJUuWICEhATt27MBrr72GHTt2GG134cIFg+WPHj3CjRs3AADNmzcv9fjNmzfH6dOnkZiYaLA+KSkJBQUFEIvFaNKkiRlnVEQzhfHcuXNmtyFdQ15/B4D+X2uIiIiIiMg2aT7jl2bNmjVISEhAUFBQ1QZElYojtKjaNWvWDGFhYQCAiRMnIiMjw+T2u3fvRlJSUqUce86cOTh//jy6dOmCWbNmISoqCr6+vvj+++/x9ddfG2139OhRJCQk6JVv2LAB+fn5aNiwIR5//PFSj//ss88CANatW4f8/Hy9+k8//RQA0K1btzJNA+zevTs8PT1x+vRpjsAiIiIiIiKiGo8JLbKINWvWoEmTJkhMTESXLl2wd+9eKBQKnW0SEhIwcuRIDB06tMILyAPA77//jpUrV8LR0RFff/01xGIx6tatiw0bNgAA/ve//2lHW5VkZ2eHcePGISUlRVsWFxeHBQsWAAD+7//+r9R1uADgpZdeQoMGDXD37l2MGzdOu6YWAGzevBmff/45AGDWrFllOjeZTIZFixYBKBoBt2vXLqjVap1tzp07h5kzZyI+Pr5M+yYiIiIiIiKyNpxySBZRp04dxMfHY/jw4Th8+DCef/55uLi4oHHjxrCzs8PNmze160y1aNECPj4+evs4deqU0Tv6AUVrUP34448AihZNHzduHNRqNVasWIFmzZppt+vXrx9ee+01REVFYezYsTh06JBecurVV1/F3r170bRpU7Ru3Rp5eXm4dOkSAOC5557D66+/btZ5Ozo64rvvvsOzzz6Lbdu24YcffkBgYCDu3r2LmzdvAgDmzZuHfv36mbW/4sLDw3Hjxg188MEHGDp0KDw8PNCkSRMolUpcv35dOxKuZ8+eZd63uRZOGmLwziBqtdpows/a6uzsxAgOeUq3HGrI8+WQyqQQIBisq+/fALu+32Nwv0RERNbIWL9tiql+1JraVaRtQUEBJBJJtR2P18Z62lWkLa+NcdV5bdQqAX7+jSGVmb4RhhfXy60RmNAii/Hx8UFsbCx++OEHbN26FUePHkVSUhKUSiV8fX3xwgsvYPjw4Rg6dCjs7PTfqtnZ2SZHG7m5/Xdb1jfeeAM3btxA37598dprr+ltu2LFCvz222+IiYnBxx9/jLffflun3tPTE8eOHcPcuXPx448/4v79+3j88ccxYcIETJ8+vUwfBp988kmcPn0aS5cuxU8//YQzZ87AyckJffr0wdSpU9G/f3+z91XS0qVL8dxzz2HNmjU4cuQITp8+DWdnZ/j7+2Pw4MF44YUX8Mwzz5R7/6WZPHMYZA618y5KuzdY5iYHRERE5VWb+20iqpl2b4jFpx+vQFBQEMRisaXDoSrGhBaZdP36dbO2M7RuU2hoqN60N0MGDhyIgQMHmh1TREQEIiIizN4eAKKjoxEdHW203tHREZcvXza5D19fX6xfv96s45V27g0bNkRUVJRZ+wLKds5du3bV3kmyNAEBAWb9jIiIiIiIiIisCdfQIiIiIiIiIiIim8IRWkRE5XR0fyLkeQpIHewhEcsQFhYGDw8PREZGWjo0IiIiIqIaq/jn8K4DWhrcJjw8HBkZGfx8XoMxoUVEVE45D/KgVqkhz1NAgAjp6enIzMy0dFhERERERDVa8c/hv+84rS2Xih3w3nvvwd7eHhkZGVCpVPx8XoMxoUVEVE7a9cfU0N6BRaVSWTAiIiIiIqKar/jncPkjhbZcEETIysrS2Zafz2suJrSITCjPAvRUewiCUNSZCoBaVXRb4bLe/pyIiIiIiMqm+OdwqYO9tjw/Vw539zo6I7T4+bzm4k+WiKicJLKivwkUdaJFfyVyd3e3XEBERERERLVA8c/hPV9sp33IlXmYO3cutmzZAg8PDwD8fF6TcYQWEVE5af4aJHWwR15uPrw8PbUdJxERERERVY3in8ON0Xwu5+fzmosJLSKicip+R5XdG2Kxbds2C0ZDRERERFQ7GLuzYXG8s2HNxymHRERERERERERkU5jQIiIiIiIiIiIim8Iph0RUafZtioNEojuPXQ015PlySGVSCBBqbF19/walXB0iIiLrYqjfNsVUf2hN7SrSVqVSISk5Cc2aNivTndF4bSr/eLw21tOuIm2r+9p4e/qYvS3ZPia0iKjS7Ny+G/7+/jplSqUSCQkJCAoKglgsrtF1REREtsRQv22Kqf7QmtpVpG12djbc3Nxw5dJBuLq6VvnxeG2sp11F2vLaGGepa0O1A6ccEhERERERERGRTWFCi4iIiIiIiIiIbAoTWkREREREREREZFOY0CIiIiIiIiIiIpvChBYREREREREREdkUJrSIiIiIiIiIiMimMKFFREREREREREQ2hQktIiIiIiIiIiKyKXaWDoCIao7xQwdDIpHolKmhhjxfDqlMCgFCrapTqZRo4uWBsL69IRKJjbZx9/bBNzt3gYiIqDoZ6rdNMdXnWVO7irQ11ndX1fEqux0/UxBRbcKEFhFVmi+e7wkXmdTSYViZ3qVuMXbXoWqIg4iISBf7bWNK77utFT9TEFFtwimHRERERERERERkU5jQIiIiIiIiIiIim8Iph0REFjI77gxSch5BKZEhPDwckZGRlg6JiIiIrMjsuDPILFDAXWKPpcFtK2WfU6ZMwb179+Dt7Y2oqKhK2ScRkSUwoUVEZCEpOY+gVKsBQcDVq1ctHQ4RERFZGc1nhQf5BQg/9Hep2+dLZAgLCzO5TUZGBlQqFXJzcysrTCIii2BCi4jIQlRq9X/PVSoLRkJERETWSPNZQQ0gI7+g9AaCgPT0dPP2zc8eRGTjmNAiIrIQkSAUjdACIBJxSUMiIiLSpfmsIACoI5OUun1GnhyeXl6mt/l3hBY/exCRrWNCi4jIQtyk9tq/trq7u1s2GCIiIrI6ms8KdWQSRD79RKnbj911CNu2bTO5TVhYGNLT0/nZg4hsHhNaREQW4i6xR5ZcAaVKBQ8PD0uHQ0RERFbGXWKv829lqFOnDhQKBerUqVNp+yQisgQmtP4lCAIAQF1sTRsioqqkuVvR2F2HeIdDIiIi0lNZdzYsbs2aNUhISEBQUFCl75uIqDpx4jRRBVy/fh2CIJT6SEhI0Gv7/fffa+vnzp1r9nEcHR3xzz//GN3Wzs4OgiDg+vXrJvc3a9YsdOzYEZ6enpBIJPD09ESPHj2wZMkS3Lp1y9xLQERERERERFTtOEKLqJJ07NgRUqnUYJ2zs7NeWXR0tPb55s2bsWTJEu1IQVPy8vKwdOlSfPrpp+WKc+nSpYiIiEBBQQFEIhGaNGmCJk2a4P79+4iLi8ORI0fw3nvvYd26dRg9enS5jkFERERERERUlZjQolpn3Lhx2LRpE37//XeEhoZW2n63b9+OgIAAs7a9f/8+Dhw4AEEQ4OLighs3buDw4cMICQkpta1IJMIXX3yBmTNnws/Pr0wxzpw5E8uWLYO9vT0WLlyIN954A56entr6O3fuYNOmTfjwww9x4sSJMie0en21ByJxyV8raqjV6n+TdSUTdjW/rkBRAIm9pESdbhuRnRihvZ/V1srz5ZDKDCdHLVHn95gvdmzbarCeiIhsl+F+2xRTfZ41tavYMQ333VV3vNLaqRVyPP6YT8lW2v5bKNbO3dunZHMiohqLCS0iC9i2bRsUCgW6deuGdu3aYe3atYiOji41oSUWizFs2DBs3boV77//PtasWWP2MQ8ePIhly5ZBJBJh165dGDBggN42vr6+mDlzJkaPHo2YmJiynhbmRm2Go5P+aDSybVEL3rJ0CEREVAXYb9uGqAVvYf/Bn3XKlEqldh0ssVhsociIiCyLa2gZsGXLFnTu3BnOzs7w8PDA4MGDce7cOb3t2rVrB0EQcObMGZ3yu3fvatc7mj9/vl670NBQCIKgkzC4c+cOVq9ejWeffRYBAQGQyWSoU6cOQkJCdKamlYUmBgDYtWsXunbtCmdnZ/j4+GDs2LG4c+eOdtuvvvoKTzzxBJycnODt7Y3XXnsNWVlZRvd969YtvPnmm2jevDkcHBzg7u6Onj17YseOHQa3L37OZ86cwfPPPw9PT0+4urqiV69eOHHihHbbI0eOoG/fvvDw8ICLiwsGDBiAixcvlusaWCvNz3TkyJEYNWoUgKIRXvn5+aW2XbhwIUQiEb788kvcvHnT7GMuXrwYADBp0iSDyazi/Pz8tHERERERERERWRsmtEpYtmwZRo0ahZs3byIwMBCFhYXYs2cPOnfujLi4OJ1te/ToAQCIjY3VKS/+umSdXC7HX3/9BalUii5dumjLv/zyS7z55ps4cuQI7Ozs0KZNG7i6uuLw4cMYM2YMwsPDy31Oq1evxtChQ3Hz5k00bdoUWVlZ+Prrr/HMM88gPz8fU6dOxYQJE5CZmYlGjRrhwYMH+Pzzz/H8888bvOtjbGwsWrdujdWrV+PWrVto1qwZXF1dERMTg2HDhuH//u//jMby119/oUuXLjh8+DACAgIgEonw22+/4emnn8b58+exfft2PP300zh16hQaNWoElUqFAwcOoEePHrh79265r4E1SUpKwp9//gk7OzsMHz4cXbt2RaNGjZCdnY29e/eW2r5FixZ46aWXUFBQgCVLlph1zNTUVBw5cgQA8Prrr1cofiIiIiIiIiJLY0KrhHnz5mHFihW4ffs2jh8/jjt37mDUqFHIy8vD6NGjkZeXp91WMz3MWELLz88Px44d0xl1o3nduXNnyGQybXloaCgOHTqEnJwcJCcn4/jx40hJScHp06cRGBiIqKgoveOYa/bs2diyZQtu3ryJhIQEJCcno2nTpkhMTMRLL72ETZs24ddff8WVK1dw7tw5nDx5Eh4eHoiNjcVPP/2ks6/U1FQMHToU2dnZeP/99/HgwQOcOXMGN27cQHx8PPz8/LBixQr88MMPBmOZP38+wsPDcffuXZw4cQJ3797F888/j5ycHLzxxhuYPHkyPvzwQ/zzzz/4+++/cfv2bXTu3BlpaWn4+OOPy3X+1kYzOqtPnz7a9atGjhypU1eahQsXQiwW46uvvjJ5N0ONo0ePAgDq1KmDtm0r//bPVPPsWrsMW5bNx661y7Rl4eHhCAsLq1CCnYiIiAwz1PeWBftpIqptmNAqoV+/fpg+fTpEoqJL4+joiA0bNsDX1xcpKSnYuvW/hZE1I7QOHz6ss4/Y2Fh4eHhg4sSJkMvl+PPPP3XqAOitlRQcHIyePXvqzYFv27YtVq9eDQD45ptvynVOr7zyCl566SXta39/f8yYMQMAsHv3bkREROCZZ57R1rdp0waTJ08GAL2E1ooVK5CRkYFp06Zh9uzZOnf169q1K6KiogAAn3zyicFYWrdujeXLl0MikQAApFIpli0r6rRjYmIQEhKic/3d3d2xaNEig7FYm0aNGmmneRZ/RERE6Gy3efNmAP8lsQBop/f99NNPSEtLK/VYzZo1w+jRo6FQKMwapXX79m0AMHvR+tLI5XJkZ2frPKhmybiTitzsTNz/5xZEqkKEhYUhOTkZ6enpuHr1qqXDIyKiMmC/bRuK971bls3XPjT9cPHHyJEj8d5772HkyJHaMvbTRFTbMKFVwpQpU/TKJBIJXnnlFQDAzz//tyCjt7c3WrRogbS0NFy4cAFA0d3rEhMT0aNHD+0d9IqPrNIkvzTJsOJycnKwbt06jB07Fn369EH37t0RHByMWbNmAQBOnz5drnOaOHGiXllQUJD2+YQJE/Tq27dvDwB6HeLOnTsBQHs9Surbty8kEgmOHj2KwsJCvfrx48dr1/XSaN68ORwdHY3GaiwWa9OxY0d069ZN79GgQQPtNnFxcbh27RocHR0xePBgbXlgYCCCgoJQWFiokzQ1Zf78+bCzs8OmTZtKvTY5OTkAACcnp7KfmAFLly6Fm5ub9lG/fv1K2S9ZD7Va9e+/aggA0tPToVIVlWn+JSIi28B+2zYU73tzszO1D00/XPKRlZWl85r9NBHVNrzLYQmBgYEmyy9fvqxT3qNHD1y8eBGxsbEIDAzE4cOHoVarERISgi5dukAikWgTWoWFhTh69Cjs7OzQtWtXnf2cOnUKAwcORGpqqtHYMjIyynVOTZo00Svz8vLS/uvq6mq0/uHDh9qyhw8faqe3aUZwGZOfn4/79+/Dx0f31sGGYgEAT09P3Lhxw2SsxWMxx7hx47Bp0yaj9T179jRY/vvvv2uTkWWxffv2UkdAaaYUDho0SC+5NGrUKCQkJCA6Ohr/+9//Sj1ekyZNMGbMGGzYsAGLFy/GV199ZXRbFxcXAEBubm6p+zXH7NmzMX36dO3r7OxsfjiuYQRBBLVaCUEQoFKr4eXpiYyMDKhUKu0ISiIisg3st21D8b7X0cVNW/4wOxNe/y5TUZxCoYC9vb32NftpIqptmNAqwdvb22C5JjGjGemiERISgi+++AKxsbF47bXXdKYUOjg4oFOnTvjzzz9RUFCAkydPIjc3F126dNFJZiiVSgwfPhypqano378/Zs6ciVatWsHd3R1isRjJyclo1qwZFApFuc5JM/qpOM0oKUN1xeuLLwpf/K6H8fHxpR63+HpjpmIpLZ6SI7rM1bx5c3Tr1k2vPCkpCffu3UPr1q3h5uamV2+orDLI5XJ89913AHSnG2q89NJLmDlzJo4fP45Lly7h8ccfL3Wf8+fPR3R0NKKjozFnzhw0a9bM4HZ+fn4AYNZ6W+aQSqU6002p5nFwdkFudiYcXdyQ/fAhtm3bhrCwMKSnp8Pd3d3S4RERURmw37YNxfveke8s1pZHLXgL27Zt09lWqVQiISEBQUFB2iVL2E8TUW3DhFYJaWlp8Pf31yu/d+8egP9GumiUXBg+NjYWbm5uaNeunbY+Pj4ex44d0yaBSq6fdezYMSQnJ6Nhw4bYuXOn3geOmzdvVsKZVZyzs7P2eUFBgc5fhKzRnDlzMGfOHL1yzcit1atXl2skVnnt27cPmZmZAIpGaJkSHR1t1tpYAQEBGDduHNatW4dFixYZXVReMyJQs4g/F4an0jg4u2j/zf53dKSHh4fOv0RERFR5ive95cF+mohqGya0Srhw4YLBhJZmjazmzZvrlPv5+aFx48a4evUqTpw4gTNnzqB///7aob4hISF4//33ERMTgz/++AOA/vpZmlEzTzzxhMG/npV37azK5ubmhsceewypqak4f/68zjpcVDpNssnFxcXoSDWFQoGMjAxs3rwZixcvNmt02rx587Bp0yZ8++23mDdvnsFtHnvsMQQHByMuLg5r167VLt5PZMyQ19/RPo9a8BYAIDIyUlumVCqrPSYiIqKarHjfWx7F+2kiotqAE6xLWLt2rV5ZQUEB1q9fDwDo06ePXr0mQbVkyRKoVCqdEVhdu3aFnZ0dDh06hLi4OIjFYgQHB+u0d3BwAADcvXtXb98KhQIrV64s9/lUtqFDhwKAVcVkC+7fv48ff/wRALB3717cuXPH4OPatWuQyWRISUnBkSNHzNp3gwYNMHHiRCiVSrz77rtGt9Mku9atW4cDBw6Y3Gdqamq576pJREREREREVNWY0Cph//79WLVqlXbtqLy8PEyaNAmpqamoX78+RowYoddGk8Dau3evzmugaJpehw4dEBMTg+zsbAQFBektwt6lSxfY2dkhPj4eX3/9tbY8KysLo0aNMpjospSZM2fCw8MDmzZtwvTp07VT6DQyMjKwYcMGs6bL1SZbt26FQqFAgwYN9KacFufq6ornnnsOAIxOHzRkzpw5kEql2LZtm9GRM88++yymT58OlUqFIUOG4N1330V6errONmlpaVixYgXatGmD48ePm318IiIiIiIiourEKYclLFmyBNOmTcMHH3yA+vXr49KlS8jOzoZMJsPmzZsNThXTjNBSq9VwcXFBhw4ddOpDQkJw7Ngx7fOSfH19MW3aNCxfvhxjx47F/Pnz4eXlhcTERBQWFuLTTz9FeHh4FZxt2fn7+2Pv3r0YPHgwPvnkE3z22Wdo0aIFHB0dkZaWhmvXrkGtViMsLMzSoVoVTXJq1KhRpU4jHD16NLZv347t27dj9erVkMlkpe7f398fkyZNwmeffWZyuxUrVsDd3R2LFy9GREQEFi1ahKZNm8Ld3R0ZGRm4evUqVCoVHB0d0blzZ/NP8F8LJw0xeGcdtVpt9Lxrel1BQQEkEonF46hInZ2dGMEhT+mWQw15vhxSmRQCBLPrVCoVPH3roO+A3nrvlfLu05J1Pl6+2Lljt4ErR0Rk/Yz126aY6jOsqV1F2hrru6vqeKW1E4v/64e9vXzY7xAR/YsJrRLeeecd+Pv7Y+XKlTh//jzs7e0xaNAgLF682OhC2o0bN4a/vz9u3bqFbt26ae80ohESEoKPPvoIgP76WRrLli2Dv78/oqKicPXqVTx69Ai9evXC3LlztXdYtBbdunVDYmIiVq1ahR9++AFXrlyBUqmEn58f+vbti+eee047NZGK7qr4119/AShKVpWmX79+qFu3Lu7fv499+/Zh2LBhZh1nzpw5+PLLL5Gfn29yu/nz52P06NGIiorCr7/+iuvXr+Pq1atwc3NDt27d0LdvX4wfPx716tUz67jFTZ45DDIH3kWJShNq6QAqzZ4Nhy0dAhFRubHftj3sd4iI/sOE1r80UwwBYOTIkRg5cmSZ2pu6E+GAAQN09m+IIAiYOnUqpk6dWmp85jLVJiAgwGR9aGioyXovLy8sWbLE7KmFMTExJus1C+MbU57zN2bjxo3YuHFjpeyrtOsIAM2aNStT/Pb29npTAc05Tr169ZCXl2fWMRo1aoQPP/zQ7JiIiIiIiIiIrAnX0CIiIiIiIiIiIpvCEVpERERlcHR/IuR5Ckgd7GEvliIsLAweHh68XToREZmleD/SdUDLKj1WeHg4MjIy2E8RUY3EhBYREVEZ5DzIg1qlhjxPAQEipKen693xlYiIyJji/cjvO06Xqa1ELNPefEmhUMDe3t7k9hkZGVCpVOyniKhGYkKLiIioDLTr2amhvSuVSqWyYERERGRLivcj8keKMrUVBJHeWqvmYD9FRDURE1pERERlIAhC0ZcRAVCrim61Xtbb3hMRUe1VvB+ROpgeYVVSfq4cXl7eAMo2Qov9FBHVRExoERERlYFEZgf5o6K1T/Jz5QAEuLu7WzosIiKyEcX7kZ4vtitT2z0bDmPbtm1QKpVISEhAUFAQxGKx0e3DwsKQnp7OfoqIaiQmtIiIiMpA89d0qYM98nLz4eXpCQ8PDwtHRUREtqJ4P1LVNP0T+ykiqomY0CIiIiqD4nek0vylnIiIyFxVfWfD4nhnQyKqyTiZmoiIiIiIiIiIbAoTWkREREREREREZFM45ZCIKs2+TXGQSHTXg1BDDXm+HFKZFAKEWlWnUqmQlJyEZk2b6dxdyJpitJZrYm1xmlvn4+ULIiJbZajfNsXU70ZraleRtqb6qao4XlnbeXv5mL1vIqKajgktIqo0O7fvhr+/v06Zqbvw1PS67OxsuLm54cqlg3B1dbXKGK3lmlhbnOWtIyKyJYb6bVPK+/uvuttVpK2pfqoqjsc+hYio/DjlkIiIiIiIiIiIbAoTWkREREREREREZFOY0CIiIiIiIiIiIpvChBYREREREREREdkUJrSIiIiIiIiIiMimMKFFREREREREREQ2hQktIiIiIiIiIiKyKUxoERERERERERGRTbGzdABEVHOMHzoYEolEp0wNNeT5ckhlUggQalWdSqVEEy8PhPXtDZFIbJE43L198PX2HSAiIirJUL9tiql+yJraVaStsb67qo5XvF0db198s3OX2W2JiGo7JrSIqNJ88XxPuMiklg7DyvS26NHH7jpk0eMTEZH1Yr9tjGX6bvbZRERlwymHRERERERERERkU5jQIiIiIiIiIiIim8Iph0RENdDsuDPILFAgXyLDyJEjIZVK8dVXX1k6LCIiolpD0xe7S+yxNLhtlR8vPDwcGRkZ8PDwQGRkZJUfj4jI0pjQIiKqgVJyHkGpVgMA0tPTIRJxQC4REVF10vTFD/ILEH7o71K3z5fIEBYWZvb+FQoF7O3tta8zMjKgUqmQmZlZnnCJiGwOE1pERDWQ6t9kFoSiOy2pNa+JiIioWmj6YjWAjPyC0hsIAtLT0yt+XJWqwvsgIrIFTGgREdVAIkEoGqGlVgOCAEEo2+3OiYiIqGI0fbEAoI5MUur2GXlyeHp5mb1/YyO0OCqbiGoLJrSIiGogN6m9zl+DXVxcLBgNERFR7aPpi+vIJIh8+olStx+76xC2bdtm1r6VSiUSEhIQFBQEsVgMAAgLC0N6ejrc3d0rEjYRkc1gQouIqAZylxT9xTYjTw5PT09IpVILR0RERFS7aPpizb9VzcPDQ+dfIqKajgmtKibU0PVrYmJi0LNnT4SEhCAmJsbS4RBRCZq7KY3ddQhbtmxBQkKCZQMiIiKqZarjzobF8c6GRFTbcII1GRQREYGIiIhqO156ejq++OILvPjii2jUqBGkUilcXFzQoUMHLFq0CFlZWdUWS1lt3LgRwr9rFBl7GBv6/b///U+7zcGDB80+Tvv27Y0mSePi4iAIAgICAkzuLz4+HpMnT0aLFi3g5uYGqVQKPz8/DBw4EF9++SVyc3PNOX0iIiIiIiKiascRWmTQu+++CwBGk1qOjo54/PHH0aBBg0o53pAhQxAXFwcAqFOnDlq3bo2MjAwkJCTg1KlT2LBhAw4dOoTGjRtXyvGqglQqRceOHQ3WGVq/SKFQYOvWrdrX0dHR6N27t1nHSkhIwK5duzB06NAyx/no0SOMHz8e3333HQBAJpOhSZMmcHBwwO3bt7F//37s378fCxYswM8//4w2bdqU+RhEREREREREVYkJLSqXzp074+LFi5W2P7FYjLFjxyI8PBydO3fWTtU8deoUwsLCkJSUhLCwMBw/frxSjhcQEICUlJRKnQrq6+urTcqZ46efftIu3JmZmYmdO3ciMjISTk5OJtuJxWIolUpERERgyJAhZbp7nUKhQJ8+fRAfHw9fX198+OGHGDZsGBwcHLTbJCYm4tNPP8X69etx5cqVMiW0en21ByJxyV8raqjV6n/jLBlrza8rUBRAYi8pUVd9cYjsxHimb3/I8+WQygyvo1WddSqVCvUaBGDgkBcM3oWpso/n6VEHs9+ZYbANEVFtZ7jfNsVUP2RN7Sp2TMN9d9UdT9NOZGeH0N7PAgC8PDywfdu3ZdgPEVHtw4QWWYWdO3caXMCyffv2iI6ORpcuXXDixAmcOnUK7du3t0CElS86OhoAMGXKFOzevRvnz5/Hrl27MHr0aJPtunbtihs3buDs2bPYsWMHhg0bZvYx3333XcTHx8PHxwd//PGHwWmJLVu2RFRUFEaPHl3m2z7PjdoMRyfnMrUhqkpRC96ydAhERFaL/bb1Yv9FRFQ6rqFVjbZs2YLOnTvD2dkZHh4eGDx4MM6dO2d0+9zcXCxZsgRt27aFk5MTXF1d8eSTT2LNmjUoLCzU2fbUqVMQBAEdOnTQ288HH3ygXXvpypUrOnUpKSk66y1FRETojPgpuRbU9evXARQtCi8IAkJDQw3G/ujRI3z44Yfo2LEjXF1d4ejoiKCgIHz00UeQy+V625u6G8uTTz4JNzc3AMDly5eNbmdLsrKysG/fPgDAyJEjMXLkSAD/JblMkUgkmDt3LoCiBJVKpTL7mJ9++ikAYOXKlaWusRUcHIyuXbuatW8iIiIiIiKi6sSEVjVZtmwZRo0ahZs3byIwMBCFhYXYs2cPOnfubHCaWlpaGp566inMnz8f58+fR9OmTeHv749jx47hjTfeQP/+/ZGfn6/dvl27dnBzc8Pp06eRmZmps6/Dhw9rn8fGxurUaV6HhIQAABo0aIBu3bpp67t166bzkMlkpZ7r7du30alTJ8yaNQunT5+Gj48PAgICcP78ebzzzjvo1asX8vLySr9o/1IqlVAoFACgMzXOln333XfIz89Hu3bt0LJlS4wcORKCIOC3337DP//8U2r7cePGoVGjRjh//jy2bdtm1jH379+PnJwceHl54cUXX6zoKRARERERERFZDBNa1WTevHlYsWIFbt++jePHj+POnTsYNWoU8vLyMHr0aL0ET3h4OM6ePYtWrVrh8uXLOH36NBITE3H8+HH4+Pjg4MGDWLhwoXZ7kUiE4OBgqFQqnQSZUqlEfHw8/Pz8AJSe0JowYYJO+7i4OJ2Hr6+vyfNUqVQYPnw4EhMTMWLECNy6dQtJSUlITEzEtWvX0L17d8TFxWHBggVmX7sffvgBjx49glgsRpcuXcxuZ800I7FGjRoFoGhNr65du0KpVGLLli2ltre3t8e8efMAAIsWLTJrlNbRo0cBFCUp7ew425hqpl1rl2HLsvnYtXaZTvmUKVMQFhaG8PBwC0VGRES1mbH+qbKEh4eznyOiWoffaqtJv379MH36dO1rR0dHbNiwAb/99htSUlKwdetWjB8/HgCQlJSEnTt3AihKfDRp0kTbrmPHjli9ejWGDx+ONWvWYN68edo76PXo0QP79+9HbGwsBg4cCKBoKmJ2djYmTpyInTt3lprQqqj9+/fj6NGj6NSpE6Kjo3USJ/7+/ti2bRuaN2+OqKgoLFq0qNQRV7m5uZgxo2hB57Fjx8Lb27tS4qwKmumbhvz+++/a6ZnXr19HXFwcBEHAiBEjtNuMHDkS8fHxiI6Oxttvv13q8caMGYP3338fFy9exJYtW0pde+v27dsAgEaNGpl5RsbJ5XKdqaPZ2dkV3idRZci4kwqVSolHOVnYsmw+RKpCvPfee8jJyYFKpdIbwUpEVBuw37a8kv1TaUSqQoSFhZncRqFQwN7evmj/GRns54io1uEIrWoyZcoUvTKJRIJXXnkFAPDzzz9ryw8ePAi1Wo3g4GCDC6C/8MIL8Pf3R25uLuLj47XlmqRU8SmGmuchISEICQlBSkoKUlJSAACpqam4cuUKHnvsMZ2kWUVoEnHjxo0zOAqoXr166NSpEx4+fIi///671P1NnDgRSUlJ8Pf3x0cffVQpMVYVqVSqN0VT89CsAQYAmzdvhlqtRvfu3VG/fn1t+fDhw2Fvb4/Tp0/j7NmzpR7Pzs4O8+cXfSBatGgRlEqlye1zcnIAoNS7KJpj6dKlcHNz0z6KnweRJanVqn//VSM3OxMCitaP04xiNHfNOSKimoT9tuWV7J9KewgA0tPTTT6ysrK0z9nPEVFtxBFa1SQwMNBkefHFzjXPW7ZsabCNSCRCixYtcOvWLVy+fBl9+/YFADzxxBNwcnLCyZMn8fDhQzg7OyM2NhaCIKB79+64f/8+vv76a8TGxmLMmDGVPjoLgDYRExkZaXTqnOb8NCOGjJk1axa2bdsGZ2dn7N692+TC8cYEBARoE3iGGBtRpVary3wsX19fg+uhlbR582YA0C4Er+Hp6Yk+ffpg//79iI6OxrJlpQ9JHz16NN5//31cvnwZmzdvxtixY41uqxnJl5ubW+p+SzN79mydEYfZ2dn8cExWQRBEUKuVEAQBji5ueJidCXc3N+0IrbLeuZOIqCZgv215Jfun0jzMzoSXp6fJbQyN0GI/R0S1CRNa1cTYVDkfHx8A/42eAYCHDx+abGOsnZ2dHbp27YqDBw8iPj4effr0wZEjR9CmTRt4eHigR48eAFClCa2srCwAMHn3Rg1TC8MvX74cH374IaRSKfbs2YMnnniiXPF06tQJ/v7+euUnTpyAXC7XWQC/Ohw7dgyXLl2Cvb09hg0bplc/atQo7N+/H1u2bMEHH3xQ6ocSsViMBQsWYPTo0Vi8eLF2TS5DNOuoXbt2rWIngaLRaFKptML7IapsDs4uyM3OhKOLG0a+sxhRC97C3LlzsWzZMqSnp8Pd3d3SIRIRVTv225ZXsn8qTdSCt0ze+EepVCIhIQFBQUEQi8UICwtjP0dEtQ4TWtUkLS3NYGLl3r17AP4bPQMAzs7OOnWG3L17V68dULSO1sGDBxEbGwtfX188ePBAu7ZS06ZN4efnp01kVUVCSxP7wYMH0atXr3LtY926dZgxYwbs7Ozw3Xff4emnny53PNu3bzdYrhm5Zc6Iqsr09ddfAyj6i1rdunWNbnf79m0cOnTIrGv40ksv4b333sOFCxewadMmPP744wa369q1K9asWYOjR4+isLCQC8NTjeTg7KLzr0adOnUAoFwjPYmIiCrKWP9UWTT9G/s5IqpN+I22mly4cMFgQuvChQsAgObNm2vLNM8TExMN7kulUuHixYt67QDddbTq1aunUwYUJby+/fZbnDx5EhcvXoS3tzdatGhR3tPS07JlSyQkJODcuXPlSmht3boVr732GkQiETZt2oRBgwZVWmyWplAotH9pq1u3rtGEUm5uLh4+fIjo6GizrqFIJMKCBQvw0ksvYcmSJdiwYYPB7fr37w9nZ2fcu3cPO3bs0FmQnqimGPL6OwbL16xZA7FYXM3REBERFTHWP1WWyMjIKt0/EZE14iTrarJ27Vq9soKCAqxfvx4A0KdPH215nz59IAgC4uLicOrUKb12O3fuxK1bt+Dk5KQ3Za5z586QyWQ4fvw4fvzxRwDQTjUs/nzRokV6dcVp7j5oalqgIUOHDgUAfP7558jPzy9T2wMHDmDMmDFQqVRYu3at3hpTtu7HH39Eeno6nJyccP36ddy5c8fg4/vvvwdQ9HN+9OiRWfsePnw4WrVqhevXr+Orr74yuI27uzv+97//AQCmTZuG69evm9xnfHw8jh49av4JEhEREREREVUTJrSqyf79+7Fq1SrtYuN5eXmYNGkSUlNTUb9+fZ3RMk2bNtUmhsaMGYOrV69q606ePIk333wTAPDGG2/oTTmUSqV48sknUVBQgJ9++gktW7aEl5eXtl4zWmvv3r06r0tq3LgxgP+mJZpryJAh6NKlCy5evIjnnnsOycnJOvVyuRz79+/HhAkTdMrj4uLw4osvQqFQYNmyZXj11VfLdFxbEB0dDaDoGmmmZhryzDPPoF69enj48CF27dpl1r5FIhEWLlwIAEYX4weAiIgIPPXUU7h79y6eeuopREdH6yUeL1++jClTpiA0NNTktFciIiIiIiIiS+GUw2qyZMkSTJs2DR988AHq16+PS5cuITs7GzKZDJs3b4ajo6PO9pGRkbh8+TLOnj2L5s2bo3Xr1lAoFNppiL169UJERITBY/Xo0QOxsbFQq9V6CavAwEB4e3trExXGElphYWFYsGABBg4ciLZt28LV1RVA0ZRAX19fo+cpEomwc+dODBgwAL/++iuaNWuGpk2bom7dusjJyUFycjIKCgq0i9prTJw4EXl5edpF4Pfs2WNw/3PnzkW/fv2MHt9aZWZmYt++fQCAl19+2eS2YrEYI0aMwCeffILo6GiTC70X9+KLL6Jt27Y4c+aM0W0kEgl++eUXjBs3Dt9//z3GjBmDV199FU2aNIGDgwNSU1O1d5/09/dH06ZNzTzDIgsnDTG4kL1arTZ5R8maXFdQUACJRGLxOKypztg1qYrjicUivPr6K5DKpBCgW6+GGvJ8uVXUqVQqePrWQd8BvfX+D1lTnNZ2XRykjvj5x4MgovIx1m+bYup3sTW1q0hbU/1UVRzPUDuxWIzgkKeMtvHy9Ma8OQvKfCwiopqECa1q8s4778Df3x8rV67E+fPnYW9vj0GDBmHx4sVo27at3vZeXl74448/8PHHH+O7777D5cuXIRKJ0KlTJ20SQnOb3pJCQkKwePFi7fOSevTogR07dsDDwwOtW7c2uI9Zs2ZBqVRi69atSExMhFwuBwCzphHWq1cPf/zxBzZs2ICtW7fi7NmzuHHjBnx8fNC5c2f07t1b7w5/mv3L5XLEx8cb3bdmMXxbs337dsjlcvj6+uKZZ54pdfvRo0fjk08+wa+//oo7d+6YTCJqCIKAiIgI7eg+Y5ydnbFjxw4cOXIEmzZtwpEjR3D9+nUUFBTA09MTAwYMwNChQ/HSSy9pp56aa/LMYZA58C5KROUTaukArFSo0Zpta3+pvjCIaiD227Zr94ayzaIgIqqJmNCqYpophgAwcuTIMq0L5eTkhPnz52P+/PllOuYzzzyjc9ySjN35rzh7e3tEREQYHQUWGhpq8hhSqRTh4eEIDw8v9VgASl3PqbJV5vHGjRuHcePGmdxm0qRJmDRpktn77NChg971Nec4Q4YMMflzKa579+7o3r272TERERERERERWQuuoUVERERERERERDaFI7SIiIjI6h3dnwh5ngJSB3t0HdDS6Hbh4eHIyMiAVCo1etdXIiJrZO7vubLQ/E708PBAZGRkpeyTiMhaMKFFT1/edgAAYqlJREFUREREVi/nQR7UKjXkeQr8vuM0AMDF0V1vKn9GRgZUKlWZF7omIrI0Q7/njJGKHfDee+8ZXVNXQ/M7MTMzsxIjJSKyDkxoERERkdXTrg+oBuSPFACK7qybnp5uensiIhth6PecMYIgQlZWltn7VqlUFQmNiMgqMaFFREREVk8QhKIvewIgdSgakZD3UA5vb2+d7TSjEQRBsESYRETlZuj3nDH5uXK4u9cxe4QWR60SUU3EhBYRERFZPYnMDvJHRWvL9HyxHQBg29pf8OuWXyEWi7XbhYWFIT09HS4uLpYKlYioXAz9njNm94ZYzJ27HEFBQTq/A0vS/E50d3ev5GiJiCyPCS0iIiKyeprRCqWNWvDw8CjaTiqt8piIiCqTub/nykLzO1HzLxFRTcKEFhEREVk9c+/4FRkZCaVSiYSEhKoNiIioklXWnQ2L450Niagm42RqIiIiIiIiIiKyKUxoERERERERERGRTeGUQyKqNPs2xUEi0V33QQ015PlySGVSCBBqVZ1KpUJSchKaNW2mc3cha4rRWq6JtcXJ62IddaVdF3e3OiCi8jPUb5ti6v+rNbWrSFtTv3eq4njlbeft6WP2tkRENRUTWkRUaXZu3w1/f3+dMs1aNobuwlPT67Kzs+Hm5oYrlw7C1dXVKmO0lmtibXHyulhHnTnXhYjKz1C/bYqp/6/W1K4ibU393qmK41W0HRFRbcYph0REREREREREZFOY0CIiIiIiIiIiIpvChBYREREREREREdkUJrSIiIiIiIiIiMimMKFFREREREREREQ2hQktIiIiIiIiIiKyKUxoERERERERERGRTWFCi4iIiIiIiIiIbIqdpQMgoppj/NDBkEgkOmVqqCHPl8OnfgNs2bXbMoERERGRHkP9timaPl0qk0KAYLXtKtJWpVKiiZcHwvr2hkgkrvLj8dpYT7uKtLXGa+Pu7YNvdu4ye59EtogJLSKqNF883xMuMqnBujG7fqvmaIiIiMgUU/127dbb0gFYMV4b46zr2ozddcjSIRBVOU45JCIiIiIiIiIim8KEFhFVqdlxZzDyxz8hlzggPDzc0uEQEREREdVos+POIF8iw7PPPsvP31SjMaFFRFUqs0ABpVoNCAIyMjIsHQ4RERERUY2WWaAABAGFhYX8/E01GhNaRFSlsuQK7fPMzEzLBUJEREREVAvw8zfVFkxoEVGVUqnV/z1XqSwYCRERERFRzcfP31RbMKFFRFVKJPx3K2GRiL9yiIiIiIiqEj9/U23BdzcRVSk3qb32ubu7u+UCISIiIiKqBfj5m2oLJrSIqEq5S+whFgRArYaHh4elwyEiIiIiqtHcJfaAWg07Ozt+/qYazc7SAZBtEv4dxqouNj+byJClwW0BAGN2/YbIyEgLR0NEREREVLMtDW6LsbsOYf+hQ5YOhahKcYQWUS2iVCrx888/43//+x86dOgAFxcXSKVSNGzYEGPGjMHJkyctHSIRERERERFRqZjQIqpFNm7ciL59++Kzzz7D2bNn0aBBAwQGBiItLQ3R0dF48skn8cUXX1g6TCIiIiIiIiKTOOWQqBZRq9Xo0KED3nrrLQwZMgROTk4AgOzsbEydOhUbN27E66+/ji5duqBt27Zl3n+vr/ZAJC75a0UNtVoNsb09hoW9hO3bvq2EMyEiIqKKMtxvm1LUpxctPSGUurXl2lXsmAWKAkjsJWVux2tT+cfjtSl/O5GdmJ+9qcZjQouoFnnhhRcwceJE7RpoGq6urli3bh1OnDiBc+fOYf369Vi1alWZ9z83ajMcnZyN1kcteKvM+yQiIqKqUVq/TUS2jZ+9qabjlEOqsC1btqBz585wdnaGh4cHBg8ejHPnzult165dOwiCgDNnzuiU3717F4IgQBAEzJ8/X69daGgoBEFATEyMtuzOnTtYvXo1nn32WQQEBEAmk6FOnToICQlBdHR0uc9FEwcA7Nq1C127doWzszN8fHwwduxY3LlzR7vtV199hSeeeAJOTk7w9vbGa6+9hqysLKP7vnXrFt588000b94cDg4OcHd3R8+ePbFjxw6D2xc/7zNnzuD555+Hp6cnXF1d0atXL5w4cUK77ZEjR9C3b194eHjAxcUFAwYMwMWLF/X2WadOHb1kloadnR2efvppAMDly5dLv1hEREREREREFsKEFlXIsmXLMGrUKNy8eROBgYEoLCzEnj170LlzZ8TFxels26NHDwBAbGysTnnx1yXr5HI5/vrrL0ilUnTp0kVb/uWXX+LNN9/EkSNHYGdnhzZt2sDV1RWHDx/GmDFjEB4eXqHzWr16NYYOHYqbN2+iadOmyMrKwtdff41nnnkG+fn5mDp1KiZMmIDMzEw0atQIDx48wOeff47nn3/e4J0fY2Nj0bp1a6xevRq3bt1Cs2bN4OrqipiYGAwbNgz/93//ZzSWv/76C126dMHhw4cREBAAkUiE3377DU8//TTOnz+P7du34+mnn8apU6fQqFEjqFQqHDhwAD169MDdu3fLdN75+fkAAAcHh7JdMCIiIiIiIqJqxIQWVci8efOwYsUK3L59G8ePH8edO3cwatQo5OXlYfTo0cjLy9NuGxISAsB4QsvPzw/Hjh3TJlUAaF937twZMplMWx4aGopDhw4hJycHycnJOH78OFJSUnD69GkEBgYiKipK7zhlMXv2bGzZsgU3b95EQkICkpOT0bRpUyQmJuKll17Cpk2b8Ouvv+LKlSs4d+4cTp48CQ8PD8TGxuKnn37S2VdqaiqGDh2K7OxsvP/++3jw4AHOnDmDGzduID4+Hn5+flixYgV++OEHg7HMnz8f4eHhuHv3Lk6cOIG7d+/i+eefR05ODt544w1MnjwZH374If755x/8/fffuH37Njp37oy0tDR8/PHHZp9zfn4+9u7dCwDo1q1bua+dIbvWLsP6BdMgUhVWONlIRERERESmffXudIhUhejfv7+lQyGqMkxoUYX069cP06dPh0hU9FZydHTEhg0b4Ovri5SUFGzdulW7rWaE1uHDh3X2ERsbCw8PD0ycOBFyuRx//vmnTh3wXzJMIzg4GD179oRYLNYpb9u2LVavXg0A+Oabb8p9Xq+88gpeeukl7Wt/f3/MmDEDALB7925ERETgmWee0da3adMGkydPBgC9hNaKFSuQkZGBadOmYfbs2ZBKpdq6rl27IioqCgDwySefGIyldevWWL58OSQSCQBAKpVi2bJlAICYmBiEhITo/Azc3d2xaNEig7GYsmjRIty5c0f7szBFLpcjOztb52FKxp1UqFRKCACuXr1qdkxERERUcWXtt4nI9ikLCyEAUCgUlg6FqMowoUUVMmXKFL0yiUSCV155BQDw888/a8u9vb3RokULpKWl4cKFCwCA+/fvIzExET169EBoaCgA3RFcmuSXJhlWXE5ODtatW4exY8eiT58+6N69O4KDgzFr1iwAwOnTp8t9XoYSOkFBQdrnEyZM0Ktv3749AP2Ezc6dOwFAe01K6tu3LyQSCY4ePYrCwkK9+vHjx+ute9W8eXM4OjoajdVYLMbs378fH3zwAQAgKioK7u7uJrdfunQp3NzctI/69eub3F6tVmmfq1QqE1sSERFRZStrv01ERGQLeJdDqpDA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cjMQHBwMAPD397dnWERERERELsU47gaAoKAg+wVCVMo4hxYRlQnjZPB6by2QAjWhpdfr7RkWEREREZFL0XtrkZWRA0OuQR1zE7kiJrSIqEy06d5A/Xnll1swZ84c5ObmYt++ffYLioiIiIjIxRjH3cYxN5Gr4i2HRERERERERETkVJjQIiIiIiIiIiIip8JbDomoxKz6eht0Oq3JMoEgMyMTei89FNx54krFkEr2CI+IiIjysNRv22KpT3fEesWpazAYcPzEcdSuVbtQT4dj25T8/tg2xa/HMTe5Oia0iKjELP/uR4SFhZksM86T1bRpU3h4eNgpMiIiIrqbpX7blqL26WVdrzh1U1JSEBgYiJPH1iEgIKDU98e2cZx6xanrLG1D5Gp4yyERERERERERETkVJrSIiIiIiIiIiMipMKFFREREREREREROhQktIiIiIiIiIiJyKkxoERERERERERGRU2FCi4iIiIiIiIiInAoTWkRERERERERE5FSY0CIiIiIiIiIiIqfiae8AiMh1PNnrUeh0OpNlAkFmRib0XnooUApUFlSxEhZ8932ZxExEROSuLPXbttjq0x2pXnHqGgy5qBkSjP4PdIFG41Go/Xl4+eDHX38rVJxERFR0TGgRUYn5/JH74O+lL/Z2hq7YUALREBERkS0l1W+7ni5FqtV/6ZoSjoOIiGzhLYdERERERERERORUmNAiIocxftsBjNrwFzJ0Xhg0aBBmzZpl75CIiIiI8vX4L38CAUF4+OGH7R0KEZHbYEKLiBzGzaxsJGVkAQCuXbuGtLQ0O0dERERElL9sgwFQFGRnZ9s7FCIit8GEFhE5jORM00FgamqqnSIhIiIiIiIiR8aEFhE5DIPInR+UO08jEuPvRERERERERHkwoUVEDkPz/4ks/H8iS1EK94huIiIiIiIicg9MaBGRwwjUa01+9/f3t1MkRERERERE5Mg87R0AEZFRkO5OQispPRMVKlSAXq+3c0RERERE+dNqNMjKzYVWq81/ZSIiKhFMaFGZUzg/ElnxbtvGAIChKzZgyZIl2Ldvn30DIiIiIiqAhQ+0Qv+la7Bq3W57h0JE5DZ4yyERERERERERETkVJrSIiIiIiIiIiMip8JZDIioxneevhMbj7o8VgYj8/62mdz+10HKZxtMD/QcNxvjXxpZyxERERO7Lcr9ti60+3ZHq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2f6uXbuGzz//HH369EFkZCT0ej38/f0RFRWFd955B8nJyWUWCxEREREREVFRedo7ACJ39vbbbwOA1aSWj48P6tati2rVqpXI/nr27Ilt27YBAMqVK4eGDRsiKSkJ+/btQ3x8PL788kts2LABNWrUKJH9EREREREREZUGJrSIHFjLli1x9OjREtueh4cHhg4dilGjRqFly5bqbZrx8fHo378/jh8/jv79+2P37t1F2n7n+Suh8bj7Y0UgIv+/r7tvCy1emYdWiw5d7gcAhAQH47tlS4sUNxERkTuy3G/bYqtvtk89D0UKsT0iInIlTGgRuZHly5cjODjYbHmzZs2wcOFCtG7dGnv27EF8fDyaNWtW6O1PmLsIPr5+JRFqoc1962W77JeIiMhZ2bPfLins/4mI3Bfn0CKXs2TJErRs2RJ+fn4IDg7Go48+ikOHDlld/9atW5gyZQoaN24MX19fBAQEoFWrVvj000+Rk5Njsm58fDwURUFUVJTZdt577z11cvqTJ0+alCUmJkJRFERERAC4c4th3knsjfWMrzNnzgDIf1L427dvY9q0aWjevDkCAgLg4+ODpk2b4v3330dmZqbZ+paSWUatWrVCYGAgAODvv/+2uh4RERERERGRvfEKLXIp06dPx7hx41C5cmXUr18fx44dw8qVK/Hbb7/ht99+Q9u2bU3Wv3r1Kjp16oSDBw9Co9GgYcOGyM7Oxq5du7Br1y6sXLkSP/30E7y8vAAATZo0QWBgIPbv34+bN28iKChI3daWLVvUnzdv3oyaNWua/A4AsbGxAIBq1aohJiYG27dvBwDExMSYxGXcny0XLlxA165dkZCQAE9PT0RERECr1eLw4cN47bXX8NNPP+G3336Dt7d3gdouNzcX2dnZAFDgOkRERERERET2wCu0yKW8+eab+OCDD3DhwgXs3r0bly9fxuDBg5Geno7HHnsM6enpJuuPGjUKBw8exD333IO///4b+/fvR0JCAnbv3o1KlSph3bp1mDRpkrq+RqNB27ZtYTAY1MnVgTvJoO3btyM0NBTAvwkso7sTWsOGDTOpv23bNpNX5cqVbR6nwWBAv379kJCQgAEDBuD8+fM4fvw4EhIScPr0abRr1w7btm3DW2+9VeC2+/nnn3H79m14eHigdevWBa5nbytmT8eS6ROhMeSgf//+eO655+wdEhEREZWy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o0bluy8AOHPmTIHWIyIiIiIiInJknEOLiIiIiIiIiIicChNaROTUflu8FzoPbzz44IP2DoWIiIjKyI7VCfh10V/QeXgX+Ep1IiJyLUxoEZFTMxgMUBQF2dnZ9g6FiIiIykjqjXSI4c6E8XmfVE1ERO6DCS0iIiIiInIqeecYNRgMdoyEiIjshQktIiIiIiJyKoqiqD9rNPyThojIHfHTn4iIiIiInIrO69+HtQcFBdkvECIishsmtIjIqWk0GogItFqtvUMhIiKiMqL31kLRKBARBAcH2zscIiKyAya0iMipdR0chazcdKxZs8beoRAREVEZadO9Ae5/LBpZuemYM2eOvcMhIiI7YEKLiIiIiIiIiIicChNaRERERERERETkVDzzX4WIqGBWfb0NOp3pXFYCQWZGJvReeihQSqWsYkil0jkgIiIiF2ap37bFVt9sr3ocAxARuS8mtIioxCz/7keEhYWZLMvNzcW+ffvQtGlTeHh4lHoZERERFYylftuWova/ZV2PiIjcA285JCIiIiIiIiIip8KEFhERERERERERORXeckhExSYiAIDU1FSkpKSYlOXm5iItLQ0pKSkWbx105TJjW7BN8m8TR4uT7eIYZWwXtou1Yzf2O1Q0tvptW2z93zhSveLUtfX+Ko39sW0cp15x6rJtrGPbWOcObVPa/bYiHBEQUTGdOnUKNWvWtHcYRETkJs6dO1eouZ/IFPttIiIqS6XVb/MKLSIqtuDgYADA2bNnERgYaFbeokUL7N6922JdVy5LSUlBeHg4zp07h4CAAIeMsazLbLWJI8VZ1mVsF7ZLYcrcuV1EBNHR0ahatarFelQw+fXbttj6f3OkekWtm9/7q6T3Z496Ra3LtrGObWMd28Y6d2ib0u63mdAiomLTaO5MxxcYGGjxw9jDw8Pqh7SrlwFAQECAWbkjxegobeJocbJdHKMMYLtY467totPp1H6Hiia/ftuW/M5LR6lX3LrW3l+lsT+2jePUK25dto11bBvrXL1tSrPf5miAiErdc88957ZljhKHI5XZ4khxsl0co8wWR4qT7eIYZVT6SuO8LI16xa1blvtj2zhOveLWLcv9sW0cp15x65bl/lytbTiHFhEVW0pKCgIDA5GcnFzkzL0rYruYY5tYxnaxjO1iGduFiovnkHVsG+vYNtaxbaxj21jHtik+XqFFRMWm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7r//fqlQoYJotVqpUqWKtGrVSsaNGye7du0qwBGa6tatmwCQ/fv3myw/e/asTJs2Tbp06SLVqlUTLy8vKV++vERFRcmUKVPkxo0bFrdX1BgTExPl+eefl1q1aoler5egoCBp3LixjB07Vk6cOGGyblZWlpQrV05CQkIkMzOz0MdMRK6lJP94y8zMlIkTJ0pERIRotVqpXLmyDBgwQI4ePWrxj9x169aJoiji6+tr9lll9MYbbwgAiYqKkqysLHV5WSe0RES+/fZbiY6OFi8vLwkODpaePXvK4cOHrSauHDWhJXInCWRMSOTtC1JSUuS9996TVq1aSUBAgOj1eomIiJCOHTvKjBkzTNq1KH2drf+f1NRUGTdunFSvXl10Op1Ur15dxowZI6mpqfmODw4ePChPPfWU1KhRQ7y8vCQwMFDuueceGThwoHz33Xdy69Ytk/WLmtASEZk1a5Y0btzYJJFkbVyS1+3bt2X16tXy/PPPS4sWLaRq1aqi1WrFz89PGjRoIM8884zZeCKvoowRLl++LE888YSEhoaqSbP8zg2jc+fOyWeffSa9evWSe+65R4KCgsTT01PKly8v7dq1k+nTp0tKSopZvfwSWrZelt4L//zzj0yYMEGaNGkifn5+4u3tLbVq1ZJu3brJ7Nmz5fLlywU6HqMLFy6Ip6enNGvWzGJ5aSS07n7pdDoJDw+X/v37y5YtW6xu+/333zdLPDsrRcTON48TERGRie3bt6Nt27YYPnw4vvjiC3uHUyDz58/HsGHDMH36dIwdO9be4RARERGVqREjRmDevHnYunWrOq+Wo8nJyUHdunWRlpaGkydPmjz50RkxoUVEROSAevbsidWrV+P48eMlNkloacnNzUW9evWQmZmJv//+G15eXvYOiYiIiKhMXbp0CbVq1UJMTAx+++03e4dj0ddff40nnngCn376KZ599ll7h1NsnvYOgIiIiMzNmDEDTZo0wblz5xw+oXXhwgUMHjwYsbGxTGYRERGRW6pSpQoWLFiAQ4cOIS0tzSGvflIUBZMnT8aIESPsHUqJ4BVaRERERERERETkVDT2DoCIiIiIiIiIiKgwmNAiIiIiIiIiIiKnwoQWERERERERERE5FSa0iIiIiIiIiIjIqTChRUREREREREREToUJLSIiIiIiIiIicipMaBERERERERERkVNhQouIiIiIiIiIiJwKE1pERERERERERORUmNAiIiIiIiIiIiKn8n+WvD5hzeyaVAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True)\n", "\n", "cmap = ['#FD7F69', '#9FC9DD', '#89A76F']\n", "\n", "style_dict = dict(\n", " orient='h',\n", " palette=cmap,\n", " edgecolor=\"k\",\n", " linewidth=2.0,\n", " errwidth=2.0,\n", " capsize=0.07)\n", "\n", "ax = axes[0]\n", "b = sns.barplot(x=\"s\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict\n", ")\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Time (sec)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "#ax.set_xscale('log')\n", "ax.set_xlim([0, 5e3])\n", "ax.set_xticks(np.arange(0, 6000, 100), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "ax.get_legend().remove()\n", "\n", "ax = axes[1]\n", "b = sns.barplot(x=\"max_rss\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict)\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Maximum Resident Set Size (MB)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "ax.set_xticks(np.arange(0, 30000, 1000), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "\n", "fig.suptitle('Benchmark of different Hi-C mapping tools for 1 mln reads (5 iterations)', y=0.99)\n", "\n", "# (x, y, width, height)\n", "bb = (fig.subplotpars.left, fig.subplotpars.top+0.002, fig.subplotpars.right-fig.subplotpars.left, 0.2)\n", "ax.legend(bbox_to_anchor=bb, title=\"Number of cores\", loc=\"lower right\", ncol=3, borderaxespad=0., bbox_transform=fig.transFigure, frameon=False)\n", "\n", "plt.savefig(\"benchmarking_1mln.pdf\")" ] }, { "cell_type": "code", "execution_count": 25, "id": "1f41e7db-0f80-45f6-96f6-d1ae81055b83", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABLQAAAMrCAYAAABQzMu7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddXgUV9sG8Hvj7gIECe4WHALBvTgEl7a0UFqsfSlQJEhLoVC80NIWdwnQAsVJcbfgFjwQIQrx8/2Rb6e7yXo22QTu33XtBZk558wzM7tnZp+dOSMTQggQEREREREREREVEGamDoCIiIiIiIiIiEgfTGgREREREREREVGBwoQWEREREREREREVKExoERERERERERFRgcKEFhERERERERERFShMaBERERERERERUYHChBYRERERERERERUoTGgREREREREREVGBwoQWEREREREREREVKExoEeVzq1atgkwmU/mysLCAu7s7mjRpgp9++gmxsbGmDjfXBAUFQSaTwdfX19Sh5CuK74/87NWrVxg5ciTKly8PW1tbKeZVq1YZdTma3ifHjh2TlhsWFqayfnx8PCZNmoSqVavC3t5eKh8UFKRUbvv27WjZsiU8PDxgbm7O96YRybf54MGDdSrv6+sLmUyGpk2bZpsXFhYmtXfs2DGjxJecnIw1a9agT58+KFu2LFxcXGBlZQVPT080bNgQX3/9Nc6fP2+UZZFmubF/STNd+tHcVND63ufPn2PHjh0YP348mjdvDicnp1w7/uW2pk2b6tU3k3b54Rxu+fLlkMlk+Oijj1TOV/cdJOtr27ZtBscgP45nPdeiTO/r9lmwYAFkMhm6deuWo3aY0CIqwNLT0xEdHY3jx49j3LhxqFKlCkJDQ00dFpGShIQENGzYEIsXL8bdu3eRlJRk6pBUysjIQOvWrfH9998jNDQUb9++VVnul19+QY8ePXD48GFERUUhIyMjjyPNXz6kpMK2bdtQtmxZDBo0CJs2bcL9+/cRGxuL1NRUREZG4vTp0/j5559Rt25dBAQE4NatW6YOmQoA/mCjm4LY9zZq1Ajdu3fH7NmzcfToUcTHx5s6JCJJfHy8lCTJr8mS97V/zA/JTFMbNmwYChcujODgYJw4ccLgdpjQIipA9u7di/j4eOkVHh6O06dP45NPPoFMJsOzZ8/QqVMnJCcnmzpUIsmG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frzKuorb+fTp06JSpUpq2/j8889VtnHjxg3h5eWldZ0iIiJU1k9OThbW1tYCgPjll19UltGECS2ifE7XhJbiybq6hFRgYKB0QvH555+LU6dOiYiICPHy5Uuxbds2qRPz9PRUebInb7906dLCzMxMjB07Vly5ckVERUWJGzduiE8++UQq891336mM4eeff5bKlClTRvz555/i4cOHIjo6Wty7d0+sX79edOnSRUyfPl2pnvxkycXFRbi7u4vKlSuLLVu2iOfPn4vXr1+LrVu3iiJFiggAwtHRUURFRWVbtjyhVaRIEWFtbS1atGghjh49KiIiIsSDBw/EhAkTpNgmTZokOnXqJBwcHMRPP/0k7t+/L6KiosShQ4dEhQoVBADh5OSkcjl//fWXCAgIEPPnzxchISHi/v37IjIyUoSGhopff/1VlCtXTgAQJUuWFO/evctWX3Gf+/j4iKJFi4o///xTPHnyRLx+/VocPHhQxMTEZCurKC0tTXz66acCyPxiOnfuXJX7Q5uoqCjh4+MjAAgrKysxdepUcefOHREZGSn+/fdf0bZtW2n5X331lVLdxMREER8fL/r16ycACH9/fxEfHy+93r59q3McGRkZomnTptKyhg0bJq5evSoiIyPF2bNnpQSr/ORVn4TW27dvRXx8vLT/ixcvrhRnYmKiSE1NFfHx8eLGjRtSG3v37lUqp/iF+9tvv5XK9erVSxw+fFi8evVKvH79Wuzbt080aNBAABC2trbi+vXr2WKVn7zIt/2gQYPE2bNnRWRkpLh//74ICQkRQmR+2fb39xcAhLW1tRg/fry4ePGiiIqKEk+fPhUrV64URYsWlU6ssp64K55YlS5dWtja2orp06eLW7duiejoaHHp0iXRqVMnqcyKFSuy7WNN2yTrdtGFvK38kNB6+/atdGKsbwLWEIrv0ZIlSwpvb2/x22+/iSdPnoiIiAixfft2UahQIWn+5s2bpffY6dOnRVRUlLh9+7ZSX5x1n8n5+fmJMWPGiD179ohr166JiIgI8ejRI7F//37RvXt3qf6+fftU1leME4AYMWKEuHbtWrbPJADRt2/fbPUV903JkiWFpaWlmDRpkrh9+7aIjIwUx44dU0pMTJw4UWMbmhJapUuXFgDE4MGDxZkzZ0RUVJS4f/++mDBhgpR07tevn8r1VPxS06pVK/Hvv/+KyMhI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lkMiIiIiIiIiInIqTGgREREREREREZFTYUKLiIiIiIiIiIicChNaRERERERERETkVJjQIiIiIiIiIiIip8KEFhERERERERERORUmtIiIiIiIiIiIyKkwoUVERERERERERE7FRegAiKjumDR8KGQymSDb1kADZYkScoUcIogEG8+afuba2lpvTblaXY6W/r6IHtAPYrHE4v20N3seP0c4dubaWFtXX46drePZ69j5BATiy63bbI6dyNlYe92ujfdXe/SrTl9b31ut3R7fb4iIqo8JLSKym08e7wNPhVzoMMhq/YQOgGzGY2dPE7btEzoEolrF67YpNf/eyvcbIqLq4y2HRERERERERETkVDhDi4iIiOq12SknkFeqglIqR0xMDHJzcyGXy/H5558LHRoR1UHjvv8dpTIFBg0ahF27dgkdDhGR0+IMLSIiIqrX8kpVyC0phUYkQm5uLnJyclBUVCR0WERUR6nUakAkgkqlEjoUIiKnxoQWERER1Wv5yv/+U5mbmwsAKCwsFCocIiIiIrIAE1pERERUr6k1mopvRCKo1WoAgEZbRkREREQOiQktIiIiqtfEIlHFNxoNxOKKj0YibRkREREROSQmtIiIiKhe85ZLdd/7+voCADw9PYUKh4iIiIgswKccEhERUb3mI6tIaN26U6JLaMnlciFDIqI6TCoWo7S8HFKp1HxjIiIyiTO0iGpQUlISRCIRoqKihA6FiIhMWBrREXEP3Q+5Som4uDhs3LgR06dPFzosIqqjEgY8AEVpCfbs2SN0KERETo0JLSIzQkJCIBKJsG7duirbRUVFQSQSITY21q7brfzl6uqKli1bYvLkyTh9+rRdtkNERERERETkbJjQIqpBbm5uuPfee9G0aVObxwgNDUXPnj3Rs2dPtGzZEpcvX8bnn3+O+++/H7t27bJjtERERERERETOgWtoEdWgbt264cyZM9UaY86cOZg4caLu5+vXr2Ps2LH46aefMGnSJFy4cAEeHh7VjNQ++n6+A2KJUG8rGmg0mn+fTGaPp5PZOp41/cy1tbXemnINSlWlkEllFsRbk+x5/Bzh2JlrY21dfTl2to5nn2MndpEgqt8jAABliRJyhfF1tGypu7tcrVajUdMQPDrsCQT6+WFz4ldm4iayP+uv27Xx/mqPftXbpm3vrZZvT6NS4oHwjlaMTURExjChReRkAgMDkZCQgJCQENy8eRN79+7FsGHDhA4LADA3fgPc3B0juUZE5CziF7wsdAhUT/G6LYz4BS/jy63bhA6DiMjp8ZZDohpUU4vCBwUFITQ0FACQkZEBALhw4QJEIhFCQkIAAGvWrEHXrl3h6en5718L/3Pw4EEMHz4cgYGBkMlkCA4Oxvjx4/Hnn3/aNU4iIiIiIiKimsCEFpGT0mg0JutiYmIwdepUXL9+HW3atIGPj4+uLi4uDhEREdi2reIvg506dcLt27eRkJCAzp07Y/fu3TUdOhERAdi2ehk2LpsPsboM0dHRiImJETokIqphn78+A2J1GQYNGiR0KERETo8JLSIndO3aNWRmZgIAWrVqpVd3+fJlJCQkYMeOHbh48SIOHz6Mq1evAgDS0tLw4osvQqPRYNmyZfjnn39w+PBhXLt2Dc8//zxKSkowZswY/PPPP7W+T0RE9U1xUSFuF+QBAHJycpCbmytsQERU48rLyiACoFKphA6FiMjpMaFFZKFJkyZBJBKZ/EpOTq6VOG7cuIFx48ZBqVSiQYMG6Nevn159eXk5Fi1ahCFDhujKXF1dAQDLly9HWVkZHn/8cbz66qsQiyveAuRyOT766CO0a9cO+fn5iIuLqzIGpVKJgoICvS8iIrJOcVGh3s95eXnCBEJ1Hq/bRERUF3FReCILhYaGIiAgwGT9yZMna+QD4ptvvolPP/0UQMV/djIyMlBaWgqpVIo1a9bA09PToM/48eONjvXjjz8CAP73v/8Z1IlEIrz44ot49tln8eOPP2LRokUmY1q6dClef/11W3aHiIj+pdGoAfz3PDS1Wi1cMFSn8bpNRER1ERNaRBaaM2cOJk6caLI+KiqqRmZpZWRk6BZ+l8lkCAoKQu/evfHKK68gPDzcoL2fnx/8/PwMyvPy8pCdnQ0AaNu2rdFttWvXDgBw7ty5KmOaPXs2ZsyYofu5oKAATZo0sWh/iIiogkgkhkZTDg0qklraWbNE9sbrNhER1UVMaBEJICIiwqCsUaNG2Lx5s0H5559/XmUi7W7u7u5Gy4uKinTfm5ppFhgYCAAoLCw0Wq8ll8shl8stjomIiAy5enjq1tACoPcADyJ74nWbiIjqIia0iASQmppqUNasWbMa3aaHh4fu+xs3bqBRo0YGba5fvw4ARm9jJCIi+3L1qHivLSrIg5+fH3x9fQWOiIhqmsTFBSqVClKpVOhQiIicHue2EwlAo9EYfF24cKFGt+nj4wN/f38AQHp6utE2p0+fBgC0bt26RmMhIiJg2PMzMXrmYqjFLkhMTDT7QA4icn6TFr4LtdgFe/bsEToUIiKnx4QWUT3yyCOPAABWrlxpUKfRaHTl2nZEREREREREjogJLaJ65JVXXoGLiwt27NiBFStW6J6oVVpaiunTp+PUqVPw9vZGTEyMwJESERERERERmcY1tIjqkfDwcHz44YeYNm0a/u///g/vvPMOmjZtioyMDOTl5UEul+PLL79EUFCQTeMvfGaYoE/p0mg0EIlEgo9nTT9zbW2tt6a8tLQUMpnMonhrkj2PnyMcO3NtrK2rL8fO1vEc+diZKtceP4lEgojIB3XlAf6B2Lplu5m9IKo+W67btfH+ao9+1elr63urpduTSoR/3yYiqguY0CKqZ2JiYtCxY0csX74cqampSEtLg7+/Px599FHMnj0bbdu2tXnsqbNGQOHKpygREVXHjrX7hQ6B6glet4XBc5yIyD6Y0CIyw9LF2pOSkgzKoqKioNFoanS7WiEhIRZvq2fPnujZs6cNUREREREREREJj2toERERETmAg7vT8cuW45BJXBEdHc31DInqoB+/PAqZxBWDBg0SOhQiIqfHGVpEREREDkBZrILyjgoAkJOTI3A0RFQT1Go1RCIRVCqV0KEQETk9ztAiIiIicgClJWV6P+fl5QkTCBEREZETYEKLiIiIyAFo10HUPiVNrVYLGQ4RERGRQ2NCi4iIiMgBaBNZ2sSWWMyPaURERESm8JMSERERkQOQKfSXNvXx8REmECIiIiInwIQWERERkQOQu0ohd5MCAPz8/ODr6ytwRERkb2KxGBqNBlKpVOhQiIicHp9ySEREROQAegxuCwDYsXY/EhMTBY6GiGpC/zGdsWPtfuzbs0/oUIiInB5naBERERERERERkVNhQouIiIiIiIiIiJwKbzkkIrvZtT4FMpkwa0JooIGyRAm5Qg4RRIKNZ00/c21trbemXK1WIyMzA6GtQgV9opo9j58jHDtzbaytqy/HztbxHPnYmSqv6vgF+AdatN9E1WXtdbs23l/t0a86fW19b7VmezzHiYjsgwktIrKbrZu3Izg4WJBtl5eXIy0tDeHh4ZBIJIKNZ00/c21trbemvKCgAN7e3jh/di+8vLws3k97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TTOueJ4SUV3EhBYRERERWUUkEun+Uy4WiwWOhsi56M4fESB3rXqG1d1Kbivh7x8AwPIZWmq1mucpEdVJTGgRERERkVVkChfdzBIfHx9hgyFyMtrzR+4qRZ8nO1nVd8fa/UhMTER5eTnS0tIQHh4OiURisn10dDRycnJ4nhJRncSEFhERERFZRe4qRcntUkilUvj6+godDpFT0c7KsnZ2li205yfPUyKqi5jQIiIiIiKr9BjcFjvW7se+ffuEDoXI6fQY3LbWthUXF1dr2yIiqm28mZqIiIiIiIiIiJwKE1pERERERERERORUeMshEdnNrvUpkMlqfj0IYzTQQFmihFwhhwgiwcazpp+5trbWW1OuVquRkZmB0Fahgj4ByZ7HzxGOnbk21tbVl2Nn63iOfOxMlTvC8avusQvwD6yBqKg2WXvdro33V3v0q05fW8/N2tpHnndERP9hQouI7Gbr5u0IDg4WZNuWPu2npsezpp+5trbWW1NeUFAAb29vnD+7F15eXhbvp73Z8/g5wrEz18bauvpy7Gwdz5GPnalyRzh+9j525HysvW7XxvurPfpVp6+t56YQ+0hEVN/xlkMiIiIiIiIiInIqTGgREREREREREZFTYUKLiIiIiIiIiIicChNaRERERERERETkVJjQIiIiIiIiIiIip8KEFhERERERERERORUmtIiIiIiIiIiIyKm4CB0AEdUdk4YPhUwmE2TbGmigLFFCrpBDBJFg41nTz1xbW+utKVery9HS3xfRA/pBLJZYvJ/2Zs/j5wjHzlwba+vqy7GzdTxHPnamyu15/HwCAvHl1m3VGoPqJ2uv27Xx/mqPftXpa+u5aY99bBAQxHOZiMgKTGgRkd188ngfeCrkQodBVusndABkMx4752af4zdh2z67jEP1D6/bpgjz3spzmYjIOrzlkIiIiIiIiIiInAoTWkRERERERERE5FR4yyERERGRk5qdcgIlMgUeeeQRtGjRAnFxcUKHRET/mp1yAnmlKvjIpFga0bFGtjFt2jTcunULvr6+PP+JqN5hQouIiIjISeWVqgCRCGVlZcjNzRU6HCKqJK9UhdyS0hrdxq1bt5CTk1Oj2yAiclRMaBERERE5qXylSvd9Xl6ecIEQkQHt+XmrpBQx+/4w275EpkB0dLTF46tUKhQWFgLg+U9E9RMTWkREREROSq3R/Pe9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bdu2TYrfx8dHNGzYUNStW1f6o1smk4nJkyfrbLtq1SppXX18fES9evWk5HJQUJBITk7W2W7//v3C0dFRABDe3t4iKChIODs7CwCiQoUK4sGDBzrbXbhwQRQvXlwAEO7u7iIoKEi4u7sLAMLT01NcunTJrG1w5MgRUaJECenHwcFBABDOzs4a5bdv37bJ9b93754oX768tE5BQUHC29tbABCOjo7i4MGDFts2UVFR0v6kXrfs6wdADB48WErk2Oq2Wb9+vbQ+lStXFiEhITp/evToodW2sO835myborLf2BImtIhIi7F/mBWGK76FEfvPdrHvbBf7jmzBzp07RatWrYS7u7twdnYWderUEQsWLCjwySwhhLh9+7aYMGGCaNWqlShXrpxwcnISjo6Owt/fXwwYMEAcP348x/YRERGiU6dOwtPTUzg4OIiqVauKKVOmiJSUlBzbXbx4UfTp00eULFlSKJVK4e/vL0aNGiXi4+MNxjtkyBDh4+MjlEql8PHxEUOHDhV37twxed3VDh48KP3RnNPPrVu3bHb94+Pjxeeffy78/f2FUqkUJUuWFH369DGYBDR12zx79kxMnz5ddOjQQfj7+wsXFxehVCqFr6+v6NGjh9izZ0+Oy7OVbbNy5Uqjtkv58uV1ti/M+40526ao7De2RCYE379OVNRFRESgS5cu0v+Tk5ORlpYGZ2dnjUERo6Ki4Ofnp9H266+/xsSJEwEAAQEBcHFxwcWLF6FSqdCxY0ds377dpgcatAXsP9vFvrNd7DsiIiIi67K3dgBEZH0ZGRl4+vSpVvnLly/x8uVL6f+vD2AIABMmTECdOnUwf/58nD59Gg8fPkStWrXwwQcfYPjw4fyjLB+w/2wX+852se+IiIiIrIt3aBERERERERERkU2RWzsAIiIiIiIiIiIiUzChRURERERERERENoUJLSIiIiIiIiIisilMaBERERERERERkU1hQouIiIiIiIiIiGwKE1pERERERERERGRTmNAiIiIiIiIiIiKbwoQWERERERERERHZFCa0iIiIiIiIiIjIpjChRUREREREBEAmk0Emk1k7DDJRhQoVIJPJEBsba1K7999/HzKZDL/88kuexEWWc+jQIchkMrRo0cLaoeQoODgYXl5eSE5OtnYoOg0aNAj29va4cuWKtUOxCCa0iIiIiIjIotQJBplMhtGj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qFFDekuh2oIFC/D5558DAHx8fFC2bFmkpKTg2rVrSE9Ph4+PD44eParxRd/cGPfv349u3bohKSkJCoUCNWrUgEqlQkxMDF68eIHJkydrjQ02dOhQ/PTTT/jtt9/Qs2dPo9aXiIiIqDAYNmwYli9fjn/++UcaV6ugyczMRNWqVZGcnIybN29qvPnRFvEOLSIiIjOZe2UzJ+XKlcObb76Jixcv4vz58xp15ly1NjfGNm3a4OLFixg+fDjKly+PK1eu4M6dO6hYsSLGjBmj9WrpjIwMbNmyBd7e3ujSpYuJW5KIiIjItk2dOhXOzs6YNm2atUPRa926dYiJicHkyZNtPpkF8A4tIiKiAiciIgJNmzbF4MGD8dNPP1k7HKOsXLkSgwYNwpw5czBmzBhrh0NERESU77Zs2YKLFy9i9OjRBTJhtHr1aty+fRvjxo2Dvb29tcPJNSa0iIiICqCuXbti165duH79usVe45xXsrKyUK1aNaSlpeHatWsm3ZFGRERERGQO20/JERERFUJz585FnTp1cOfOnQKf0Lp37x769++P0NBQJrOIiIiIKF/wDi0iIiIiIiIiIrIpHBSeiIiIiIiIiIhsChNaRERERERERERkU5jQIiIiIiIiIiIim8KEFhERERERERER2RQmtIiIiIiIiIiIyKYwoUVERERERERERDaFCS0iIiIiIiIiIrIpTGgREREREREREZFNYUKLiIiIiIiIiIhsChNaRERERERERERkU/4PgTXGeNU1nlwAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True)\n", "\n", "cmap = ['#FD7F69', '#9FC9DD', '#89A76F']\n", "\n", "style_dict = dict(\n", " orient='h',\n", " palette=cmap,\n", " edgecolor=\"k\",\n", " linewidth=2.0,\n", " errwidth=2.0,\n", " capsize=0.07)\n", "\n", "ax = axes[0]\n", "b = sns.barplot(x=\"s\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict\n", ")\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Time (sec)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "ax.set_xscale('log')\n", "ax.set_xlim([1, 5e3])\n", "# ax.set_xticks(np.arange(0, 5000, 100), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "ax.get_legend().remove()\n", "\n", "ax = axes[1]\n", "b = sns.barplot(x=\"max_rss\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict)\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Maximum Resident Set Size (MB)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "ax.set_xticks(np.arange(0, 30000, 1000), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "\n", "fig.suptitle('Benchmark of different Hi-C mapping tools for 1 mln reads (5 iterations)', y=0.99)\n", "\n", "# (x, y, width, height)\n", "bb = (fig.subplotpars.left, fig.subplotpars.top+0.002, fig.subplotpars.right-fig.subplotpars.left, 0.2)\n", "ax.legend(bbox_to_anchor=bb, title=\"Number of cores\", loc=\"lower right\", ncol=3, borderaxespad=0., bbox_transform=fig.transFigure, frameon=False)\n", "\n", "plt.savefig(\"benchmarking_1mln_log.pdf\")" ] }, { "cell_type": "code", "execution_count": 89, "id": "475f8c97-3de4-4ff1-b1e9-6a01331a6c52", "metadata": {}, "outputs": [], "source": [ "labels = [\n", " 'chromap', \n", " 'pairtools_bwamem2', \n", " 'tadbit',\n", " 'pairtools', \n", " 'tadbit_bowtie2',\n", " 'juicer', \n", " 'hicpro', \n", " 'hicexplorer', \n", " 'fanc_bwa', \n", " 'fanc_bowtie2',\n", " # 'bwamem2',\n", " # 'bwamem',\n", " # 'bowtie',\n", "]\n", "labels_mod = [\n", " 'Chromap', \n", " 'bwa-mem2 + pairtools', \n", " 'GEM + TADbit',\n", " 'bwa mem + pairtools', \n", " 'bowtie2 + TADbit',\n", " 'Juicer', \n", " 'Hi-Pro', \n", " 'HiCExplorer', \n", " 'bwa mem + FANC', \n", " 'bowtie2 + FANC',\n", " # 'bwa-mem2',\n", " # 'bwa mem',\n", " # 'bowtie2',\n", "]" ] }, { "cell_type": "code", "execution_count": 90, "id": "3b2cd5e8-71bf-4039-a6b1-be7565b84759", "metadata": {}, "outputs": [], "source": [ "df = timings.sort_values(['ncores', 'util'])\n", "df.loc[:, \"max_rss_gb\"] = df.loc[:, \"max_rss\"]/1024\n", "df.loc[:, \"min\"] = df.loc[:, \"s\"]" ] }, { "cell_type": "code", "execution_count": 91, "id": "08e08c97-3e00-438e-810e-77eae9c6804b", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABLQAAAMpCAYAAAAdBGqwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1gUV9sG8HvpHQQEBVHsBbGgYBd7j703NFFjb0mMNWKLJRp7SUxi793Erij2XlGxY0FRilSln+8Pvp13F3aXpYPev+vaS5k558wzs7MzZ5+dOSMTQggQEREREREREREVEDp5HQAREREREREREVFGMKFFREREREREREQFChNaRERERERERERUoDChRUREREREREREBQoTWkREREREREREVKAwoUVERERERERERAUKE1pERERERERERFSgMKFFREREREREREQFChNaRERERERERERUoDChRZTPrV+/HjKZTOVLT08PNjY2aNiwIX777TdERETkdbg5xtvbGzKZDM7OznkdSr6iuH/kZ+/fv8fo0aNRvnx5GBsbSzGvX78+W5ejaT85c+aMtNyAgACV9aOiojB16lS4urrC1NRUKu/t7a1Ubs+ePWjWrBlsbW2hq6vLfTMbybf5gAEDtCrv7OwMmUyGRo0apZkXEBAgtXfmzJlsiS8uLg4bN25Er169ULZsWVhZWcHAwACFCxdG3bp18cMPP+DatWvZsizSLCfeX9JMm+NoTipox97AwEDs3bsXEydORJMmTWBhYZFj57+c1qhRowwdmyl9+aEPt2bNGshkMnzzzTcq56v7DpL6tXv37kzHID+Pp+5rUYovdfssWbIEMpkMnTt3zlI7TGgRFWBJSUkICwvDuXPnMGHCBFSuXBl+fn55HRaRkujoaNStWxfLly/H48ePERsbm9chqZScnIwWLVpgzpw58PPzw6dPn1SWW7VqFbp27YpTp04hNDQUycnJuRxp/vI1JRV2796NsmXLwsvLC9u3b8fTp08RERGBhIQEhISE4NKlS/j999/h4eEBT09PPHz4MK9DpgKAP9hopyAee+vVq4cuXbpg/vz5OH36NKKiovI6JCJJVFSUlCTJr8mSL/X4mB+SmXlt6NChKFq0KPbt24fz589nuh0mtIgKkMOHDyMqKkp6BQUF4dKlS/juu+8gk8nw5s0btG/fHnFxcXkdKpFk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Pn0qTb927Zqwt7cXAMSECROU6pw+fVraNnZ2duLixYvSPPk2vHPnjjA0NBRGRkbizz//FElJSVKZgwcPCgsLC6Grqytu374tTV+4cKEAIFq0aCFCQ0OVlvny5UuxePHiDG0Pyh1MaBEREREREVG2UkxoCSHEunXrBABRvnx5kZiYKJXLqYSWsbGxCAwMVJqXmJgoihUrJiW1YmJilOZ//PhRGBkZCQBpkhry9alatarKeNzc3AQA8csvv0jT4uLiRJEiRYSurq64efOmynrypM7GjRulafKEFgCxaNEilfU0iYiIECYmJgKA2LdvX5r5V69eFQCETCZTSiQJkfmE1s6dOwUAYWdnJ0JCQtIt//jxYyGTyQQAldtG3p6pqamUdBTifwktAGLPnj0q2+7cubMAIJYuXapy/vLlywUA8e2330rT5MlMxeQh5X8cQ4uIiIiIiIhyVL9+/VC2bFk8evQIW7ZsyfHltW7dGg4ODkrTdHV14erqCiBlsHoTExOl+VZWVihZsiQA4MWLFyrbVXfbmXz6sWPHpGmXLl1CUFAQ3NzcUL16dZX12rdvDwAqx5cCgP79+6ucrsn58+fx6dMnFC9eHB06dEgz393dHXXq1IEQAidOnMhw+6ocOHAAQMqYafLbGDU5ceIEhBCoX7++ym3TpUsXFCtWDDExMbhw4UKa+ZaWlirXLT4+HocPH4aurq7asb9UbXMnJycAwL59+1SO3UX5E8fQIiIiIiIiohylq6uLadOmoX///pg1axZ69+4NPb2c+zpaunRpldMLFy6c7vyHDx8iOjpa5fyKFStqnP748WNp2r179wCkDPJev359lfXCw8MBAIGBgWnm2drawtbWVmU9TeQxVKhQQe0g8i4uLrh06ZJSvFkhHzerdu3aGYqxUqVKKufr6OigQoUKePPmDR4/foxWrVopzS9btix0dXVVthsbGwsDAwO0adNGZdvi/5+2qbjNBw4ciN9++w3r16/HkSNH0KpVKzRo0ACNGzdGqVKltFonyn1MaBEREREREVGO6927N+bMmYNHjx5h06ZNGDhwYI4tK/XVV3LyBE968+VJj9Ts7OxUTre3twcAREVFSdMiIiIApAx+HhwcrDHez58/p5lmamqqsY468mSculgB1fFmRWRkJICUq9y0kdUY1W0b+TaPj49XeWWXIsVB5B0cHHDp0iVM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iHJN3baVAAAH/jmLHTt25HE0RERERESkjRZ93LBj1XGcOHE9r0MhkvAKLSIiIiIiIiIiKlCY0CIiIiIiIiIiogKFCS0iIiIiIiIiIipQOIYWEWWbfzech4FB2oEiBQTiYuNgaGQIGWSwK2yfB9ERERGRInXnbXVSn8/za72s1E1OTsaTp09QtkxZ6Oho/9s/t032L4/bJv/Uk9e1siyUoTpEOY0JLSLKNnt37UexYsXSTE9KSsLt27dRrVo16Orq5kFkRERElJq687Y6mT2f53a9rNSNjIyEpaUlnj06AQsLixxfHrdN/qmXlbpf07Yhyk94yyERERERERERERUoTGgREREREREREVGBwoQWEREREREREREVKExoERERERERERFRgcKEFhERERERERERFShMaBERERERERERUYHChBYRERERERERERUoTGgREREREREREVGBwoQWEREREREREREVKExoERERERERERFRgcKEFhERERERERERFSh6eR0AEX05BnbuCAMDgzTTBQTiYuNgaGQIGWQAACs7e2zZuy+3QyQiIqL/p+68rY6q83l+rJeVusnJSShd2Bo9WjWHjo5uji+P2yb/1MtK3YK0bXSNTLD/2HGt6xDlZ0xoEVG2+bNDY5gbGWpV1mufTw5HQ0RERJpk5Lz9dWme1wHkY9w26hWMbdNj2+G8DoEo2/CWQyIiIiIiIiIiKlCY0CIiIiIiIiIiogKFCS0i+uJ8/PgRHTp0gJOTE4yMjFC8eHFMnToVycnJautcunQJgwYNgpWVFezs7DBu3DjEx8fnYtRERERERESkLSa0iChXTTp/F72PXEasgRGGDRuWI8uIiIjAw4cPMWTIECxZsgQymQzz5s3Dzp07VZZ///492rVrhydPnuDXX3+Fp6cnlixZgjlz5uRIfEREREREuW3S+buAhRXatGmTY/1wotzEhBYR5arw+AQkCQHIZAgLC9O63rFjx6Cnp4euXbsCACZPngyZTIZp06alKVusWDE8fPgQ06ZNw9ChQzF+/HgAwOPHj1W2ffHiRURERKBmzZoYPnw4Zs2aBQBYsWJFRlePiIiIiChfCo9PAGQyJCYmZqgfTpRf8SmHRJSrIuISpP+Hh4drXa9ly5YICAjA2rVrMXLkSKxevRqenp7w9vZOU1ZP73+HtuTkZBw6dAgA4OHhobLtokWL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1FRGjx5Ny5Ytc3THTBERERHJHWlpaRiGQXJy9p8ZRaRw010OReSWkJSQAqQntr75dC8AHq5ehIWFWeokJyfj7u5uSWRduHDBZl8zZ87k+++/Z/bs2QQGBrJs2TJcXV3tjr169WpOnz7NW2+9xZdffsnnn39Op06drOq98847/P7778ybN4+jR49ajv/+++/ccccdOT5nERERERGR25USWiJySzBN838PIPFK+l/cDMOFmJgYu23S0tJsHo+Pj7ckveLj4zl//jxBQUF2+2nWrBkALi4udOrUiUWLFtGpUydM0yQxMRHDMPD09CQ6OporV67QtGnTTO1r1qzJ/v37LUsWRUREREREJGtKaInILcEwjPSklgGe3u4AJMQnUrJkKUuda2dopaWl4eJiveraNE169uzJyZMnmThxIpGRkXTq1IkffvjBqu4XX3zBsmXLaNKkCaZpMmvWLCB9o3iA6OhoKleuTFBQEKdPn6Znz56ULVuWypUrW5JfAMuWLVMyS0REREREJAeU0BKRW4KHlxuJV5Lx9HanxVN1AVg3fxsrV64E0vevioqKol69enTt2pWYmBj8/f2t+pk2bRobNmygf//+DBs2DB8fH1588UUiIiIYMGBAprqBgYHs37+fNWvWkJKSQrly5ejVq5fdDeTr1q2LaZrUq1cv0xLGDh064OXlRVxcXC69GiIiIiIiIrc2JbRE5JaQMSsr43tWAgICMn2/1iuvvMLQoUMtzyMiIoiIiLAkxK5Vv3599uzZY3meUcfdPT2G4ODgf5dC2pBVmYiIiIjkPhcXF1JTUi2f10TEeSmhJSK3hPsfqeFw3blz5+ZhJCIiIiJSWLXudg/r5m9j88bNBR2KiNwk6w1kRERERERERERECjEltERERERERERExKkooSUiIiIiIiIiIk5FCS0REREREREREXEq2hReRHLNZ4u24+FhfccYE5PEhEQ8vTwxMHK93F6dUiWDbvKMREREbl32rtv2OHI9LgztbqZtWloaR44eIeSOEFxcHP/bv16b3B8vL9vpM6LIrUEJLRHJNas/WUv58uWtjqemphIVFUW9evVwdXXN9XJH64iIiMi/7F237bnRa21+t7uZtnFxcfj5+XHs0Ff4+vrm+Xh6bQpPOxFxPlpyKCIiIiIiIiIiTkUJLRERERERERERcSpKaImIiIiIiIiIiFNRQktERERERERERJyKEloiIiIiIiIiIuJUlNASERERERERERGnooSWiIiIiIiIiIg4FSW0RERERERERETEqSihJSIiIiIiIiIiTkUJLRERERERERERcSpuBR2AiNw6endsj4eHh9VxE5PEhEQ8vTwxMBwq9y8VxEer1+R5zCIiIrcre9dte7K7nheWdjfTNi0tlaolAwhr8xAuLq65Mp4+04iI5A0ltEQk17z3RAuKeXnmSl8912zOlX5ERETEtty8bt9aHsrV3vSZRkQkb2jJoYiIiIiIiIiIOBUltERERERERERExKkooSUit7UnnngCwzBwc3MjMTHRbr3vvvuOZ599Fn9/f0qVKsXAgQNJSkrKx0hFREREREQkg/bQEpHb1vvvv8/XX3+dbb0zZ87w6KOPkpKSwoQJE9i2bRszZszA19eXcePG5UOkIiIiIiIici3N0BKRQqfHFz+Q4OFFu3btHG6zcuVK6tevT+fOnQEYOXIkhmEwevRom/WPHj3KwIEDmT59erZ979y5k4sXL1K/fn369evH66+/DsA777zjcHwiIiJy+7mRzzQiIuIYJbREpNBJTksDwyA5OdnhNmFhYXTo0IHVq1cTERHBpEmTCA0NJTIy0qpuamoq3bt3p1WrVjz33HPZ9l2mTBkgPQl25MgRNm7cCEBsbCyxsbEOxygiIiK3lxv5TCMiIo7RkkMRuWUMHjyYY8eOMXv2bAIDA1m2bBmurq5W9WbNmsWBAweYMWMGR48etRw/deoUSUlJeHt7Z6rfuHFj+vXrx5w5c6hevTpFihTB3d2d5ORkTNPM8/MSERERERGRzJTQEpFbxtWrVy0zpuLj4zl//jxly5a1qnf8+HEuX77Mfffdl+l4586diYqKok6dOiQmJmIYBp6engC8/fbbtGvXDl9fX3x9fbn77rsJDg6mRIkSeX9iIiIiIiIikomWHIrILcE0TSIjIzl58iQTJ07ENE06derElStXrOr27t2bTz75xPKVYfz48VSsWJHo6Gi8vb2pVKmSpWz06NHs3LmTvXv30q1bN0zTtLs/l4iIiIiIiOQtzdASkVvCtGnT2L59O/369WPYsGH4+Pjw4osv0q9fPxYuXJipbt26dalbt65VHy1atMDX15eLFy9alUVHR7Nu3TqSkpKoVq0aixYt4umnn86r0xEREREREZEsKKElIoWOu4sLSampuLu7O9zmlVdeoWXLltSrVw+AiIgIIiIiHGprmiapqalERUUBEBwcbLU31uLFi4mKiqJevXo29+USERERud6NfKYRERHHaMmhiBQ6S9o0wispwXI3QRERERFnpM80IiJ5RwktERERERERERFxKkpoiYiIiIiIiIiIU1FCS0REREREREREnEq+bgpvGAaA1WbLIoXJwoUL6d27Nz179rS6O54zCg4OJjo6mj/++IPg4OA8HavVgnW4uNr6sWJimub/fgYYDpW7uLnS/KGHLTUSExLx9PLMcvys6gQGFGfE0CGOnYiIiMhtwP51257srueFpd3NjZmUnISHu0eO25mmiZmSzF1lgzKV+JcKstNGRERuhu5yKJLLZsyYwYULF3j55Zfx9/cv6HDy1ah5SyniU7Sgw7Bp3piBBR2CiIhIoVKYr9vOat6YgWz4alNBhyEiclvQkkOR6/j5+XHnnXdSpkyZG2o/Y8YMxo0bx4ULF3I3MBEREREREREBlNCSPNKrVy8Mw2DLli0FHUqOdejQgd9++40JEyYUdCgiIiIiIiIiYoMSWiIiuWjQoEG4ublhGAYJCQl263333Xc88MADFCtWjFKlSjFw4ECSkpLyMVIRERERERHnVWAJrWXLltGwYUOKFi1KQEAA7du355dffrGqV7duXQzDYN++fZmOnzlzBsMwMAyD0aNHW7Vr3ry51Qyh06dPM2vWLB5++GGCg4Px8vKiePHihIaGsmTJkhs6j4wYANasWcP9999P0aJFCQoKomfPnpw+fdpSd8GCBdx77734+PhQqlQpXnjhBS5evGi375MnTzJgwACqVauGt7c3/v7+tGjRgk8//dRm/WvPed++fTzxxBMEBgbi6+tLq1at2L17t6Xut99+S5s2bQgICKBYsWI88sgj/Pbbbzf0GuS1LVu2YBgGzZs3Jzk5mXHjxlGtWjW8vLwoV64c/fv3JzY21mbb77//nqFDh1K/fn1KlSqFp6cnFSpUoEePHhw4cMBmm4ULF2IYBr169bIbR0pKCpMnT6Z27doUKVKE4OBgS7vo6GgAKleubHl/2JqtduDAAXr06EH58uXx8PAgKCiIJ598ku+//97ua2GaJkuXLiU0NBR/f3+8vb256667GDZsmN3XwJ74+Hhee+016tSpg4+PD15eXlSoUIHmzZszceJEkpOTc9SfwAcffMCuXbuyrXfmzBnatm3Lvn37mDhxIqGhocyYMYMpU6bkQ5QiIiIiIiLOr0ASWpMnT6Zbt278+eefVK9enZSUFNatW0fDhg3Zvn17prrNmjUDYOvWrZmOX/v8+rLExER++OEHPD09ady4seX4Bx98wIABA/j2229xc3Ojdu3a+Pr6sm3bNp5++mnCw8Nv+JxmzZpFx44d+fPPP7njjju4ePEiixcvpmXLliQkJPDSSy/xzDPPcOHCBSpXrsz58+d59913eeKJJ2ze9XHr1q3UqlWLWbNmcfLkSUJCQvD19WXLli106tSJwYMH243lhx9+oHHjxmzbto3g4GBcXFz4+uuvefDBBzlw4ACffPIJDz74IHv27KFy5cqkpaWxceNGmjVrxpkzZ274NchrpmnSoUMHIiMjAahevTr//PMPc+bMoVGjRvzzzz9Wbbp3785bb73F8ePHCQoKonr16ly6dImlS5fSoEGDG1oSaZom7du3Z9iwYVy9epUaNWpYkphNmjTB0zP9Lnv169enSZMmli8/Pz9LH+vXr+fee+9l6dKlxMfHU7duXUzTZPXq1TRp0oT333/f5rjdu3enR48ebNu2jRIlSlCjRg3++OMPJk+ezD333MPvv//u0DmkpKTQqlUrxo4dy4EDB6hQoQK1a9cmLS2Nb7/9lhEjRhAfH5/j16awWTNnMssmj2bNnMm4pKXwxhtv0L9/f4farlixAsMweOqppwAYNWoU9evXZ8yYMTbrHz16lFdeeYVBgwZl2/d3333HxYsXadGiBf379+f1118H4L333nPwzERERKSwWTBuEC5pKbRr166gQxERuS0USELr1VdfZerUqZw6dYpdu3Zx+vRpunXrxtWrV+nevTtXr1611A0NDQXsJ7TKlSvHjz/+mGlpT8bzhg0b4uXlZTnevHlzNm/ezKVLlzh69Ci7du0iOjqavXv3Ur16debNm2c1jqNGjBjBsmXL+PPPP4mKiuLo0aPccccdHDx4kP/85z8sWrSI//u//+PYsWP88ssv/PzzzwQEBLB161a++OKLTH399ddfdOzYkbi4ON58803Onz/Pvn37OHHiBDt27KBcuXJMnTqVzz//3GYso0ePJjw8nDNnzrB7927OnDnDE088waVLl4iIiKBv375MmjSJv//+m59++olTp07RsGFDzp49y7Rp027o/PPDzp07+fbbb9m8eTOHDx9mz549HDt2jLp163L06FGbiYoxY8Zw7NgxYmJi2L9/P1FRUcTExPDBBx+QnJxMnz59SEtLy1EcO3bsYNeuXezcuZOjR4+ye/dudu/eTdu2bdm+fTulS5cG4JNPPmH79u2Wr7vvvhtI//ft0aMHiYmJvPTSS5w5c8by/+CNN94gLS2N/v37W81KnD17NsuWLaNYsWJ8+eWXHDt2jJ9++ono6GiaNGlCdHQ0Xbt2degc1q1bx/fff0/dunWJjo7mt99+Y9euXZw6dYrTp08zY8YMPDw8cvS6FEZXL18iPu4CVy9fAuDixYucP3/eobZdunShb9++rFq1ioiICN566y3uuecexo4da1U3NTWV7t2707JlSzp06JBt3xnvkX379nHkyBE2btwI4HBsIiIiUvikpqRggGa5i4jkkwJJaLVt25ZBgwbh4pI+fJEiRZg/fz6lS5cmOjqaFStWWOpmzNDatm1bpj62bt1KQEAAffr0ITExMdMyrYykVEYyLEPTpk1p0aIFrq6umY7XqVOHWbNmAfDRRx/d0Dk9++yz/Oc//7E8L1++PEOGDAFg7dq1REZG0rJlS0t57dq16du3L4BVQmvq1KnExsby8ssvM2LECMuMH4D777+fefPmATB9+nSbsdSqVYspU6ZYEhKenp5MnjwZSF82Fxoamun19/f357XXXrMZS2GSkpJCZGQkLVq0sByrWLEiixcvBmDVqlVWM5SefvppqlSpkumYm5sbffr0oUuXLvz+++9ZLvGzJTU1lblz53LfffdZjl2bOM3OnDlziIuLo169epkSRy4uLowcOZJ27dqRnJycafmZaZqWf8PXXnuNhx56yFJWunRpVq5ciYeHBz/88AObN2/ONoYjR44A8Mwzz1C+fPlMZSVLluSll16iSJEidtsnJiYSFxeX6aswykhkXbn079LenNx9cubMmdSpU4fZs2cTEBDAG2+8YfXzA9JnaB44cIChQ4fy559/Wo7//vvvNvfFaty4Mf379+ePP/6gWrVqjB49Gnd39xycmYiIiOOc5botIiKSEwWS0LI1k8bDw4Nnn30WgE2bNlmOlypVirvuuouzZ8/y66+/AnDu3DkOHjxIs2bNaN68OZB5BldG8isjGXatS5cu8f7779OzZ09at27NAw88QNOmTRk+fDgAe/fuvaFz6tOnj9WxevXqWR4/88wzVuUZM3auT8KsXr0awPJ6XK9NmzZ4eHiwc+dOUlJSrMp79+5t2dcrQ7Vq1SwJClux2oulMLn2PXKtOnXq0LRpU0zT5Msvv7Qq/+233xg7diwdO3akefPmNG3alKZNm1reMzn9N/fz8+OJJ564sZMAS4wRERE2y1966aVM9QB+/fVX/vzzT7y8vHjuuees2pQrV44nn3zSqp09FSpUAGDDhg1cuXIlZycATJgwAT8/P8tXRn+FjWmm/e+7Scb/iJzMyIuPj7fsTRYfH2/3F4Djx49z+fJlmjZtmmmGVs2aNTl8+DCmaZKQkEBiYqKl7J133rHMusz4v1yxYsUcnqGIiEj2nOW6LSIikhNuBTFo9erVszx++PDhTMebNWvGb7/9xtatW6levTrbtm3DNE1CQ0Np3LgxHh4eluRESkoKO3fuxM3Njfvvvz9TP3v27OHRRx/lr7/+shtbTjfWzlC1alWrYyVLlrR89/X1tVt++fJly7HLly9z/PhxAMsMLnsSEhI4d+4cQUFB2cYCEBgYyIkTJ7KM9dpYHNGrVy8WLVpkt/za2VTX+uabbyzJSEeVL1+eYsWK2SyrXr0627dvt3rvTJgwgVdffTXLJEZO/81DQkJsztJxVEaMNWrUsFles2ZNIH3j8Li4OHx9fS1tKlasiI+PT5btrn8NbGnfvj3BwcF8+eWXlC1bljZt2vDAAw/QvHlzSz9ZGTFiRKa9ouLi4grlh2PDcME0UzEMg7T/JbUyZiZmxzRNevbsycmTJ5k4cSKRkZEMHz6ctm3bWr0Pe/fuTdOmTUlLS+OPP/6wJMiXLVtGxYoViY6OpnLlygQFBbFhwwYgfel1xYoVSUlJYc6cOZimydChQ+0mOkVERG6Us1y3RUREcqJAElqlSpWyeTwjMXPp0qVMx0NDQ3nvvffYunUrL7zwQqYlhd7e3jRo0IDvv/+epKQkfv75Z+Lj42ncuHGmX/xTU1Pp3Lkzf/31F+3atWPYsGHUrFkTf39/XF1dOXr0KCEhITe85t3W8qyMWVL2lm5llF+7Kfy1dz3csWNHtuNeu99YVrFkF8/1M7ocVa1aNZo0aWJ1/MiRI/zzzz/UqlUr02boGWwdy4699w3Yfu9s27aNkSNH4urqyoQJE3j88cepVKkSRYoUwTAMXn31Vd54440c/5vbSyg5KiNpmN3/A0g/H19f32zbXNvu+v8/tvj4+PDtt98yZswYPv30U1auXMnKlSuB9ETbpEmTePTRR+229/T0zLQUtrDyLlqM+LgLFCnmx+W4C0D6EltHTJ06lQ0bNtC/f3+GDRuGt7c3L730EhEREVZJ3Lp161K3bl1SU1OJioqyHO/QoQNeXl42k6bHjx9n1qxZXL16lWrVqrFo0SLat2+vhJaIiOQ6Z7lui4iI5ESBJLTOnj1rtW8PYLlL3fWzH67fGH7r1q34+flRt25dS/mOHTv48ccfLUmg6/fP+vHHHzl69CiVKlVi9erVVhf1a/e9KUhFixa1PE5KSir0++qMHDmSkSNHWh3PmLk1a9asHM/Esufs2bN2y2y9dzL2QxsyZIhlxsy1CurfvGjRoly8eJF//vnH5my5a+80mXE+Ge8LW3dyvL6dvVls1ytfvjzz58/nvffe46effmLLli18+umn7N69m/bt27Njxw4aNWrk8HkVRt5Fi1m+X467gJ+fH8WLF3eo7eDBgzPdTbR///40adIk01Jie1JSUjLN4gsODsY0zUwJr6VLl1q1054mIiIizsvVzY3k5ORC//ldRORWUSB7aGXshWXveLVq1TIdL1euHFWqVOHvv/9m9+7d7Nu3jwceeMCydCgjebVlyxa7+2dlLOO79957bf6F6kb3zsptfn5+lC1bFoADBw4UcDSFy59//ml3SaSt907Gv/n1S08z5NW/eXaz3TJiPHjwoM3yjH/3oKAgy1LVjDYnTpyw+xpktLv+/0923NzcaNSoEcOGDWPXrl106dKF1NRU5s+fn6N+CqMO/YbSdejrdOg3lDQXN0aNGsXs2bMLOiwRERG5BfUeO400FzfL3YtFRCRvFUhCa86cOVbHkpKS+PDDDwFo3bq1VXlGgmr8+PGkpaVlmoF1//334+bmxubNm9m+fTuurq40bdo0U3tvb28g8+yXDMnJycyYMeOGzye3dezYEaBQxVQYXPseudYvv/zCt99+i2EYme7+l9W/+ZdffplnCa2McW0tBwV4+OGHgfRNwW15++23M9WD9D3CKlasSEJCAh988IFVm7/++otVq1ZZtbsRjRs3tvQpIiIiIiIiUhgVSEJrw4YNzJw507J31NWrV3nuuef466+/qFChAl26dLFqk5HAWr9+fabnkL4c65577mHLli3ExcVRr149q03Y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3lSqVClT/SVLltisLyIicju50Wu1iIjkDv3kFREphDy8/l0R7u/v73C7adOmsX37dvr168ewYcN46623+PXXX+nXr5/N+idOnODTTz+ldOnSdOvWLdv+T5w4wddff+1wfRERkVvVjV6rRUQkd2gPLRGRQsjT252E+CTc3d0JCAhwuN0rr7xCy5YtqVevHgARERFERETYrV+xYkWSk5Mtz1NTUy2Pg4ODMy2nyKj/ww8/UK9evWz35RIREbmVeXq7k5SQQlpqGsWLFy/ocEREbjuaoSUiUgjd/0gNklKvsmnTJubOnVvQ4YiIiMh17n+kBg93v5ek1KvMnj27oMMREbntKKElIiIiIiIiIiJORQktERERERERERFxKkpoiYiIiIiIiIiIU9Gm8CKSaz5btB0PD3er4yYmiQmJeHp5YmDkenl+jJEfMaSlpXHk6BFC7gjBxcWFUiWDbI4jIiKSG+xdt+1x5FpYGNrdTNvrr8WO0PVaRKRgKKElIrlm9SdrKV++vNXx1NRUoqKi7N4Z72bL82OM/IghLi4OPz8/jh36Cl9fX5tjiIiI5BZ71217HLkWFoZ2N9P2Rq/F194lWERE8oeWHIqIiIiIiIiIiFNRQktERERERERERJyKEloiIiIiIiIiIuJUlNASERERERERERGnooSWiIiIiIiIiIg4FSW0RERERERERETEqSihJSIiIiIiIiIiTkUJLRERERERERERcSpKaImIiIiIiIiIiFNRQktERERERERERJyKEloiIiIiIiIiIuJU3Ao6ABG5dfTu2B4PDw+r4yYmiQmJeHp5YmDkSrl/qSA+Wr0m909CRETkNmHvum1PdtfrgmynzwUiIrcfJbREJNe890QLinl55stYPddszpdxREREblX5ed3Oa/pcICJy+9GSQxERERERERERcSpKaImIiIiIiIiIiFNRQktExAbTNJkyZQohISF4eHgQFBTE22+/bbf+ggULqFOnDk2aNCEwMJBWrVqxb9++fIxYRERERETk9qGElog4lRHb99H1v9+T4OFFeHh4no3z6quvMmTIEAICAnjnnXcYMWKE3Y1zf//9d5555hlOnDhB//79ad++PV9//TUvvPBCnsUnIiIi6Xp88QMJHl60a9euoEMREZF8pISWiDiVC0nJpJomGAaxsbEOt1u5ciX169enc+fOAIwcORLDMBg9erRV3fj4eKZNm0bRokXZtGkT3bt35+WXX7aboEpLS8MwDHx9fWnYsCH33XcfAAEBATdwhiIiIpITyWlpYBgkJycXdCgiIpKPlNASkdtCWFgYHTp0YPXq1URERDBp0iRCQ0OJjIy0qnvw4EESEhLw9PSkVq1a+Pj4EBwczObNtu+gdMcdd/Duu+9y9uxZunTpwvPPP0/t2rVZsGBBHp+ViIiIiIjI7UkJLRFxKhcT//3r64ULF3LUdvDgwdSpU4fZs2cTEBDAsmXLcHV1taqXcezcuXM8++yzLF68mJiYGEaPHs25c+es6sfGxjJhwgSKFSvGG2+8wfDhw9m/f7+WHIqIiIiIiOQRJbRExKmkmea/j9PSctT26tWrlmWK8fHxnD9/3ma9KlWq4OKS/uNx+PDh9OjRg5o1a5KYmEh0dDSmaZKQkEBiYiIAX3/9NX/88QdNmjTh4YcfZtSoUQCsX78e85p4RUREREREJHcooSUiTsXFMP597OL4jzDTNImMjOTkyZNMnDgR0zTp1KkTV65csarr7+9Pt27dABg6dCjTp09n3759lCxZkho1ahAdHY23tzeVKlUCoFq1ahiGwZYtW1i5ciWDBw8GoFatWhjXxCsiIiIiIiK5w62gAxARyQk/T3diE5KA9MSTo6ZNm8b27dvp168fw4YNw8fHhxdffJF+/fqxcOFCq/qzZs3CMAwWL16MaZqEhobSp08fvLy8rOrWrVuXDz/8kKlTp/L2229TpEgR2rZty7Rp0270NEVERERERCQLSmiJiFPx93DnYmIyqWlpObqL4CuvvELLli2pV68eABEREURERNit7+fnx6JFiyzPU1NTiYqKAiA4ONhqKWHv3r15+umniYqKol69ejb35hIREZHc5+7iQlJqKu7u7gUdioiI5CMtORQRpzKhaR2WtW2MV1ICc+fOLehwREREpIAtadMIr6QENm7cWNChiIhIPlJCS0REREREREREnIoSWiIiIiIiIiIi4lSU0BIREREREREREaeiTeGzYRgGgNUG0M5uy5YttGjRgtDQULZs2VLQ4UgOHD9+nMqVK1OpUiWOHz+eo7bBwcFER0fzxx9/EBwcnOuxtVqwDhdXWz9WTEzT/N//JyNXyl3cXGn+0MOZaiUmJOLp5Wl5XjIggE9WLr/BsxEREbm12b9u25Pd9brg2rkat9ZndRERyZ4SWreoyMjITN/zWkxMDKtXr+bLL7/kp59+4q+//sLDw4OQkBDat2/PSy+9hJ+fX77E4qjIyEjGjRuX43bffPMNzZs3tzxftWoVTz31FAAjR47kjTfesNs2Ixl1LVdXV3x9fQkICKBOnTo0bdqUHj16ULJkyRzHdqPWrl1LVFQU7du3t9wF8EaMmreUIj5Fcy+wmzRvzMCCDkFERKTQKmzX7Zuha76IyO1HCa1bVEaixl5Cq0iRItx5551UrFgxV8br0KED27dvB6B48eLUqlWL2NhYoqKi2LNnD/Pnz2fz5s1UqVIlV8bLDRUrVqRJkyZWx/fv309cXBwVKlSw+fpcn5hbsmSJ5fHSpUsZP368ZWZfVurXr4+nZ/psosuXL/P333+zZs0a1qxZw4gRIxg+fDhjxozB1dU1p6dmV9WqVfHy8rK6rfXatWtZtGgRwcHBN5XQEhEREREREckPSmjdpho2bMhvv/2Wa/25urrSs2dPwsPDadiwoSWhs2fPHsLCwjhy5AhhYWHs2rUrV8bLWDp3M0tBn3nmGZ555hmr482bN2fr1q0888wz2c5wO3fuHBs3bsQwDIoVK8aJEyfYtm0boaGh2Y7/ySefWC37O3r0KHPnzmXmzJm89tprHDlyhGXLluXktLL09ddf51pfIiIiIiIiIgVFm8JLrli9ejULFy6kUaNGmWYn3X333ZYZTLt372bPnj0FFWKeWLlyJcnJydx///10794dyDxjK6fuuOMOpk6dyueff46rqyvLly9n0aJFuRWu5KEnnngCNzc36tevT0JCgt16pmkydepUQkJC8PDwIDAwkGHDhuVjpCIiIiIiIs5PCa0cWLZsGQ0bNqRo0aIEBATQvn17fvnlF7v14+PjGT9+PHXq1MHHxwdfX18aNWrE7NmzSUlJyVR3z549GIbBPffcY9XPxIkTMQwDwzA4duxYprLo6GgMw7DM9ImMjMyUUMpol/GVsYn4li1bMAwj015Q17py5QqTJk2ifv36+Pr6UqRIEerVq8dbb71FYmKiVf2AgAC7r0OjRo0sy/QOHz5st54zykhede3alW7dugHpM6+ySmg4ok2bNkRERAAwYcIEu/VM02TWrFnUrl2bIkWKUKpUKXr06MGJEyds1g8ODs70Pjh+/DiGYViSZr179870fsmvPdjywpo5k3FJS+Hhhx8mPDw8T8d6//33HZ79NmfOHIYNG0ZAQADvvPMOo0aNsiw9FRERkZxbMG4QLmkptGvXrqBDERGRfKSEloMmT55Mt27d+PPPP6levTopKSmsW7eOhg0bWvaOutbZs2e57777GD16NAcOHOCOO+6gfPny/Pjjj0RERNCuXbtMSY+6devi5+fH3r17uXDhQqa+tm3bZnm8devWTGUZzzOWuF2/L1STJk0yfXl5eWV7rqdOnaJBgwYMHz6cvXv3EhQURHBwMAcOHGDo0KG0atWKq1evZv+i/U9qairJyckAeHt7O9yusDty5Ajff/89bm5udO7cmfvvv5/KlSsTFxfH+vXrb7r/F154AYBDhw5ZJTIz9O/fnwEDBhAXF0eNGjW4dOkSS5cupX79+hw6dCjbMby8vGjSpAmlSpUCICQkJNP7Jbf2WCsIVy9fwgBSUlKIjY11uN3KlSsxDCPTRv+GYTBmzBib9Y8ePcrAgQOZPn16tn3Hx8ezbNkyihYtyqZNm+jevTsDBw7ktddeczg+ERERySw1JQUDLJ83RUTk9qCEloNeffVVpk6dyqlTp9i1axenT5+mW7duXL16le7du1sleMLDw9m/fz81a9bk8OHD7N27l4MHD7Jr1y6CgoL46quvGDt2rKW+i4sLTZs2JS0tLVOCLDU1lR07dlCuXDkg+4TWM888k6n99u3bM32VLl06y/NMS0ujc+fOHDx4kC5dunDy5EmOHDnCwYMH+eOPP3jggQfYvn273V/ubfn888+5cuUKrq6uNG7c2OF2hV3G7KzWrVsTGBgIpM/UurbsZtx1112UKFECwObeY6dOneKDDz5g+fLlREdHs3v3bk6ePEmrVq04e/YsTz/9dLZ7jJUuXZrt27fTtm1bID15c+37xdYeYwCJiYnExcVl+ipsrl6+ZHl8fZI4K2FhYfTt25dVq1YRERHBpEmTCA0NzfT/NUNqairdu3enVatWPPfcc9n2ffDgQRITE/H09KRWrVr4+PhQoUIFVq9e7XB8IiIiOeUM120REZGcUkLLQW3btmXQoEG4uKS/ZEWKFGH+/PmULl2a6OhoVqxYYal75MgRyy+oS5YsoWrVqpay+vXrM2vWLABmz57NpUv//tLdrFkzIHPSas+ePcTFxdG5c2cqVaqUbULrZm3YsIGdO3fSoEEDlixZQlBQkKWsfPnyrFy5kqJFizJv3jyHZmnFx8czZMgQAHr27GmZCXQrWLp0KfBvEguwLDv84osvOHv27E2PUaFCBQD++ecfq7KUlBTCw8Pp0qWL5ViJEiX46KOP8PLy4scff2TLli03HYMtEyZMwM/Pz/KVEWdhYppplsdpaWlZ1LQ2c+ZM6tSpw+zZswkICGDZsmU27zY5a9YsDhw4wPDhwzl69Kjl+O+//05SUpJV/Yw+zp07x7PPPsvixYuJiYmhW7dunDt3LkcxioiIOMoZrtsiIiI5pYSWg/r37291zMPDg2effRaATZs2WY5/9dVXmKZJ06ZNufvuu63aPfnkk5QvX574+Hh27NhhOZ6RlLp2iWHG49DQUEJDQ4mOjiY6OhqAv/76i2PHjlG2bNlMSbObkZGI69WrF25u1jfBLFOmDA0aNODy5cv89NNP2fbXp08fjhw5Qvny5XnrrbdyJcbCYPv27fzxxx8UKVKE9u3bW45Xr16devXqkZKSkinJeaN8fHwAMiU+r2XrfVmqVCnLcrlr35e5acSIEVy8eNHy9eeff+bJODfDMP798ZaRiHZUfHy8ZZlifHw858+ft1nv+PHjXL58mfvuu4+QkBDL8Tp16nD48GFM0yQhIcGy71yVKlUssQwfPpwePXpQs2ZNEhISLP+vRUREcpszXLdFRERySgktB1WvXj3L49dudp7xuEaNGjbbuLi4cNddd1m1u/fee/Hx8eHnn3/m8uXLQPoMLMMweOCBBywJr4xZWbk9Owtg//79AMydO5emTZva/MrYCP/UqVNZ9jV8+HDLjK61a9dmuXG8PRmbmF//lfHLv62yazfFzysZSwoff/xxS9IpQ8YsrdxYdpjxPvD19bUqc3d354477rDZztb7Mjd5enri6+ub6auw8S5azPLY39/f4XamadKzZ09OnjzJxIkTMU2TTp06ceXKFau6vXv35pNPPrF8ZVi6dCkVK1YkOjoab29vKlWqZImjTZs2AAwdOpTp06ezb98+ypYta/fnhYiIyM1yhuu2iIhITllPwRGb7C2Vy1iSd+0MmowkRFbL62y1c3Nz4/777+err75ix44dtG7dmm+//ZbatWsTEBCQaUni008/nScJrYsXLwJkeffGDFktOZwyZQqTJk3C09OTdevWce+9995QPA0aNKB8+fJWx3fv3k1iYmKmDfDzS2JiIh9//DGQeblhhv/85z8MGzaMXbt2cejQIe68884bHivjL6i23kslSpSwO/PI1vtLHDNt2jQ2bNhA//79GTZsGD4+Prz44otEREQwYMCATHXr1q1L3bp1rfpo3749Pj4+NjejHzp0KCVKlGDx4sWYpknz5s2ZMmUKXl5eNpcpioiIiIiIiDUltBx09uxZm4mVjL2NihX7dzZI0aJFM5XZcubMGat2kL6P1ldffcXWrVspXbo058+fp3v37gDccccdlCtXLk9naGXE/tVXX9GqVasb6uP9999nyJAhuLm58fHHH/Pggw/ecDzXznq5VnBwMNHR0TbvMJnXPvvsM8sm448//niWdZcsWcL48eNvaJyDBw9aEiINGza0Kj937hxpaWk2k1q23pe3G++ixbgcdwF3N7cczQ585ZVXGDp0qOV5REQEERERpKamEhUVlWXblJQUoqKiLHcTDQ4OttqYv2jRoixYsMDmnlwiIiKSc65ubiQnJ+Pu7l7QoYiISD7SkkMH/frrr1ker1atmuVYxuODBw/abJOWlsZvv/1m1Q4y76N17f5ZGZo1a8axY8f4+eef+e233yhVqpRl+WJuyFj25MgMLVtWrFjBCy+8gIuLC4sWLco24eOMMpYSFitWjKCgIJtfGQmUpUuXZnunQXvmzZsHpC8frFy5slV5cnIyx44ds9nW1vsyK/mxTDO/deg3lDQXNzZt2sTcuXMLOhwRERHJI73HTiPNxY2NGzcWdCgiIpKPlNBy0Jw5c6yOJSUl8eGHHwLQunVry/HWrVtjGAbbt29nz549Vu1Wr17NyZMn8fHxsVoy17BhQ7y8vNi1axf//e9/gX/vfnjt49dee82q7Fre3t5A1ssCbenYsSMA7777LgkJCTlqu3HjRp5++mnS0tKYM2eOzeV4zu7cuXOWf5f169dz+vRpm19//PEHXl5eREdH8+233+Z4nC+++MLynhs5cqTderbel2fPnrXMbLv2fZmVG32/iIiIiIiIiBQEJbQctGHDBmbOnGmZbXP16lWee+45/vrrLypUqECXLl0sde+44w5LYujpp5/m999/t5T9/PPPln14IiIirJaEeXp60qhRI5KSkvjiiy+oUaMGJUuWtJRnzNZav359pufXq1KlCvDvskRHdejQgcaNG/Pbb7/x2GOPcfTo0UzliYmJbNiwgWeeeSbT8e3bt/PUU0+RnJzM5MmTef7553M0rrNYsWIFycnJVKxYMculnr6+vjz22GNAzjaHP3r0KK+88gqPPvooqampdO/e3bLk9Hpubm7MmTMn07LM2NhYunfvTkJCAvXr16dFixYOjZvxftm2bdsNzygTERERERERyS/aQ8tB48eP5+WXX2bixIlUqFCBQ4cOERcXh5eXF0uXLqVIkSKZ6s+dO5fDhw+zf/9+qlWrRq1atUhOTrYsQ2zVqhWRkZE2x2rWrBlbt27FNE2rpEn16tUpVaqUZY8ke0mVsLAwxowZw6OPPkqdOnUsd7NZsWIFpUuXtnueLi4urF69mkceeYT/+7//IyQkhDvuuIMSJUpw6dIljh49SlJSkmXT8Qx9+vTh6tWrlk3g161bZ7P/UaNG0bZtW7vjF3YZyalu3bplu0yve/fulrvfzZo1y7KvUoZOnTrh6ekJQHx8PH/99Zfl39XDw4PRo0fz6quv2u2/XLlytGvXjs6dO1OpUiVKlizJgQMHuHr1qmXTcUeXEnbo0IFRo0axYsUKvvvuOypWrIiLiwu9evWiV69eDvUhIiIiIiIikl+U0HLQ0KFDKV++PDNmzODAgQO4u7vz+OOP8/rrr1OnTh2r+iVLluS7775j2rRpfPzxxxw+fBgXFxcaNGjA008/zfPPP29348rQ0FBef/11y+PrNWvWjE8//ZSAgABq1apls4/hw4eTmprKihUrOHjwIImJiQAOLSMsU6YM3333HfPnz2fFihXs37+fEydOEBQURMOGDXnooYfo1KlTpjYZ/ScmJrJjxw67fWdshu+Mjhw5wg8//ABgd9bUtdq2bUuJEiU4d+4cn332mdVrtnv3biA9iejr60uJEiVo0qQJDzzwAN27d880M8+e2bNnc9ddd/H+++/zyy+/ULRoUTp27Mgbb7xBpUqVHD63qlWr8tlnn/Hmm2+yZ88eTpw4YbkDX06Mfa6D3TsvmqaZZYLtZstt1XF1daVp6H3pZZgkJiTi6eWJgXU/N1t+bZ0K5SuyZpXtpK6IiEhhkdV12x5HrscF0c7d1SPHfYuIiHNTQisb1y6/6tq1a472hfLx8WH06NGMHj06R2O2bNkyy2Vf9u78dy13d3ciIyPtzgJr3rx5lmN4enoSHh5OeHh4tmMBHD9+3KF6uSUvx9uyZYvN4yEhITlajufu7k5MTEymY7buepdT1/cxYMAAyzLW7GT1urVu3drhPbfs6TusE17enjfVx61g7fycLfUVEREpCLfSdXvd/G0FHYKIiOQz7aElIiIiIiIiIiJORQktERERERERERFxKkpoiYg4GdM0mTJlCiEhIXh4eBAYGMiwYcPs1j948CAPPvggXl5elClThqlTp5KcnJyPEYuIiIiIiOQu7aElInKTdm44SOLVZDy93bn/kRoAhIeHExsbS0BAAHPnzs3V8UaPHs3EiRNp2LAhQ4YMIT4+nvPnz9usm5KSwhNPPMGff/7J+PHj2b17N8uXLyckJIRx48blalwiIiIF4cuPfsbD1Zt27dqxcePGgg5HRETyiWZoiYjcpMSrySReSSbx6r+znmJjY4mJiSE2Njbb9itWrMAwDHr06AHAuHHjMAzD5g0lrl69yowZMyhatCibNm2ie/fuDBw4kNdee81m35s2beLo0aM88sgjDB48mHnz5uHq6prrSTYREZGCkpaWhmEYmn0sInKbUUJLROQmJSWkAOmJrW8+3Yunq7clkXXhwoVs23fp0oW+ffuyfv16AGbMmEFoaKjNu5T+/vvvJCQk4OnpSa1atfDx8aFChQqsXr3aZt9HjhwBoGLFigAUK1aMYsWKcfbsWS5evJjTUxURERERESkUlNASEblJpmn+7wEkXknGMFxIS0sDsHzPzsyZM6lVqxYAxYsXZ9myZbi6ulrVyzh27tw5nn32WRYvXkxMTAzdunXj3LlzOYtXRERERETESSmhJSJykwzD+N8D8Czijmmm4eKS/uM143t2rt0H68qVK3b3xCpXrpylz+HDh9OjRw9q1qxJQkIC0dHRmKZJYmIiiYmJAISEhAAQHR0NwMWLF7l06RIlS5bEz8/vxk5YRERERESkgCmhJSJykzy80u+v4entToun6pKYepWAgAAA/P39s21vmiY9e/bk1KlTluedOnXiypUrVnWLFStG165dARg6dCjTp09n3759lC1blho1ahAdHU2TJk2oUqUKAA8//DBVq1Zl48aNTJ06lRdeeIG0tDReeOGF3Dh1ERERERGRAqGElohIAZs6dSobNmzgueeeA+D111/n119/pV+/fjbrz5w5k6effprFixcTGRlJ8+bN+e9//4uXl5dVXTc3N9auXUvjxo0ZNWoUmzdvpkuXLowYMSJPz0lERERERCQvuRV0ACIizs7T2z3Td8AyQyvje1YGDx7M4MGDiYuL4/3336dv374MHjzYbn0/Pz8WLVpksyw4OJjdu3dTr149y7FatWqxZcsWAFJTU4mKisLDwyPbuERERJyBi4sLqSmpuLu7Z19ZRERuGUpoiYjcpPsfqWF1bO7cuQUQiYiIyO2ndbd7WDd/G5s3bi7oUEREJB9pyaGIiIiIiIiIiDgVJbRERERERERERMSpKKElIiIiIiIiIiJORXtoiUiu+WzRdjw8rDdkNTFJTEjE08sTAyPXy/NjjJzEUKF8RZvlIiIihYm967Y9jlwLC6pdqZJBDvcrIiK3BiW0RCTXrP5kLeXLl7c6nnFnvXr16uHq6prr5fkxRk5jEBERKezsXbftceRaWBjaiYjI7UFLDkVERERERERExKkooSUiIiIiIiIiIk5FCS0REREREREREXEqSmiJiIiIiIiIiIhTUUJLREREREREREScihJaIiIiIiIiIiLiVJTQEhERERERERERp6KEloiIiIiIiIiIOBUltERERERERERExKkooSUiIiIiIiIiIk5FCS0REREREREREXEqbgUdgIjcOnp3bI+Hh4fVcROTxIREPL08MTBuqrx4qdJ8tHpNnsQvIiJyO7F33bYnu+t1YWl3M23T0lKpWjKAsDYP4eLimqPxXL2KsHbTlzmKU0REbpwSWiKSa957ogXFvDzzdIyeazbnaf8iIiK3i/y4bjunh26oVdjyjbkch4iIZEVLDkVERERERERExKkooSUich3TNJkyZQohISF4eHgQGBjI8OHD7dYPDg7GMAzc3NyoX78+bm5urF27Nv8CFhERERERuc1oyaGIyHVeffVV3nzzTRo2bMiQIUOIj4/n3LlzWbapXr06r776KsePHyc4OJgGDRrkU7QiIiIiIiK3H83QEhGnMGL7PsI3/0SChxdhYWGEh4c73HbFihW4ubkxdOhQAEaOHIlhGIwePdqqbnx8PNOmTaNo0aJs2rSJ7t27M3DgQMaNG5flGKVKlaJdu3a0bt2asLAwypUrl7MTFBEREafV44sfwNefxx57rKBDERG5bSihJSJO4UJSMrEJSQDExMQQGxvrcNsuXbrw3HPPsXnzZgYMGMCkSZMIDQ0lMjLSqu7BgwdJSEjA09OTWrVq4ePjQ4UKFVizJus7K27bto3ixYvTpEkTnnrqKc6ePZuj8xMRERHnlZyWBoZBcnJyQYciInLbUEJLRJzCxcTMHxAvXLiQo/bTp08nJCSEOXPmEBAQwLJly3B1tb4dd8axc+fO8eyzz7J48WJiYmLo0aOH3TGfeeYZPvroI9asWcO9997L2rVrGThwYI7iExEREREREcdpDy0RcQppppn+wDDSn6el5ah9fHw8cXFxlsfnz5+nbNmyVvWqVKmCi4sLaWlpDB8+HC8vL2bOnMlPP/3E6dOnMU2ThIQEDMPA0zP9VudjxowBIDU1lcuXL/Pdd9+xb9++Gz1VERERERERyYZmaImIU3D5XyKL/yW2XFwc//Flmia9e/fmzJkzvPnmm5imSadOnbhy5YpVXX9/f7p16wbA0KFDmT59Ovv27aNs2bJUrlyZ6OhovL29qVSpEgD79u2jdevWTJ8+nQULFvDWW28B0LRp05s5XREREREREcmCZmiJiFPw83S37KEF6YknR02dOpWNGzfSqVMnhg4dSrFixXjxxRfp168fCxcutKo/a9YsDMNg8eLFmKZJ8+bNmTRpks1ZYSVLlsTLy4tJkyZx/vx5AgICGDBgABMmTLiR0xQREREREREHKKElIk7B38MdgNiriQQGBhIQEOBw28GDBzNw4ECioqIAiIiIICIiwm59Pz8/Fi1alOlYamoqUVFRBAcHY2YsfwTKlCnD+vXrM9WpV6+ezf25RERE5Nbk7uJCUmoq7u7uBR2KiMhtQwktEXEKE5rWAaDnms2sXLmygKMRERER+deSNo0IW76Rz77aVdChiIjcNrSHloiIiIiIiIiIOBUltERERERERERExKkooSUiIiIiIiIiIk5FCS2RArZw4UIMw6BXr14FHYqIiIiIiIiIU9Cm8CI3IDg4mOjoaBYsWKBE1DVaLViHi6utHysmpmliGAZg3FS5i5sbzR962Ob4iQmJeHp52o3P092NjZ+td+BMREREbn32r9v2ZHe9Liztbm7MpOQkPNw9smxnJidyZ9mga0ejiH/xHMYoIiI3QwktkQLm5+fHnXfeSZkyZQo6lJs2at5SivgULegw7Jo5tF9BhyAiIlJoFPbrdmE2b8xANny1yfI8NTWVqKioggtIROQ2pISWSAHr0KEDHTp0KOgwRERERERERJyG9tASEcklVatWpX79+ri5uWEYBoZhsHbtWrv1J02aRLVq1XBxccEwDL799tv8C1ZERERERMSJKaElkkt69eqFYRgsXLjQZnlkZCSGYRAZGZnpeHabwsfGxjJ27FjuvvtufH19KVq0KNWrV+eFF15gz549VvVTUlKYN28eTZs2xd/fHy8vL+666y5effVV4uLirOpfO358fDwjR46kWrVqeHl50bx58xy+ClK5cmU++ugjli9fzvLly2nQoIHdulevXuWRRx6hcuXK+RihiIiIiIiI81NCS6QQ27t3L7Vr1+a1115j3759VKhQgZCQEP766y/effddZs6cmal+XFwcLVu2JDw8nO+++w5/f39CQkL4448/eOONN2jcuDH//POPzbGuXr1Ks2bNmDhxIm5ubtSoUQNPT/sbrDubBeMG4e3uwmOPPeZwmxUrVmAYBk899RQAs2fPxs3NjdGjR9ttU7x4cdq1a0dYWBhdunShXLlydutGRkYyffr0W2L/NBERkdvFgnGDcElLoV27dgUdiojIbU0JLZFCKi4ujscff5y//vqLNm3aEB0dzYEDB9izZw8XL15k27ZtPPTQQ5naPP/882zbto2WLVty5MgRjh8/zv79+zl9+jQdO3bk119/pX///jbHW7VqFZcvX+bAgQMcPHiQn3/+mXXr1uXHqeaL1JQUDMMgOTnZ4TZdunShb9++rFq1igEDBrBo0SKaNWtmNcvuWnv27KF48eJ4e3vTsWNHzp49mwvRi4iISGGRmpKCATn6TCEiIrlPm8KLFFLvvvsuJ06coHr16qxdu9ZqttQDDzyQ6fm+fftYsWIFlSpVYs2aNRQrVsxSVrx4cZYsWcKuXbtYtWoV0dHRVKpUKVP71NRUli9fTvXq1S3HvLy8bMaWmJhIYmKi5bmtpYy3ipkzZ/L9998zZ84c/P39Wbp0Ka6urjbr9urVC3d3d2rWrMm8efNYs2YNRYoUYenSpfkctYiIyL9up+u2iIjcPjRDS6SQypgd9dJLLzm09G/NmjUAdO7cOVMyK0ORIkVo1aoVpmna3Hy8Zs2a3HPPPQ7FNmHCBPz8/CxfFSpUcKidM4qPjyc2NhZIX5Z5/vx5u3VHjx5NmzZteOyxx3jjjTeA9EQjgGmaJCQkkJSUlPdBi4iIXON2um6LiMjtQzO0RAqpX3/9FYDGjRs7VH///v1AemJr586dNutER0cDcOrUKauya2dmZWfEiBEMGjTI8jwuLu6W/HBsmiY9e/bk5MmTvPnmm4wbN44uXbqwe/duihQpkqnuvn37eOWVV6hduzZ79uxhwYIFADRt2hRIf+0rV65MiRIlOHPmDADbtm3j8OHDluebNm3Kx7MTEZHbxe1y3RYRkduLEloihVTGcgB/f3+H6l+8eBGAo0ePcvTo0SzrXr161eqYj4+Pw7F5enreUhvG2zN16lQ2bNhA//79GTp0KOfPn+ett96iX79+VnezLFmyJF5eXixevJhLly5RunRpXn75ZctMLVvmz5/PokWLLM9nzZqVV6ciIiK3sdvlui0iIrcXLTkUySWGYQDps3psiY+Pz1F/GcsGL1y44FD9okWLAvD+++9jmmaWX1ltan6rcnVzwzRN3N3dHW4zePBgTNPknXfeASAsLIyUlBSrZBZAmTJlWLt2LZs2beLKlStER0czffp0y0yu4OBgUlJSMs3CWrhwYaZ/l4ykpIiIiBRerm5umJCjzxQiIpL7lNASySUZM5zs3dUuu1lT16tZsyYA33//vUP1a9SoAcAvv/ySo3FuF73HTuNqchqfffZZQYciIiIiTqz32GmkubixcePGgg5FROS2poSWSC6pUqUKALt27bIqO3nyZI73R2rfvj2QvgzNkY3EO3ToAMDSpUs5d+5cjsYSERERERERcSZKaInkkrZt2wKwdu3aTH+x+/vvv+nWrRspKSk56q9v375UqlSJAwcO0LFjR6uN3Ldv385HH31keV6/fn06d+7MuXPneOihh9izZ0+m+qmpqWzZsoVu3bplunW3iIiIiIiIiLNRQkskl1SvXp0+ffqQkpLCI488QpUqVbj77rupWLEi//zzD/369ctRf8WKFWPdunWULl2aDRs2ULFiRWrVqsXdd9+Nv78/DzzwAF999VWmNh9++KElmXXPPfdQqVIlGjduTJ06dShWrBgtWrRg2bJldvf5EhEREREREXEGSmiJ3IDU1FQAPDw8Mh2fN28er732GlWrVuXUqVOcPXuW559/nu+++87huxVeq27duvzyyy+MGDGC6tWr88cff3Ds2DHKli1LeHg4AwcOzFS/aNGifPHFF3z00Uc8/PDDXLlyhZ9//pmYmBjq1KnDsGHD+PHHH/Hy8rrhcxcREREREREpaG4FHYCIM8q4G931SSo3NzdGjx7N6NGjrdpERkbavLtgr1696NWrl92xSpQowZtvvsmbb77pUGwuLi507dqVrl27OlQ/u/FzYuxzHXBxsZ0nN03TcifIvCh3pI5hGDR7sAkG1nVMTBITEvH08ryh8tzoI6B4YFanJyIikquyum7b48j1uDC0u5m2SUlJVn+0BDDTDKrcUR2AkgEBNxSTiIjkHiW0RHLo+PHjXLp0CUhfZij/6jusE17engUdhtNa88GWgg5BRERuI7pu58y6+dvY8lXObvIjIiJ5R0sORXIgKSmJYcOGAVCzZk0qV65cwBGJiIiIiIiI3H6U0BJxwNGjR2nUqBElS5bk448/xtXVlSlTphR0WCIO27JlC4Zh4ObmRv369XFzc8MwDIKDg+22admyJYGBgXh4eFC+fHlefPFF3SFTREREREQKBS05FHHA5cuX2bVrF35+frRu3ZoRI0bQvHnzgg5LxGE1atRg+fLlpKWlcfz4cfbu3cvHH39Mo0aN7LapU6cOXbp0wTAMpk6dyjvvvEO1atW4//778zFyERERERERa5qhJeKAevXqkZaWxvnz59m0aZOSWZIrdm44yDef7mXnhoM2y8PDwwkLCyM8PNxm+YoVKzAMg6eeegqAkSNH4ubmxty5c63qlipVii5duhAWFkbr1q3Zt28fAIMHD7Yb3/Tp03nyySd58MEHqVSpEsANb8wrIiLizL786Gc8XL1p165dQYciIiL/oxlaIiIFJPFqMolXku2Wx8bGEhMTY7e8S5cufPPNN7z33ntEREQwd+5cmjVrRt++fbMc99tvv+W3334jNDSUBg0aZFm3WrVqnDt3DoBu3brRp08fDh60nYATERG5VaWlpWEYBsnJ9q/bIiKSv5TQEhEpIEkJKUB6YuubT/fi5V6E+++/n2effRbDMIiNjQXgwoULdvuYOXMm33//PbNnzyYwMJClS5fyzz//ZDnu0qVLARgyZEi2Ma5evZrTp08zZcoUVqxYwRNPPEGVKlUcPEMREREREZG8oYSWiEgBMU3zfw8g8UoyhuGCl5eXZUZUhrS0NLt9xMfHWxJf8fHxnD9/Pssxf/rpJ37++WeqV6+eadmEaZokJiZajdWsWTMA3NzcePLJJ1m0aBHjxo1z+BxFRERERETygvbQEhEpIJb9qAzwLOKOaaaRkJBAiRIlCAwMxMUl/Ud0xvfrmaZJz549OXnyJBMnTsQ0Tbp06UJCQoLdMadNmwbAoEGDMu2HFR0djbe3t2X21RdffMHTTz/Nu+++y7x58xg9ejSQvlG8iIiIiIhIQdMMLRGRAuLh5UbilWQ8vd1p8VRd1nywhe92/sjFixfx9fUlLCyMmJgY/P39bbafOnUqGzZsoH///gwbNgwfHx9efPFFJk6cyNq1a63qnzhxglWrVlGiRAm6du2aZWyBgYHs37+fNWvWkJKSQrly5Rg+fDhjxozhwIEDuXD2IiIiIiIiN04JLRGRAuLp7Z7p+/UCAgIyfb/e4MGDM92lMCIigvDwcKKiomzWr1ixIgkJCURFReHp6ZmpLDg4GNM0SU1NJSoqivr167Nnzx6rPlJTU7M9LxERkVuNi4sLqSmpuLvbvmaLiEj+U0JLRKSA3P9IjSzL586dm0+RiIiISFZad7uHdfO3sXnj5oIORURE/kd7aImIiIiIiIiIiFNRQktERERERERERJyKEloiIiIiIiIiIuJUlNASERERERERERGnok3hRSTXfLZoOx4e1nf/MTFJTEjE08sTAyPXy/NjjPyIIbBEKZv9ioiI5AV71217HLkWFoZ2N9M2LS2NI0ePEHJHCC4umf/2X6pkUI5iEBGRvKWElojkmtWfrKV8+fJWx1NTU4mKiqJevXq4urrmenl+jJEfMcTFxeHn52ezbxERkdxm77ptjyPXwsLQ7mbaZlyLjx36Cl9f3xyNKSIi+UtLDkVERERERERExKkooSUiIiIiIiIiIk5FCS0REREREREREXEqSmiJiIiIiIiIiIhTUUJLREREREREREScihJaIiIiIiIiIiLiVJTQEhERERERERERp6KEloiIiIiIiIiIOBUltERERERERERExKkooSUiIiIiIiIiIk7FraADEJFbR++O7fHw8LA6bmKSmJCIp5cnBkaul99MH/6lgvho9ZqcnKaIiMgtwd512x5HrseFod3NtE1LS6VqyQDC2jyEi4trno2nzx8iIjdPCS0RyTXvPdGCYl6eBR1GjvRcs7mgQxARESkQznjdzh8P5fkI+vwhInLztORQREREREREREScihJaIiIiIiIiIiLiVJTQEhHJY5MmTaJatWq4u7tTv359tmzZkqk8LCyMMmXK4Ofnl21f0dHR1K9fH19fX7y9vbnrrruYPXt2HkUuIiIiIiJSOCmhJSKSx65evcojjzxC5cqVbZYbhsGzzz7rUF+GYdCmTRvefvtt3njjDU6dOkVERAQHDhzIzZBFREREREQKNSW0ROS2NGL7PsI3/0Sie/pmuP379+eNN96gf//+2bZdsWIFhmHw1FNPATBy5EgMw2DMmDE260dGRjJ9+nRKly5tt7+xY8c6FHfFihUZN24cjz76KA8++KBDs7pERESk8OjxxQ8keHjRrl27gg5FRMSp6S6HInJbupCUTGxCEhjpt9Y+f/48Fy9exN3dPdu2Xbp04ZtvvuG9994jIiKCuXPnEhoaytixY9m/f39eh86vv/5KvXr1AHB1dWXGjBnUrFkzz8cVERGRm5eclgaGQXJyckGHIiLi1DRDS0RuSxcT//0QGRYWRmxsLAAXLlxwqP3MmTOpU6cOs2fPJiAggGXLluHq6poXoVqpXLkyX375Je+99x6BgYGMHz+eY8eO5cvYIiIiIiIihYESWiJyW0ozzfQHhkFMTAxpaWnpx//3PTvx8fGWJFh8fDznz5/PkzhTU1NJSEjI9FdcHx8fHnroIZ577jk6d+5MTEwMa9euzZPxRURERERECiMltETktuTyv6WGmCaBgYG4uKT/OMz4nhXTNOnZsycnT55k4sSJmKZJp06duHLlis3627Zt44MPPuCff/4BYOPGjXzwwQeW8pUrVzJ//nzL80WLFrFhwwYAlixZgre3Nz169ABg/vz5DBkyhAULFjB58mSWLFkCQN26dXP4CoiIiIiIiDgv7aElIrclP0/39D20SE8ohYWFERMTg7+/f7Ztp06dyoYNG+jfvz/Dhg3Dx8eHF198kYiICAYMGGBVf/78+SxatMjyfNq0aQCWOxsOGzaM6OhoS/mAAQMIDQ3lkUceseorICCA5cuXM2fOHDw8PAgJCeHFF1+kVatWOTp/ERERERERZ6YZWiJyW/L3cCfAywPjf0sPixcvjp+fH8WLF8+27eDBgzFNk3feeQeAiIgITNPMNMvqWgsXLsQ0TVJSUti9ezcpKSmYGUsegePHj2OaJhcvXgTg4sWLbNmyBYBevXphmiYrVqwAoH379hw6dIiEhATi4uL46aef6NWr142+DCIiIpLP3F1cwDQduhGNiIjYpxlaInJbmtC0DgA912wGYPbs2URFRVnuHigiIiKSF5a0aUTPNZvZsHkzqampBR2OiIjT0gwtERERERERERFxKkpoiYiIiIiIiIiIU1FCS0REREREREREnIr20BLJQ1u2bKFFixaEhoZaNvm+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e+45APbv32+pN336dP7zn//wn//8h08//dTu+MOGDeP555+3PH/++edZvHixw/GLiIiIiMi/vw8U9/Jg7oP34pWUQEBAAJCz3w8k/2hTeBERwN/Dndiribi5u1suXI4YPHgwgwcPBtKXBIaFhTFhwgS7e2hFRkaydu1am+XdunWjX79+XLx4EV9fX6vynj17UrduXerVq2c5dvz48Ux1UlNTiYqKcjh+ERERERFJ/33g2u+A5feCnPx+IPlHCS0REWBC0zqELd/Ixh923dSG7iIiIiIi4nwmNK1jdWzu3LkFEIk4SksORURERERERETEqSihJSIiIiIiIiIiTkUJLRERERERERERcSraQ0vyzJYtW2jRogWhoaFs2bKloMPJV7frubdasA4XV1s/VkxM08QwDNJvhJvb5bkzBi4utGzTzk7/kJiQiKeXJyUDAvhk5XK79URERJyB/eu2PY5cjwtDu5sbMyk5CQ93jxy302uT++PptSks7W5uzML42pjJidxZNujaVpbP+sb/2vmXCrLXXAoJJbQkS8HBwURHR7NgwQJ69eplt17z5s3ZunUrY8eOJTIyMkdjbNy4kRUrVrBjxw7OnDlDamoqQUFB3HvvvXTq1Iknn3wSd/d/7zQRGRnJuHHjsu33dksmFQaj5i2liE/Rgg4jz80bM7CgQxAREblpt8t1W0TkevPGDGTDV5sszzPuFF6vXj3dIMqJKKEleaZIkSLceeedVKxY0Wb52bNnCQsL45tvvgGgWLFiVKlSBXd3d06cOMHq1atZvXo1ISEhbN26lTJlymRq7+vrS+3ate2On1WZiIiIiIiIiDgvJbQkzzRs2JDffvvNZtnFixdp2rQphw8fJiQkhLfeeot27dplmom1e/du3nrrLT755BPOnDljldC6++67NQNLRERERERE5DakTeGlQPTv35/Dhw9To0YNvvvuO5544olMySyA+vXrs3LlSlatWoWPj08BRSqS//z8/DAMI9NXcHCw3fotW7YkMDAQDw8PKlWqxOTJk0lMTMy/gEVERERERPKZElqSZ7Zs2YJhGDRv3jzT8aNHj7J8efqG2h9++CElSpTIsp8OHToQEhJyU7F8++23uLq64uPjw6FDh6zKDx48iLe3N66urnz77beW45GRkRiGQWRkJKdPn6ZPnz6ULVsWLy8vqlevzpQpU0hJSclx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s4NuF95Fi2X6y46jG+dPnTqVDRs20K9fP3r16kVISAgvvfQS/fr1Y+HChVb1//zzTz799FNKly5Nt27dsuw7MDCQ/fv3s2bNGlJSUihXrhy9evXK8uYCIiJye7ldr9siIhmf34sU86Pr0Nctx+eNGcjKlSstz1NTU+nUqRMXL17UzbGciFKPku/uv/9+gBztu5WboqKimDBhgiXzPnToULvTTTNklST6559/ADLth2VP0aJFM7W5nmmalrEc6e/6frt164Zpmll+3cisNknnXbQYPr7+QHoiKSAgwKF2gwcPxjRN3n77bQD69++PaZo2k1kAFSpUIDk5mb///tvqF5CyZcuSkpLC6dOnAahfvz579uzh0qVLXL16lUOHDhEREYG7u/uNnaSIiIiIyC0i4/O7d1HHflfLyWd8KXiaoSX5rlOnTowePZo9e/bw/fff07hx43wbOyEhge7du5OUlMT48eOJiori008/5YUXXuDTTz+12+7XX3+1efzKlSucOHECSL/LXHaqVavG3r17OXjwoM3yI0eOkJSUhKurK1WrVnXgjNJlLGH85ZdfHG4jOdeh31DA+i86IiIiIiJS+GR8fnfESy+9RL169bK9cZMUHpqhJfkuJCSEsLAwAPr06WPZKNuetWvXcuTIkVwZe+TIkRw4cIDGjRszfPhw5s2bR+nSpVm1ahWLFy+2227nzp1ERUVZHZ8/fz4JCQlUqlSJO++8M9vxH374YQDef/99EhISrMozZvA0adIkR8sAH3jgAQIDA9m7d69mYImIiIiIiMgtTwktKRCzZ8+matWqHDx4kMaNG7N+/XqSk5Mz1YmKiqJr16507NjxpjeQB/jmm2+YMWMGRYoUYfHixbi6ulKiRAnmz58PwIsvvmiZbXU9Nzc3evXqRXR0tOXY9u3bLfsUXb9xtz3/+c9/qFixImfOnKFXr16WPbUAli5dyrvvvgvA8OHDc3RuXl5evPbaa0D6DLg1a9ZgmmamOr/88gvDhg1jx44dOepbREREREREpLDRkkMpEMWLF2fHjh107tyZbdu28cQTT1CsWDGqVKmCm5sbf/75p2WfqbvuuougoCCrPvbs2WP3jn6QvgfVf//7XyB90/RevXphmiZTp04lJCTEUq9t27a88MILzJs3j549e7J582ar5NTzzz/P+vXrueOOO6hVq5ZlryKAxx57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E7169RLbtm0TSUlJGvlzG9ASQoiwsDBRs2ZNjUCSvuuSrF68eCHCw8PFyJEjRYMGDUTZsmWFlZWVcHBwEFWrVhUffvih1vVEVrm5Rnj8+LHo37+/8PT0lINmho4NtXv37on//e9/okuXLqJatWrCxcVFWFpaipIlS4pmzZqJuXPnioSEBK1yhgJa2b10vRf++ecfMXHiRFGrVi3h4OAgbG1tRYUKFUTbtm3FkiVLxOPHj43aH7UHDx4IS0tLUadOHZ3pryOg9epLqVQKb29vERwcLI4cOaJ33V9//bVW4NlcSUIU8M3jREREpOH48eNo2rQpBg4ciJUrVxZ0dYyyevVqfPDBB5g7dy4+++yzgq4OERERkUkNGTIEK1aswNGjR+V5tQqb9PR0VKpUCYmJibh586bGkx/NEQNaREREhVDnzp0RHh6O69ev59skoa+LSqVC5cqVkZKSgr///hs2NjYFXSUiIiIik3r06BEqVKiAwMBA/PrrrwVdHZ3Wrl2L/v37Y/HixRg+fHhBVyfPLAu6AkRERKRt3rx5qFWrFu7du1foA1oPHjxAnz59EBQUxGAWERERFUtlypTBunXrcPnyZSQmJhbK0U+SJGHatGkYMmRIQVclX3CEFhERERERERERmRVFQVeAiIiIiIiIiIgoJxjQIiIiIiIiIiIis8KAFhERERERERERmRUGtIiIiIiIiIiIyKwwoEVERERERERERGaFAS0iIiIiIiIiIjIrDGgREREREREREZFZYUCLiIiIiIiIiIjMCgNaRERERERERERkVhjQIiIiIiIiIiIis/L/1jVvyIyGAbEAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True)\n", "\n", "cmap = ['#FD7F69', '#9FC9DD', '#89A76F']\n", "\n", "style_dict = dict(\n", " orient='h',\n", " palette=cmap,\n", " edgecolor=\"k\",\n", " linewidth=2.0,\n", " errwidth=2.0,\n", " capsize=0.07)\n", "\n", "ax = axes[0]\n", "b = sns.barplot(x=\"s\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict\n", ")\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Time (sec)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "#ax.set_xscale('log')\n", "ax.set_xlim([0, 5e3])\n", "ax.set_xticks(np.arange(0, 5000, 100), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "ax.get_legend().remove()\n", "\n", "\n", "# Add text, slowdown over chromap\n", "ncores_order = [4, 2, 1]\n", "for icore, ncores in enumerate(ncores_order):\n", " for ilabels, util in enumerate(labels):\n", " if util==\"chromap\":\n", " continue\n", " \n", " df_reference = df.query(f'ncores=={ncores} and util==\"chromap\"')\n", " mean_reference = np.mean(df_reference['min'].values)\n", " df_target = df.query(f'ncores=={ncores} and util==\"{util}\"')\n", " mean_target = np.mean(df_target['min'].values)\n", " \n", " slowdown = mean_target / mean_reference\n", " \n", " w = b.patches[0].get_height()\n", " \n", " b.text( s=f\"x {slowdown:.1f}\", \n", " x=mean_target+150, y=ilabels + (icore-1)*w,\n", " ha = 'left', va = 'center', fontsize=8, weight='bold')\n", "\n", " \n", "\n", "ax = axes[1]\n", "b = sns.barplot(x=\"max_rss\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict)\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Maximum Resident Set Size (MB)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "ax.set_xticks(np.arange(0, 30000, 1000), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "\n", "fig.suptitle('Benchmark of different Hi-C mapping tools for 1 mln reads (5 iterations)', y=0.99)\n", "\n", "# (x, y, width, height)\n", "bb = (fig.subplotpars.left, fig.subplotpars.top+0.002, fig.subplotpars.right-fig.subplotpars.left, 0.2)\n", "ax.legend(bbox_to_anchor=bb, title=\"Number of cores\", loc=\"lower right\", ncol=3, borderaxespad=0., bbox_transform=fig.transFigure, frameon=False)\n", "\n", "plt.savefig(\"benchmarking_1mln.pdf\")" ] }, { "cell_type": "code", "execution_count": 92, "id": "c7c68d19-7606-4d35-a150-580fd5c78cd6", "metadata": {}, "outputs": [], "source": [ "dct_mapper = {\n", " 'bowtie': 'bowtie', \n", " 'bwamem': 'bwamem', \n", " 'bwamem2': 'bwamem2', \n", " 'chromap': \"\", \n", " 'fanc_bowtie2': 'bowtie',\n", " 'fanc_bwa': 'bwamem', \n", " 'hicexplorer': 'bwamem', \n", " 'hicpro':'bowtie', \n", " 'juicer': 'bwamem', \n", " 'pairtools': 'bwamem',\n", " 'pairtools_bwamem2': 'bwamem2', \n", " 'tadbit': 'GEM', \n", " 'tadbit_bowtie2': 'bowtie'\n", "}\n", "df.loc[:, \"mapper\"] = df.util.replace(dct_mapper)" ] }, { "cell_type": "code", "execution_count": 93, "id": "2996f9c4-0ed4-4d81-80aa-7044eed59648", "metadata": {}, "outputs": [], "source": [ "df = pd.merge(df, df, left_on=['mapper', 'ncores'], right_on=['util', 'ncores'], suffixes=[\"\", \"_mapper\"])" ] }, { "cell_type": "code", "execution_count": 94, "id": "90943478-8a46-486d-b6d7-74a1306dbc70", "metadata": {}, "outputs": [], "source": [ "labels = [\n", " 'pairtools_bwamem2', \n", " # 'tadbit',\n", " 'pairtools', \n", " 'tadbit_bowtie2',\n", " 'juicer', \n", " 'fanc_bwa', \n", " 'hicexplorer', \n", " 'hicpro', \n", " 'fanc_bowtie2',\n", " # 'bwamem2',\n", " # 'bwamem',\n", " # 'bowtie',\n", "]\n", "labels_mod = [\n", " 'bwa-mem2 + pairtools', \n", " # 'GEM + TADbit',\n", " 'bwa mem + pairtools', \n", " 'bowtie2 + TADbit',\n", " 'Juicer', \n", " 'bwa mem + FANC', \n", " 'HiCExplorer', \n", " 'Hi-Pro', \n", " 'bowtie2 + FANC',\n", " # 'bwa-mem2',\n", " # 'bwa mem',\n", " # 'bowtie2',\n", "]" ] }, { "cell_type": "code", "execution_count": 113, "id": "7d976913-dc1e-49f3-ac37-5bc2f16a13fd", "metadata": {}, "outputs": [ { "data": { "image/png": "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APTv35+JEydSr149mjVrRkJCQpbGKCIiIiLyJBUrVgyA48ePEx4eztatWwG4c+cOERERdOvWjYMHD7J48WK+/vprADp16sSwYcOy1F9q9+B+fn4plgdWrVqVJk2a0K1bNyAx2LVv3z7279/PkiVLstS/5A6aMSUiud5HH30EwHvvvWfZZmOT+Ovr999/59NPP2X06NEcOnSI3r17W22jR48eREdHM2XKlDT7unr1Ki+88AK3b98mJCSEUqVKERMTw6RJkwgICCBfvnyWT5ju3r3LjRs3UrTh6elJeHg4P/zwAwDPPvssn332GTNnzmTIkCGULl2a7t27c+jQocyfDBERERGRLIiI+d+qhbt371rdx9fXl0GDBnHhwgV8fHwYO3YsefLkARJTaRw4cICVK1dSu3ZtNm3axKuvvsrq1av55JNPrLbXuXNngHQ/PLZ2D/4oGxsbfvjhBw4fPsyJEyeYN28eAwcOZOHChaxZswYfHx8qVqzIV199lZHTIbmIAlMikqsdPnyYHTt2ULFixWS5qby8vIDET066du3KiBEjgMR16tYYjUbi4+Mt04+tOXfuHA0aNOC3335j48aNtG/fHoCHDx9y584dFi9eTLly5Zg7dy6AZemfNc7OztSpUweAt99+mw8++IBjx44xZ84cfvrpJ0qVKpXlT5ZERERERDLLmCQxeFr3xPPmzePy5cvs2bOHvXv3Eh8fj7e3Nx4eHqxZs4YHDx7QuXNnXn31VQYMGADApk2brPf5//2ktWLgxIkTPPfccynuwa2xsbGhZs2aVKlShbFjx9KwYUOee+45+vbty6hRoxg+fDiTJ0/mwYMHaZ4LyV20lE9EcrWPP/4YSMwtlTSZYf369SlTpgxHjx4lKCiI8PBwAF544QWr7axYsYKePXvSrFkzy7TjpMLCwujTpw/37t3jnXfeISoqijVr1lClShXKli3LtGnTKFWqFDY2Nnz++eesW7eO119/PUPBJScnJ3r27Gnpd9myZfz666+prsUXEREREcluNgYDCf8fnDKvPrBmzJgxeHl5ER8fz/z58zGZTJanSvv4+ACwZMkS3N3dCQ0NBRI/LLZmzZo1APTr148vv/wyRXlYWBj+/v5EREQkuwevWLFimsdy+PBhVq5cycmTJzEajRiNRr7++msSEhIwmUxpBt4k91FgSkRyrRs3bvDll19S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mJiYZPtERERQqlQpateuTf369R+rv4iICAYOHIinpye+vr6UKlWKdevWWcp/+eUXXnvtNRo3boyzszOVK1fm7NmzKdqJiYnhjTfewMXFhSpVqnD48GFLWZ8+fRg1atRjjVNEREREROTvoqV8IvK32b/nELExseTBiW1fHMMhbx7qt6qULW3v3XKaqL8e4mDrxOzZs/nss8/SrVOtWjU6duyIwWDgo48+4vPPP6dBgwa8/fbbln3efPNN7ty589jjM5lMtGrVij179tCxY0fKlSuHyWQiLi4OgN9//52GDRty7949OnbsSIMGDTh27BixsbEp2lq1ahXr169n+vTpBAcH8+677/Ljjz9y6NAhdu3axYkTJx57vCIiIiKSO+3fc4h7UfcB+O38b7Rs2TLFPqtXryYhIYGWLVuydevWv3uIIpmiGVMi8reJjYklJiYx0BLzII6Yh3HZ1nbMwzhMRhMGg4F79+5lqM6sWbNo27Ytzz//PF5eXgAYDAZL+Zo1a/jyyy+ZOnVqum0FBwdjMBjo2LGj1fJt27axZ88eGjRoQEhICC1atGDChAl07twZgAULFvDnn3/y7rvvMmDAALp168bcuXOpUqVKiraioqJwcHCgefPmlC5dmoiICKKjo5k6dSrz5s0jb968GTp+EREREXn6xMbEYjKZMJlMREdHW93HaDQCWD4EFcnNFJgSkX81Hx8fypQpw3fffcdLL71E7969Abh69SoDBw5k2rRpVK5c+bH7MS+3+/333/Hw8KBBgwb4+vpy6tSpZOWbN2/Gz88PV1dX2rZtS1RUVIq22rZti4eHB9WrV2fLli28/fbbBAYGUrlyZZo1a/bYYxUREREREfm7KDAlIn+b2Njkn9jERsdnX9tJ2rIWzEnN+vXrWbt2LbVr1+a7777jq6++AuCtt97C29ubVq1acf369cQ+YmO5cOGC1Xa6d+9OXFwcq1atslpua2sLJAamFixYQK9evTh06BABAQHJyo1GIzNmzKBly5asX7+ewMDAFG15enoSHh7Ozz//zIULF6hduzbBwcEMHTqUd955h5IlS1K3bl0OHTqU4fMgIiIiIk+HpPfUDx8+zMGRiGQPBaZE5G9jMpkAMGBI9jo7285su40aNaJ9+/aMGDGChIQEgoODAbh48SJhYWH4+PjQvXt3AMLCwqhTp47VdoxGI/Hx8SQkJFgtL1euHABVq1alS5cu9OjRA4Bff/01WXmrVq3w9/enZ8+eycof5ezsjK+vL56envTp04cpU6YQHh7O3Llz2bFjBxUrVmTo0KEZPg8iIiIi8nTIzntokdxAyc9F5G9jMBgS18NjwoAhWT6n7Grb/H16vvnmG1atWoWfnx8mk4m5c+cCiQnRAWbOnMndu3cBOHHiBIGBgZQrV46PPvrIanuhoaH07t2bDh06sGbNmhTlLVq0oEyZMhw9epTZs2ezb98+AJo2bQpA//79mTNnDl988QUODg7s2bMnWXlq5syZg5OTEwEBAXzyyScALF26lKNHj+Lk5JTueRARERGRp0vS+16RfwIFpkTkb2Nvn8eS/BzA3jH7fgXZO9oR8yBxWrOrq2u6+xcsWJATJ06wYcMG4uPj8fT0JCAggHHjxgHJA0L58uWz/PvKK69kaXx58uRh8+bNvPXWW4wePRonJyd69OhhCXT5+Piwbt06Ro8ezfTp0/H09GTSpEnJnhD4qMuXLzN58mRLEMvX15du3boxa9YsihUrZglUiYiIiMg/R9J7aj30Rv4JFJgSkX+l2rVrc/ToUcvrhIQEwsLCyJMnT4p9/f39OXToEDVq1Ei1vR49etCrV680+6xUqRI//fSTpa8aNWpYcksBvP7667zyyitWy6zx8vLi9u3blvHb2try2WefERISkmY9ERERERGR3EI5pkTkb2PvYI+Dgz0ADk55cMibMgiUVQ5582CwSZzW7OLikm3tioiIiIjkJvYO9hgMiWkxHB0dre5jY5P4p761D11FchvNmBKRv009v9oAbP16Cy+1s55EPKvqt6oEwMZlOxgyZEi2ti0iIiIikluY76nv3r5HhfIVrO7TqVMnfvzxR0JDQ//OoYlkiWZMiYiIiIiIiIhIjlBgSkREREREREREcoQCUyIiIiIiIiIikiMUmBIRERERERERkRyhwJSIiIiIiIiIiOQIPZVPRLLNyuA12Nmm/LViNBotj6wFiDfGs2nZTkyYiImOwcHRAQOGZHWyWla4YJFsPCIREZF/rtSu22l59JqeW+tlta4JEw8ePMDJySnFPcaT6C8n6mW1rs5N6nLq3Dg4OnLt6rVU9ylUqFCm2xXJCQpMiUi22b5tB8WLF0+2LSEhgbCwMGrUqIGtre3fViYiIiJps3bdTkta19/cVO9x6kZGRuLu7k5ERARubm5PvD+dm9xT73HqPi3nRiS30lI+ERERERERERHJEQpMiYiIiIiIiIhIjlBgSkREREREREREcoQCUyIiIiIiIiIikiMUmBIRERERERERkRyhwJSIiIiIiIiIiOQIBaZERERERERERCRHKDAlIiIiIiIiIiI5QoEpERERERERERHJEQpMiYiIiIiIiIhIjlBgSkREREREREREcoQCUyIiIiIiIiIikiMUmBIRERERERERkRxhl9MDEJF/jjdav06ePHlSbDcajdjYWI+DJy2zs3egSrVquLm5MXHixCc6VhERkX+71K7baUnrmp6b6mW1rslkolb1arR6sTkGgyFTdaMiIimWzw0Dyet5FC7CyvUbMtWWiMi/iQJTIpJtVi2cj6uLS5brX7wbSdnyFRg3blw2jkpERESsedzrtiQ3dsR7TGr4bIrtPTb8lAOjERF5emgpn4iIiIiIiIiI5AgFpkREREREREREJEcoMCUiIiIiIiIiIjlCgSkREREREREREckRCkyJyD9WZGQkPXr0wMPDAxcXF9q0acOtW7eeaJ+XL1+mSZMmuLm54e7ubnVMPXv2xN/fH3d3d15//XWuX79uKT99+jQDBgzA2dmZwoUL88477xAXF2e1r61bt1KqVCnc3d0ZMmSIZfvZs2cpVqwYN2/ezP4DFBERkWz3888/07BhQ1xdXS3X/9jY2GT7RERE4OXlhcFgoH79+o/V37179xg0aBBFixbF3t4eLy8v1q1bZ3XfKVOmkD9/fnx8fJJtDwkJwc/PD5PJ9FhjERHRU/lEJFfoNnQYsbH/C8AMGjSIvn37PlabQ4YMISQkhDfffJNChQoRGBjItWvXaNas2eMON1UxMTEULlyYdu3a8dlnn1kd04oVK3jjjTeoUKECkydPJiIigm3bthEfH0+bNm24fPkykyZN4ujRowQFBeHh4cH48eNTtDVgwADKlClD586dmTp1KlWrVqV69er079+fwMBAihQp8sSOU0RERP7HfB/T7Zv9rGhR73/bv9lPrL0jLVu2ZOvWrVbr/vnnn7Rv3x6TycS0adPYvn07QUFBuLm5MXHiRMt+b775Jnfu3HnssZpMJoYMGcKxY8fo1KkTTZs25dKlS1Y/CPvtt98YM2YMAwYM4Nq1a/z3v/8lJiaG27dvM3LkSL7//nsMBsNjj0lE/t00Y0pE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7O3zWJKfA9g7Pt2/quwd7Yh5kDjd38PDI9397969y+nTiU8i/Oabb/jmm28AaNSoER9//DE2Njbs2LGDRYsWYTAYqFevHpMnT8bR0THLY1y3bh1XrlyhdevWlCtXLlnZ7du36du3r+X12bNn6d+/P3379rUsL3zUjRs3mDp1Knv27AGgefPmdO/e3fJkwUmTJmV5rCIiIrnBo/crIiKSNU/3X3si8o9k72APQHRMDA5OeXDImyeHR/R4HPLmIfp+LHny5CF//vzp7v/MM88QHx9vSYBulpCQQFhYGK6uroSFhVkts6ZHjx5Ur16dGjVqpNpnp06dUp1x5e3tnWK5Qlr9QWKC9ps3b1qOwdbWluDgYObOnYu7uzv169dPta6IiMjTwN7B3pJnynydzJPn6b5nERHJCQpMiUiuU8+vNgBbv97CS+3q5PBoHl/9VpXYtGynZSleermeREREJPcz36/cvX2P8j7l2bRpE+vXr8/hUYmIPH2UY0pERERERERERHKEAlMiIiIiIiIiIpIjFJgSEREREREREZEcocCUiIiIiIiIiIjkCAWmREREREREREQkR+ipfCKSbVYGr8HONuWvFaPRiI2N9Th4WmUxsTFsXLYDA4Zk202YiImOwcHRIVeXGY1Gws+FU65sOYoWKWb1GEVERHJKatfttKR13c5N9bJa14SJBw8e4OTklOK6nhp7e3uuXrmKu7t7VoYpIvKvp8CUiGSb7dt2ULx48WTbEhISCAsLo0aNGtja2v6ryiIjI3F3d+f8r9/j5uZm7ZSJiIjkGGvX7bSkdc3LTfUep6752h0REZGpa7e5PxERyTwt5RMRERERERERkRyhwJSIiIiIiIiIiOQIBaZERERERERERCRHKDAlIiIiIiIiIiI5QoEpERERERERERHJEQpMiYiIiIiIiIhIjlBgSkREREREREREcoQCUyIiIiIiIiIikiMUmBIRERERERERkRyhwJSIiIiIiIiIiOQIBaZERERERERERCRHKDAlIiIiIiIiIiI5QoEpERERERERERHJEQpMiYiIiIiIiIhIjrDL6QGIyD/HG61fJ0+ePCm2G41GbGysx8EzUmZn70CVatUs200mE1FRUTzzzDNMnTo1ewYvIiLyL5PadTstaV23c6Lew/v3KezqgkfhIqxcvyHT7YuISM5TYEpEss2qhfNxdXHJ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B6Z69eqVrP7u3buTfRUtWjTN4zQajbRv357Tp0/TsWNHrl69Snh4OKdPn+bChQs0bNiQ3bt3M27cuAyfu6+++ooHDx5ga2uLr69vhuvldubZUs2bN6dgwYJA4syppGWPo0KFChQoUADAam6ua9eusWTJElavXs2lS5c4dOgQV69epWnTpty6dYvu3bunG6gpWrQou3fv5qWXXgJg1KhRyd4v1nJw/dOdO3cOwBKUK1myJIBlFlp4eLjVcvP2zMpMe23btrU87XLLli28/fbbTJw4kXr16tGsWbMs9S8iIvJvYP4w6vjx44SHh7N161YA7ty5w507dyz7zZgxA0i8Lg8fPvx/wa8smjRpEm5ubnh4eKTaXtmyZfH396dbt26MHj2anj17sm/fPvbv38+YMWMeq38RkaeBAlMZ9NJLLzFs2DBsbBJPmZOTE8uWLaNo0aJcunSJNWvWWPYNDw9n/fr1QGKAokyZMpay2rVrM3fuXAA++eQToqKiLGWNGjUCkgefjh49SmRkJO3bt6dkyZLpBqYe15YtW9i7dy916tRhxYoVFClSxFJWvHhx1q5di4uLCwsXLszQrKn79+/z3nvvAdCjRw/LzJx/gtDQUOB/wSjAspzvm2++4datW4/dR4kSJQD4448/UpTFx8czcODAZJ/UFShQgJUrV+Lo6MiBAwdS5E7KLjExMURGRib7yin37997ou2nd0OakRvWP//8k/79+z92f56enmzYsIHdu3dz4cIFateuzWeffcbMmTN55513ePnll/H19eXQoUMZ6ktERP4dctN1O7tk9vrv6+vLoEGDuHDhAj4+PowdO9Yye8lkMuHs7MzYsWMtHy4WKFCADz/8kGXLllltr0ePHsTFxaX6kBpze19++SWhoaEUKlQo1fZsbGz47rvvOHz4MCdOnGDevHkMHDiQhQsXsmbNGnx8fPDx8UmWe0pE5J9EgakMGjRoUIpt9vb29OnTB4Bvv/3Wsv3777/HZDLRoEEDnn322RT12rZtS/Hixbl//z579uyxbDcHl5Iu3TN/37hxYxo3bsylS5e4dOkSANevX+f8+fM888wzyYJfj8McUAsICMDOLuVDG4sVK0adOnW4d+9essTLqenduzfh4eEUL16cDz/8MFvGmBuYAwNOTk68/vrrlu0VK1akRo0axMfHJwtWZpU5D0HSAGZS1t6X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m8yePZuuXbty/vx5qlWrRmpqKtu2baN27dp8/fXXmc598sknAax+qWf8+eaypKQkDh48aPn2wGz58uW89NJL7N27FycnJ2rWrIm3tzd79uyhR48eub4htGXhwoW0a9eO8+fP8+CDDxIXF8eaNWto3LgxiYmJDB06lN69e3P16lUqVKjAlStXWLp0Kc8995zNpxTu3r2bwMBAFi5cyIULFwgICMDb25tdu3bRoUMHXnnllSxjOXjwICEhIezZs4fy5cvj4ODAl19+SaNGjfjhhx/YtGkTjRo14siRI1SoUAGj0cgnn3zCk08+yaVLl/L9GRQmMTExHDhwACcnJzp27EjdunWpUKEC8fHxfPjhhzleX7VqVTp37kxycjLTp0/PVZu//fYbe/fuBWDQoEG3FP+d8Pe1awAYjWncuJZg52j+u25cS+Dv+KsAxMbGcvny5VxdN3nyZEaMGEHp0qWtyqpXrw5A+/btqVu3LidOnMDX1zfLGVOrV6/GYDDQpUsXm+VGoxFIn+3XuHFjqlatCkDx4sUBaN26NZ07d6Z58+Y89dRT2cadkJCAq6srzZo1o0KFCly7do3ExET69+/P4sWLcXd3z9X7FxGR/5601NRMf+aXue/Navxz+fJlYmNjuXLliuWY0Wi0bA/RpEkT6tatC/zbFy5dupTU1FSGDx/OgAEDmDx5MgCLFy+22Ya57+3UqZPN8ueff56dO3cydOhQxo4dS8uWLTEajZYv69966y0A5s2bx+DBgwkLCyMhIYH169db1ZWx761YsSJxcXGWvvett97Czc0tNx+biNzllJi6yYQJE5g7dy6//vor3333HRcvXqRr167cuHGDbt26cePGDcu5DRo0ALJOTPn5+fHtt99mmgVj/rl27dqZftE2bNiQr776ioSEBE6dOsV3333H2bNniY6Oplq1aixZsiTf32qMHTuWdevWcf78eaKiojh16hQPPvggP/74I507dyYiIoL/+7//43//+x/Hjx/n+++/p3jx4uzevZsdO3Zkquu3336jXbt2xMfHM3PmTK5cucLRo0c5d+4c+/btw8/Pj7lz5/Lxxx/bjGXixIkMHDiQS5cucejQIS5dusRzzz1HQkICL774Ii+88AKvvfYav//+O4cPH+bXX3+ldu3a/Pnnn7zxxhv5ev+FjXm2VLNmzSxL6cw33bmdHTd58mQc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MyXRcupz/P39LRu5p6Wl4ejoyKpVqzJ9sSMi9x4lpkSk0HFxdQEgMSkpfeq6u7OdIxLJzNXdmeTEVIxpxiwfsy0iIv8dDg4OpBnTcHTIXbI/O+ZxT27HP+Z+SP2RiNytlJgSkUKnTr30DZg/+XQ7T7d/zM7RiFir2yp989ZtK/ewePFiO0cjIiL21qj5k+njlq4Nbrkucx+TW+qHRORup83PRURERERERETELpSYEhERERERERERu1BiSkRERERERERE7EKJKRERERERERERsQslpkRERERERERExC70VD4RKTCRERtwcrT+tWI0GnFwsJ0Hz64sKTmJrSt3Y8CQ6bgJE0mJSbi6uRbqMqPRSMypGAIeDMj0HgtTjIXlMylscea2rFSJ0oiI3K2y6rezk12/XZiuy++1Jkxcv34dDw8Pq9//Oclq3JJTe1n1N7aULFEqTzGJiNwNlJgSkQKza+duypYtm+lYWloaUVFRBAcH4+jo+J8qi4+Pp2jRovzv5Bd4e3sXyhgLy2dS2OLMb5mIyN3EVr+dnfz+/rvT193KteZ+Ki4uzqqfuh3tqU8REdFSPhERERERERERsRMlpkRERERERERExC6UmBIREREREREREbtQYkpEREREREREROxCiSkREREREREREbELJaZERERERERERMQulJgSERERERERERG7UGJKRERERERERETsQokpERERERERERGxCyWmRERERERERETELpSYEhERERERERERu1BiSkRERERERERE7EKJKRERERERERERsQslpkRERERERERExC6c7B2AiNw7OrRtg7Ozs9Vxo9GIg4PtPLitsht//02JIp4kJSbh6uaKAUOmchOmfJc5unmw9bPP8/P2RERE7ilZ9dvZya5PL0zX5fdak8nEo0EP0ap5MwwGQ84XZJAQF0+ZYt5W449s28tm3HI7rruVa43GNCqVKE5oi6Y4ODje9vb02RSe627l2rv5s/EpWYrIzVtyXYfknxJTIlJg1i15myJeXrdcz8TRI5n2xMMFEJG10PWf3JZ6RURE7jYF1W9Luts5fik8mto7gEJMn03W7s7PpueWr+wdwn+GlvKJiIiIiIiIiIhdKDElIiIiIiIiIiJ2ocSUiIiIiIiIiIjYhRJTIiIiIiIiIiJiF0pMiYjkoG3bttSqVQsnJycSExMBOHPmDAaDAScnJ0uZwWDg6tWr+Wojp/pWr15tVRYcHGyzrqSkJDp06ICXlxeBgYEcPnzYUta7d2/GjRuXrxhFRERERASuXLnCc889xwMPPICnpyetWrViwoQJGI1GyzlxcXEMHDiQ0qVL4+Ligr+/P5s2bcpXe+Hh4RgMBqv7hbCwsEznffvttzg7O2MwGBgzZozNugrjvYKeyicihcbYV2dz9tffSEtLY+zXR5lV/6ECrb/7joPg7UPr1q355JPcPZ1v2bJlfPVV1k/kaNeuHY8++ijly5fHwcEBT0/PW4oxp/r69u3LU089hYODA8WKFbNZR2RkJJs3b+a1114jIiKCkSNH8sYbb7Bz50727NnDsWPHbilGERERyaz7sOEkJ6fQfcdB1raoY+9wROQWjP36KFeTU0h0cSM0NJTixYuzePHiTOfExcVx4sQJXnjhBe677z6mTZvGq6++yv3338+QIUMwmUy0atWKffv20blzZ5o0acLZs2dJSUnJV0zt27enatWqABiNRiZPnsypU6eoU+ff3zfXr1+nW7duuLq6kpqammVd69aty3SvMGLECHbt2mXXewUlpkSk0Lgan0BaWlr635Pz90s7OylGIxgMue4QTp06xcsvv8zcuXMZMGCAzXOqV69O/fr1qVevHo6OjlnWtXr1anr16kVoaCiRkZFZnpdTfcHBwbRu3ZoiRYpkWUdCQgKurq40a9aMvXv3cu7cOZKSkhg0aBCLFy/G3d09m3ctIiIieZWSkn4TmJJhtoSI3J2uJqdwOTEZgNjYWJvnlC1blhMnTuDo6EhaWhq//PILc+fOJSoqCoCdO3eyb98+6tevz7vvvktycjJubm5ZtpnxXmHDhg1W5YGBgQQGBgJw+vRpTp8+ja+vb6YZUy+//DIAAwcOZM6cOVm2ZeteITExkf79+9vtXkFL+USk0IhLSPj370kFn5jKi7S0NLp160aTJk3o27dvlufNmDGDBg0acN999zFq1KhM03fzI6f6hgwZgre3N+XKlePdd9+1WUf79u3x8fEhKCiI7du3M3jwYJYtW0bt2rVp2rTpLcUnIiIiInIvu/k+xNZWHU5OTpYvkY1GI19//TUATZo0AbAsj/v9998pUqQIHh4ePPbYY/zwww+3HN+CBQtIS0tj4MCBliTSxx9/zKpVq4iMjMxxBcfzzz+f6V5hyJAhTJkyhTp16tjtXkGJKREpNDImYYwmkx0jgYULF/LDDz8wZswYTp06ZTn+yy+/kJycjKenJxMnTmTTpk1MmzaNEiVK8Prrr7Ny5Uqb9fXs2ZOUlBTWrVtnszyn+h588EFef/113njjDebNm0dsbCxhYWGcPHnSqi4/Pz9iYmL45ptvOH36NI8++igfffQRs2fPZujQoZQrV47atWtz6NChAvikRERERETuHZb7EIMh/edsvnhOSkqiW7duHDx4kCFDhtC5c2cAS9Lq999/Z+nSpYwfP55Dhw5Z7QllltO9gll8fDwrV67E1dWVQYMGWWLo06cPvXr1olixYly+fBlIT6hdvHjRqo6b7xVq1arFqlWrmDNnjt3uFbSUT0QKDQcHB8tSPod/OgJ7OXPmDNeuXePxxx/PdLxGjRocO3aMwMBApk6dSlpaGuXLl8fV1ZVRo0Zx9OhRm/UZjUZSU1NxdHTEwcH6O4ESJUpkW1/9+vV5/PHHiYqKIjg4mC+//JKPP/6YH374gSpVqljV5+npSUhICEajkXbt2jF48GCio6NZsGABp0+fZvLkyQwbNozdu3cXwKclIiIiInJvcDAYSDOZwGQCg8Hm2B3SEz9t2rRh9+7d9OvXj3nz5lnKAgICAKhZsybdunXj2rVrTJ8+3eaXypDzvYLZO++8Q3x8PM8//zwlSpQA4MaNG/zxxx+88847vPPOO5Zzly5dSmxsLO+//75VPRnvFZ5//nlmzZpl817BPBPsdlNiSkQKjaJFinD5n6myRV2d7RpLr169qF+/PpDeUYSGhgLpmwX6+/vzzjvvsG/fPkJCQvjll18sa8HN19xs7dq12e4xlVN9AwcOxM3NDW9vb7Zt28bnn3+Om5sbjz76aLbvY8GCBXh4ePDss8/y+++/A7BixQqOHDmCh4dHPj4ZEREREZF7V1FXZ8seUwA+Pj5W51y7do169erx448/0rx5c8qXL8/GjRspXbo0jRo1okWLFlSqVIkjR47w5ptvEhMTA/y71O9mGe8VbO0xBZCamsqCBQtwcHCga9euluOenp6Znvb33nvvsWnTJtq0acMrr7yS7Xs13yv06tWLTz/9FLDPvYISUyIiNgQFBREUFARgmcUF0LZtW9zc3KhSpQpr167lww8/5MaNG1SqVIm3336bjh075qu9nOp76KGHWLx4MadOncLZ2ZnatWszZcoUypUrl2Wd586dY/r06ezZs4cbN27QrFkzevTowbx58yhTpgyLFi3KV6wiIiIiIv9lsbGx/PjjjwB89tlnfPbZZwA0aNCARo0a4ezszIcffsiLL77I2LFj8fb2JiwsLNtNyXPy3nvvcf78edq0aYO/v7/luLOzM+3bt7f8fPz4cSD9/iIkJCTL+sz3Cvv27QOw672CElMiUmj4eBchLiH9yXw+LgU/Y8rZwYHktDScnfNe96FDhwgODrasF2/QoAF79+4lLS3Nsrwuu6fyhYWFWdaUZ0x0meVU38CBA3nhhRdy1ZaZv78/sbGxljodHR2JiIggIiLCco6tWERERCRvnJ2dSE5OwTmbJTgicncw34dcvpGEr68vxYsXtzqnfPnymP7Ziyqr8Xv16tX56quvctVmxnuFrHTp0oUuXbpY2stKeHg44eHhObZpvlcws3WvcKfoN6eIFBqzxoxi3cI3qVzEjVn1Hyrw+te2qAPxV/noo48KvG4RERH571r75htULuKWPtYQkbvarPoPsbjRo7glJ7Jx40YWL15s75DueUpMiYiIiIiIiIiIXSgxJSIiIiIiIiIidqHElIiIiIiIiIiI2IUSUyIiIiIiIiIiYhdKTImIiIiIiIiIiF042TsAEbl3PBvWJ9MjUvMrNTWVx47+hKOTMwaDATDcdIYJk8mUrzIcHGjcoqXNdpMSk/C7vzTvb9xwy+9BRESksCuofvteY8J6BJEbcXHx/N+JX/J4dXbjlttx3a21mZySjIuzS56vu7PvUZ9NwV93a20Wxs/GlJJElftLZbyKpMQkXN1cMfxznU/JUlldLgVMiSkRKTDTXpuDp6dngdT11tuL6TxsfIHUlRdLJr18x9sUERGxh4Lst8V+YxcRybslk15m+xefWX5OS0sjKiqK4OBgJeztQEv55LbZtWsXBoOBhg0b2juUO+6//N5FREREREREckuJKclW+fLlMRgMrF69OtvzGjZsiMFgIDw8PM9tfPLJJ/To0YNKlSrh5eWFu7s75cuX5/nnn2fDhg2kpKRkOj88PByDwZDjS0khERERERERkcJNS/nktvHw8KBKlSr4+/vbLP/zzz8JDQ1l586dABQpUoSKFSvi7OzMuXPn2Lx5M5s3byYgIIDdu3dTpkyZTNd7e3tTs2bNLNvPrkxERERERERE7E+JKbltateuzU8//WSzLC4ujvr16/Pzzz8TEBDA66+/TsuWLXF2dracc+jQIV5//XU2bdrEpUuXrBJTDz/8MLt27bqdb0FEREREREREbiMt5RO7GDx4MD///DPVq1fnm2++4bnnnsuUlAKoVasWGzdu5IMPPtDGnFKoDR8+HCcnJwwGA4mJiZbjYWFhABQtWvSfJ4Pk35kzZ3BycqJWrVqWtgwGA1evXgUgKSmJBQsWUKFCBdzc3KhTpw779u2zWVdSUhIdOnTAy8uLoKAgTpw4YSnr3bs348aNu6VYRURERETuZleuXOG5557jgQcewM3NDX9/f8aPH4/RaAQyby+TcYxuHv/nVVbb1Zjre++99wgICMDd3Z1ixYrRq1cvy8qjm2Uc6wcGBnL48GFL2ZQpUxg/vvA9pEGJKbltstoA/NSpU6xfvx6AFStWcN9992VbT9u2bQkICLilWPbu3YujoyOenp6cPHnSqvzHH3/E3d0dR0dH9u7dazlu/gURHh7OxYsX6dOnD/fffz9ubm5Uq1aNOXPmkJqamud4zp07x8CBA6lQoQKurq74+vry9NNP8+mnn9o8P2Mcf/75Jy+++CLly5fH2dnZ6pffZ599xrPPPkupUqVwdXWlbNmy9OrVi//9739W9Z45cwaDwUD58uUBWLZsGY899hhFihS55UTKrVi9bCnXYi+yYtIwtrw9+460ueXt2ayYNAwHYyoDBw7M9XXLly/nu+++s1l2Oz7DRo0aERkZyfr161m/fr0laRseHs6aNWt49NFHmTdvHidPnuSZZ57h8uXLVnVERkayefNmy7+refPmAbBz50727NnDxIkTCzxuERGRe9mcWdO5FnuRVVOG2zsUEcnClrdns272xEz3FwMHDiQ0NJTBgwdnOjcuLo4TJ07wwgsv8Oabb2IwGJg5cyaLFi0CoH379pbxeGRkJA8++CAAderUyVdsGetbv369ZVsac33u7u707duXpUuX0rt3b44dO0aXLl1s1nXzWH/EiBFA+lj/yJEjTJgwIV8x3k5KTMkd995772E0Gnn44YcJCQm5I20+8cQTjBgxguvXr9OtW7dMyaSUlBS6d+9OYmIiI0eO5IknnrC6/q+//qJ27dpERERQqlQpypUrx08//cTIkSPp0KGDJXOeGwcPHiQoKIglS5bw559/UrNmTdzd3dmxYwctW7Zk0qRJWV77559/UqtWLZYsWULRokWpXr16pseZDhs2jBYtWvDRRx8BUKNGDRISEli9ejWPPPII+/fvz7LugQMH8sILL3Dp0iWqVq2Kj49Prt9TQfv72jUAjMY0blxLuCNt3riWgNGYhgFsJnNsOXXqFCNGjGD4cNuD0FWrVuW6/dWrV2MwGLLsYMwqVapEy5Yt6dSpE506dbLMNPzss/TH3U6YMIGBAwfSokULrl69SmRkpFUdCQkJuLq60qxZMypUqMC1a9dITEykf//+LF68GHd391zHLSIiIpD2z9gyLR9fWIrInXHjWgJ/x1/NdH9x+fJlYmNjuXLlSqZzy5Yty4kTJ5g4cSIDBgywjPejoqIACAwMtIzHH3/8cU6fPo2vr2+WM6bMY/1OnTrZLM9YX926dTlx4kSm+lq3bs3QoUNp0aJFjg/5yjjWr1ixInFxcSQmJjJo0CDGjBlTKMf6SkzJHWdOjjRo0OCOtjt9+nQeeughDh06xJQpUyzHJ0+ezPfff09QUBBTp061ee2SJUvw8fHh1KlTHDlyhJMnT7J7926KFi3K1q1bWbx4ca5iuH79Oh07duTq1at07NiR33//nUOHDnH+/HlWr16No6Mj06ZNy3Lm1NKlS/Hz8+PMmTNER0cTHR1tydovXbqU+fPnU6FCBXbu3MmlS5f4/vvvuXz5MtOnTyc+Pp7Q0NBMS83MLly4wNq1a9m2bRvnzp3ju+++47fffsvVe/qvSktLo1u3bjRu3Ji2bdvesXaXL19OsWLF8PHxYdSoUZakaOnSpQH4/PPPOXXqFN9//z0AMTExVnW0b98eHx8fgoKC+OSTTwgNDWXq1KnUqVOHpk2b3rH3IiIiIiJSGDk5OVkmABiNRrZv3w5AkyZNrM5dsGABaWlpDBw4sECSPvPnzyc1NZXBgwdnqm/58uWUKlWKtm3bUrRoUTZs2GDz+oxj/e3btzNkyBCmTJlC7dq179jEkLxSYkpypVevXjbXvJpfu3fvznVdv/76KwAVKlS4pZh2796dbUxvvvlmpvNdXFx49913cXV1ZdasWXzzzTfs37+f2bNn4+bmRmRkJC4uLjbbSk1NZfXq1ZYlbwBPPvkk06ZNA2DOnDmYTKYcY163bh3nzp2jVKlSREREUKRIEUtZz5496d+/PwCzZs2yeb2TkxPvv/8+ZcuWtRxzc3MjOTmZ8PBwHB0d+eCDDzJl0R0dHRk/fjzPP/88Fy5cYNOmTVb1pqWlMXXqVJ599lnLsex+qSYlJREfH5/pVZD+/vua5e93csaUmXnfpuwsXLiQH374gVGjRnH+/HnL8V9++YXk5OQ8t9+zZ09SUlJ49913bZZ7enoyfvx4Zs+ezZo1ayhRogSvv/46K1euBNL/zZQqVYpx48YREBDAH3/8AWDz36Wfnx8xMTF88803nDp1iurVqxMREcGcOXMYOnQo5cqVo3bt2hw6dCjP70NERAqf291vi4jcDczj/esJcTgYUwkNDbWslMhq/J+UlESXLl344osveOmll+jcuXOm8vj4eFauXImrqyuDBg3Ksm3zWH/dunXZxhgfH8/y5ctxd3e3Wl7Ypk0bPv30U8LDw7l27RqjR48mJSXFqo6MY/3Tp09Tq1YtVq1axezZs5kzZw4VK1YsdGN9JaYkVwICAqhXr16WL29v71zXlZCQ/gvhVjc09/b2zjYmPz8/q2tq1qzJ9OnTSUtLo3v37nTv3p20tDRmzpxJjRo1smzr8ccf55FHHrE63rt3b9zc3Dhz5ozNvatu9vnnnwPQr18/3NzcrMqHDh0KpM8q+/vvv63KmzRpwv333291/JtvvuHixYs88sgjPPzwwzbbNiedskoi9ujRI8f4zWbNmkXRokUtrwceeCDX1+ZGxmSKyZT7ZZK31ua/7eRmaeaZM2e4du0a9evXzzRjqkaNGvz88895bt9oNJKamkpaWprN8hIlSjBlyhSeeuopunTpwoABAwA4evQoAEFBQWzevJmDBw8SHR1Nhw4dgPSHCNji6elJSEgIfn5+TJs2jRkzZhAdHc2CBQvYvXs31apVy3KJooiI3F1ud78tInI3MI/3TSYTBiA2NtYy7rc1/r969SrNmzdn48aNTJ48mfnz51ud88477xAfH88zzzxDiRIlsmw7p7H+zfX17NnTqr6yZcvSokULJkyYQIUKFTh06JDlXuBmGcf6ffv2ZdasWURHR7Nhwwa++uorqlWrxrBhw7KN5U5ysncAcncYN25ctk8YaNiwYa5nTZlnCdlKvOTFww8/zK5du/J83fDhw9m+fbvl2kaNGuX4P2W1atVsHvf09OSBBx4gJiaGn3/+mapVq2ZbjzlhUb16dZvlAQEBuLi4kJyczP/+9z8eeuihXMVx7NgxID1ZUr9+fZvnmL8FMM9Yy8jX1xdfX99sY89o7NixmZIW8fHxBTrINRgMluSUwXBn8ucGgwMmU3pH4eCQc5u9evWifv36GI1GTp8+zZgxY4D0WXH+/v4AfPDBB5muWb58OWXKlKFFixZW9a1du5ZevXrRsWNHRo0aZVX+zjvv8PXXX1O2bFm+/vpry4xA83/vffv2ERkZSUhICFFRUaxcuZIqVarQsWPHbN/HwoULcXNzIywszJI4XbFiBUeOHCmU689FRCTvbne/LSJyNzCP9w0GA0aTiRK+vly+fBmj0Wg1/r927Rr16tXjxx9/pEWLFlStWpUNGzZQsmRJGjVqBKSvqlmwYAEODg507do127bNY/3Q0NAsl+BlrO/mL4i7dOlC9erVeeCBB/j+++/53//+h6enp2XT9awsWLAADw8PevXqxccffwzAypUrOXLkCB4eHtleeycpMSV3nJ+fH1FRUZw+fdou7Ts4ONCgQQNLYiosLCzHp6eVLFkyy7JSpUoRExNjmQmWnWv/bOqdVX0Gg4ESJUrw66+/2qwvq1lmcXFxQPrm6H/++We2Mdy4cSPX9WbF1dUVV1fXPF2TF56eXiQkpC8zcPcqksPZBcPdqwh/x18FyNXG70FBQQQFBZGWlmbZBBHSnyJpng0XHh6e6Zp+/frRoEEDm4mpnFSpUoU1a9awdetWUlJSqFixIm+//XamxNP27dtZtWoVXl5ehIaGMnfuXNzd3bP8ZubcuXPMnDmTpUuXAtCsWTN69OjBvHnzKFOmDAsWLMhznCIiUvjc7n5bRORuYB7vexQpSvy1a2zcuJHQ0FBiY2Otxv+xsbH8+OOPAOzYsYMdO3YA6fskmxNT7733HufPn6dNmzaWL6Zvhbk+W0+lL1asGG+//TaxsbF4e3tTu3ZtZs+eTdGiRbOs79y5c0yfPp19+/YB6WP9Vq1aMX/+fMqUKWPZq7gwUGJK7ri6deuyffv2PO1LVZCioqKYNWsWDg4OGI1GRo0axdNPP53tjKHskj3mvXwy7heVFS8vr0zX3MxkMlnayk19N9fbtWvXLPcoktsrNTU10xMSIX0mW9GiRYmLi8u03NVWoigsLIywsDCrRJdZgwYN2L17N1FRUQQHB1u1Va9ePbZt22azLCv+/v5cunTJ0p6joyMRERFERERY4rQVi4iIiIjIvax8+fI57iHcpUsXunTpkqsxs3msn5v6bFm0aJElkWRuLzg4ONv6/P39iY2Ntfzs6OjIlClT8nS/cKdojym54zp06ICDgwNHjhzhwIEDd7TtxMREunXrRnJyMlOnTqV9+/ZcvHjRsl9PVk6cOGHz+PXr1zl37hwAlStXzrF98znm7PvNYmJiSE5OxtHRkUqVKuVYn5l5aeDx48dzfU1h5vlPos3BwfGOzphycHDEBBQvXvyOtCkiIiL3Bkcnp0x/ikjh4+5VBE9vn0z3F8WLF8fX15dixYrZMTJRYkruuICAAEJDQwHo06eP5UkIWdm6davNR97nx7hx4/jhhx8ICQlhzJgxLFmyhNKlS/PBBx+wZs2aLK/bv3+/zSz4ypUrSUxMpFy5clSpUiXH9ps3bw7AsmXLSExMtCo3L52qV69enpbXPfHEE/j6+hIdHZ2vfbcKm7B+/fHyLU2fqW/SdpD1fku3Q9tBo+gz9U2MDk4sXrz4jrQpIiIi94ZXxk7Ay7c0vSa/Ye9QRCQLbQeNosuoaZnuLxYvXszGjRsL1bK2/yIlpsQuFi1aRKVKlfjxxx8JCQnhww8/tHrUZVRUFF26dKFdu3a3vFE6wM6dO3nzzTfx8PBgzZo1ODo6ct9997Fy5UoAhgwZYpn9dDMnJyfCwsI4e/as5djXX3/NpEmTAHjllVdy3KcKoHPnzpblU2FhYZY9pwDeffddy14/5o20c8vNzY2pU6cC6TPStmzZYjX19Pjx44wePdqyxlhERERERETE3jTXVOyiWLFi7Nu3j44dO7Jnzx6ee+45ihQpQsWKFXFycuL8+fOWfZiqVq1KqVKlrOo4cuRIlk+gg/Q9mj799FMgfXPwsLAwTCYTc+fOzbSZ3NNPP82AAQNYsmQJPXv25KuvvrJKMvXv358PP/yQBx98kMDAQG7cuMHJkycBaN26NYMGDcrV+/bw8OC9996zPHb0448/plq1aly6dInz588DMGHCBJ5++ulc1ZfRwIEDOXfuHK+++irt2rWjePHiVKpUibS0NM6cOWOZmfbUU0/luW4RERERERGR20GJKbGbUqVKsXv3bj7++GM2bNjA/v37iYmJIS0tjdKlS/P888/TsWNH2rVrh5ON9frx8fHZzv7J+ISCF198kXPnztGiRQub+0nNnTuXL7/8kl27dvHGG28wYsSITOW+vr58++23jB8/nk8//ZS//vqLKlWq0Lt3b4YPH271eNHs1KlTh+joaGbNmsWOHTs4evQonp6eNGvWjKFDh9KyZctc13WzWbNm0bp1axYtWsTevXuJjo7Gy8uLsmXL0qZNG55//nkaN26c7/pFRERERERECpISU5KtM2fO5Oo8W/saNWzYMMcnGQA888wzPPPMM7mOKTw8nPDw8FyfD7B27VrWrl2bZbmHhwc///xztnWULl2aFStW5Kq9nN57uXLlWLJkSa7qgry957p161K3bt1cnZubp02IiIiIiIiI3C5KTIlIgXl58IA8zR7LTlpaGt+2b4SLm7PNcpPJlOW+XrdS5uTkSP0Gj2c+jomkxCRc3VwxYLBZ9kBZf7Z8sC2ntyUiIlJoFGS/fS8xYbLq73Pj+o3rRB3ak/f2shmb3I7rbuXa5ORkXFxc7lh7+mwKz3W3cu2d/GxMRgN+ZSvi6uaa7Xkl9BTuQkWJKREpMD36dMHNza3A6vvk0+0826NBgdV3O21dudveIYiIiORJQffb/3V307hF5F61deVuFrwxl+DgYBwdHe0djuSSviIRERERERERERG7UGJKRERERERERETsQkv5RLKRn43WRURERERERCR3NGNKRERERERERETsQokpEZE7rGnTpjRu3Bh3d3fKli3LkCFDSEpKAuDnn3+mS5cuFCtWDHd3d6pWrcqiRYtuqb24uDhmzZqFn58fLi4u+Pv7s2nTJgAaNWpErVq1cHJywmAwWF6rV6+2qicpKYkOHTrg5eVFUFAQJ06csJT17t2bcePG3VKcIiIiIiK3y5UrV3juued44IEHcHNzw9/fn/Hjx2M0GgFYunSp1ZjYYDAQFhaWr/bCw8Ot6spY3+bNmwEoVaoU3t7ePP744+zcudNmXff6OFxL+USk0Dm47xDJSck448HO96NxdXembqvq9g7Lpv3bfyThyg1cHT0YOHAgixcvzvGamjVrUrduXfz9/Zk3bx5vvfUWVatWZfDgwRgMBurVq0f9+vW5evUqkydP5sUXX6Rhw4ZUrVo1z/GZTCZat27N/v376dSpE02bNuXs2bOkpKQAMGHCBL777jvKly+P0WikX79+JCUlUbt2bau6IiMj2bx5M6+99hoRERHMmzePzp07s3PnTvbs2cOxY8fyHJ+IiMi94KvP9uCMB59Hfk+zro/YOxyR/4z9238k6UZKpvuF+fPnk5SURPHixTONzePi4jhx4gQvvPACJUqUYNasWcycOZPSpUszaNAgGjduTMOGDXFwSJ+/M3PmTI4dO0adOnXyFVv79u0zjd9vrs/d3R2AN998k5MnTzJv3jxCQ0P5448/rOq618fhSkyJSKGTnJRMUlIyAEnXU+wcTfaSbqRgMpowGAxcvnw5V9e88cYb7N69mwceeIDNmzfz008/YTAYAAgICGDAgAGUK1eO33//nTfeeINr165lWdfq1avp1asXHTt2ZNSoUVblO3fuZP/+/QQHB7NmzRrS0tIyPRq8UaNGFC9enODgYDZu3EhiYiKtWrWievXqpKWlZaorISEBV1dXmjVrxp49ezh58iSJiYn079+fxYsXWzpXERGR/xqj0YgBg2XmhYjcGUk3UqzuF65du0ZcXJzVuWXLluXEiRM4OjqmX5uUxLBhw4iKigLgwQcfJDg4GEdHR86dO8eJEyfw9fXNcsZUTuPwwMBAAgMDAWzW9/TTTwPQpEkT7r//fubNm5fl+7zXx+FayiciYgft2rWjcuXKfPbZZ3Tt2pW+fftayk6fPk3p0qV5+OGHuXjxIm+++SY1atTIVzuHDx8GIDY2Fh8fHzw8PHjsscf44YcfrM594403AHjllVds1tW+fXt8fHwICgrik08+ITQ0lKlTp1KnTh2aNm2ar/hERERERO4EJycnS1LKaDSyfft2ID0xdLP58+eTmprK4MGDCyTpk119Dz74IM8++yz33XefZbuNm93r43AlpkSk0ElOzvytR3Jiqp0iyVnG2K5evZrr615//XXWr1/PY489xoYNG/joo48sZX5+fnz66ae88847+Pr6Mn36dP73v//ZrKdnz56kpKTw7rvv2iw3d76xsbEsXryY8ePHc+jQIatvfnbt2sXhw4epVasWDRs2tFmXn58fMTExfPPNN5w6dYrq1asTERHBnDlzGDp0KOXKlaN27docOnQo15+DiIiIiEh+mcfiSTdS0rcAcXQnPj4eyHpsnpSURJcuXfjiiy946aWX6Ny5c6by+Ph4li9fjru7O4MHD86y7ZzG4bmt74MPPmDq1KlcvXqVkSNHWrbcyOheH4crMSUihY7JZALAgCHTz4VRxtjyMn3/kUceoUOHDowZM4a0tLRMm427u7vTtGlT+vXrR8eOHYmNjWXr1q026zEajaSmplotuzMLCAgA0r+J6dq1K6NHjwbg5MmTmc7LabaUmaenJyEhIfj5+TFt2jRmzJhBdHQ0CxYsYPfu3VSrVo3hw4fn5iMQEREREbkllrG4KX0LEIPBwXLM1tj86tWrNG/enI0bNzJ58mTmz59vdc4777xDfHw8PXv2pESJElm2ndM4PLf1NWnShIkTJ1K9enW+++47jh49arOe3IzDhw0blm0shZUSUyJS6Jj3WzJhyvRzYZQxNvNGidnZsWMHYWFhfPDBByxdupSJEycCEBQUBMCsWbN48803Wb16NbNnz2bt2rWZym+2du1a3N3d6dmzp83yFi1aUKlSJU6ePMn8+fMtiamMU5bPnDnDp59+Svny5Wnfvn0u3jUsXLgQNzc3wsLCLJ3xihUrOHLkCKmphXeGm4iIiIjcOyxjcQO4ejhjMhktx24em1+7do169eqxe/duWrRoQdWqVdmwYQNfffWV5ZzU1FQWLFiAg4NDjl+25jQOz6m+Pn36ALBu3Tpefvlljh8/jqenJw8++GC27d6L43Btfi4ihY6Li7Nl83MAF7fC+6vKxc3JsuGij49Pjuf7+vpy/PhxNm/ejNFoxM/PjzFjxjB58mQg/XGxS5cuZdOmTbi4uBAQEMCQIUNo0qRJjt/G2OLs7MyWLVvo3bs348ePx9vbm7CwMObMmWM5JzIyEpPJxMsvv2xZ+pedc+fOMXPmTJYuXQpAs2bN6NGjB/PmzaNMmTIsWLAgz3GKiIiIiOSVeSzu6u7MU+2D2LpyN6V87icuLs5qbB4bG8uPP/4IpH9ZvGPHDgAaNGjAl19+CcCmTZs4f/48bdu2taw8uBXvvfdelvWZ43vppZfw9vamSZMmTJ48maJFi2ZZX07j8EWLFt1yzPZQeO/2RETuQbVq1eLQoUNERUVZnvqRUe/evXnkkUdsltkSFhZm+bbE/ESRm1WvXp0lS5ZkWef48ePZtGlTrtoD8Pf359KlS5b2HB0diYiIICIiAiDbWERERERE7KF8+fJZbhFi/gK4c+fOdOvWLVf15WYc3qVLF7p06WKzbO7cuSxfvpzY2Fi8vb1z1WZO4/C7lRJTIlLouLi6AJCYlISrhzOu7s52jihrru7OJCemYkwzUrx4cXuHIyIiInbg4OBAmjENR4fcfckjIgXDfJ+Q8X7By8sLZ2dnjc3vIkpMiUihU6deLQA++XQ7T7d/zM7RZK9uq+oAbF25m8WLF9s5GhEREbGHRs2fTB+3dG1g71BE/lPMY/GMhg4dmuvVB1I4aPNzERERERERERGxCyWmRERERERERETELpSYEhERERERERERu1BiSkRERERERERE7EKJKRERERERERERsQs9lU9ECkxkxAacHK1/rRiNRhwcbOfBsytLSk5i68rdGDBkOm7CRFJiEq5uroWm7IGy/jbfg4iISGGVVb+dnez67cJ0XX6vNWHi+vXreHh4WPX5Oclq3JJTe1mNMW7HdbdyrdFoJOZUDAEPBuTpc73T71GfTcFfdyvX3unPpqRvqVyfK4WHElMiUmB27dxN2bJlMx1LS0sjKirK5iNb77UyERGRu4mtfjs72fWHhem6W7k2Pj6eokWLEhcXh7e3921v7278bP538gt9NjfRZ5M1e302cnfRUj4REREREREREbELJaZERERERERERMQulJgSERERERERERG7UGJKRERERERERETsQokpERERERERERGxCyWmRERERERERETELpSYEhERERERERERu1BiSkRERERERERE7EKJKRERERERERERsQslpkRERERERERExC6UmBIREREREREREbtQYkpEREREREREROxCiSkREREREREREbELJ3sHICL3jg5t2+Ds7Gx13Gg04uBgOw9+K2WJN65TqkiRTMdNmEhKTMLVzRUDBgB8SpYicvOWvLwVERGRe15W/XZ2suub7XHdjb//pmQRL6vjtsYDuWsvjUolihPaoikODo65vi6v7WlsIiLyLyWmRKTArFvyNkW8rAeHt8vE0SOZ9sTDOZ7Xc8tXdyAaERGRu8ud7rdvh9yOBfKmaQHXZ01jExGRf2kpn4iIiIiIiIiI2IUSUyIiIiIiIiIiYhdKTImIiIiIiIiIiF0oMSUiIiIiIiIiInahxJSISAa7du3CYDBkejk5OdG6detM58XFxeHv74+TkxNhYWH5bu/AgQM0bNiQEiVK4O7uTlBQEDt27Mh0zokTJ2jdujXFihWjbt26PPTQQ/z8889WdSUnJxMaGoqXlxeBgYEcPnzYUjZlyhTGjx+f7zhFRETkzipfvrzVmGTr1q1A+vjhhRdeoHTp0ri7uxMYGMi6detuuU3z+MZgMBASEmI5fvHiRbp37w5AyZIlqVixIlOmTMFkMlnVkZSURIcOHWyOR3r37s24ceNuOU4RubcoMSUid6Xu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RERERERERDrBwBQREREREREREekEA1NERERERERERKQTDEwREREREREREZFOMDBFREREREREREQ6wbfyEVGhCd26C/p66pcVhUIBuVxzHLww0tIV6Ti0KRwAICCQkpwCI2MjyCBTyVPUaQqFAtH3olG9WnWV4yhOZSwudVLcysl6KR5pOdWLtVU5EFH+aWu3s5Nd26yLfFn7AFlld23JaX/arjvZye/+8puvgm3FXK9LRFTcMTBFRIXmdNgZVK5cWWVZRkYGoqKi0KBBA+jp6ZWptISEBFhZWeHP34/D0tKyWJaxuNRJcSsn66V4pOWmXogo/zS129nJ7vtanPIVJG921533sb+C5iMiKg34KB8REREREREREekEA1NERERERERERKQTDEwREREREREREZFOMDBFREREREREREQ6wcAUERERERERERHpBN/KR0QFJoQAACQmJiIhIUElLSMjA0lJSUhISND4Nq7SnKasC9ZJznVS3MrJeikeaawX1ou2Y1e2O5Q/2bXb2cnu/6Y45StI3uy+X+9jf6yb4pOvIHlZN9qxbrQrC3WT23ZbJtiyE1EB3b9/H1WrVtV1MYiIqIx49OgRKleurOtilFhst4mIqCjl1G5zxBQRFZiNjQ0AIDY2FlZWVmrpjRs3xuXLlzXmLc1pCQkJqFKlCh49egRLS8tiWcaiTsuuTopTOYs6jfXCeslLWlmuFyEEGjVqhEqVKmnMR7mTU7udnez+34pTvvzmzen7Vdj700W+/OZl3WjHutGOdaNdWaib3LbbDEwRUYHJ5ZnT1VlZWWm8qOrp6Wm92Jb2NACwtLRUSy9OZSwudVLcysl6KR5pAOtFm7JaL4aGhlK7Q/mTU7udnZzOy+KSr6B5tX2/3sf+WDfFJ19B87JutGPdaFfa6yY37TZbdSJ670aNGlVm04pLOYpTWnaKUzlZL8UjLTvFqZysl+KRRu/f+zgv30e+guYtyv2xbopPvoLmLcr9sW6KT76C5i3K/RXXuuEcU0RUYAkJCbCyskJ8fHy+I+mlEetFHetEM9aLZqwXzVgvVFA8h7Rj3WjHutGOdaMd60Y71s1/OGKKiArMyMgIM2bMgJGRka6LUqywXtSxTjRjvWjGetGM9UIFxXNIO9aNdqwb7Vg32rFutGPd/IcjpoiIiIiIiIiISCc4YoqIiIiIiIiIiHSCgSki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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True)\n", "\n", "cmap = ['#FD7F69', '#9FC9DD', '#89A76F']\n", "style_dict = dict(\n", " orient='h',\n", " palette=cmap,\n", " edgecolor=\"k\",\n", " linewidth=2.0,\n", " errwidth=2.0,\n", " capsize=0.07)\n", "\n", "cmap1 = ['#ECECEC', '#BFBFBF', '#868686']\n", "style_dict1 = dict(\n", " orient='h',\n", " palette=cmap1,\n", " edgecolor=\"k\",\n", " linewidth=2.0,\n", " errwidth=2.0,\n", " capsize=0.07, \n", " alpha=0.8)\n", "\n", "\n", "ax = axes[0]\n", "b = sns.barplot(x=\"s\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict\n", ")\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "\n", "b1 = sns.barplot(x=\"s_mapper\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict1\n", ")\n", "plt.setp(b1.patches, linewidth=0.5)\n", "\n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Time (sec)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "#ax.set_xscale('log')\n", "ax.set_xlim([0, 5e3])\n", "ax.set_xticks(np.arange(0, 6000, 100), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "ax.get_legend().remove()\n", "\n", "\n", "# Add text, runtime percentage out of mapper timing\n", "ncores_order = [4, 2, 1]\n", "for icore, ncores in enumerate(ncores_order):\n", " for ilabels, util in enumerate(labels):\n", " if util==\"chromap\":\n", " continue\n", " \n", " df_target = df.query(f'ncores=={ncores} and util==\"{util}\"')\n", " mean_target = np.mean(df_target['min'].values)\n", " mean_mapper = np.mean(df_target['min_mapper'].values)\n", " \n", " prc = 100 * (mean_mapper) / mean_target\n", " \n", " w = b.patches[0].get_height()\n", " \n", " if prc>100:\n", " signature = f\"~0 : ~100 %\"\n", " else:\n", " signature = f\"{prc:.0f} : {100-prc:.0f} %\"\n", " \n", " b.text( s=signature, \n", " x=mean_target+150, y=ilabels + (icore-1)*w,\n", " ha = 'left', va = 'center', fontsize=8, weight='bold')\n", "\n", " \n", "\n", "ax = axes[1]\n", "b = sns.barplot(x=\"max_rss\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict)\n", "plt.setp(b.patches, linewidth=0.5)\n", "\n", "\n", "b1 = sns.barplot(x=\"max_rss_mapper\", \n", " y=\"util\", \n", " data=df.sort_values('util'),\n", " order=labels,\n", " hue='ncores',\n", " hue_order=[4,2,1],\n", " ax=ax,\n", " **style_dict1\n", ")\n", "plt.setp(b1.patches, linewidth=0.5)\n", "ax.get_legend().remove()\n", "\n", "\n", "\n", "# Add text, runtime percentage out of mapper timing\n", "ncores_order = [4, 2, 1]\n", "for icore, ncores in enumerate(ncores_order):\n", " for ilabels, util in enumerate(labels):\n", " if util==\"chromap\":\n", " continue\n", " \n", " df_target = df.query(f'ncores=={ncores} and util==\"{util}\"')\n", " mean_target = np.mean(df_target['max_rss'].values)\n", " mean_mapper = np.mean(df_target['max_rss_mapper'].values)\n", " \n", " prc = 100 * (mean_mapper) / mean_target\n", " \n", " w = b.patches[0].get_height()\n", " \n", " if prc>=100:\n", " signature = f\"\"\n", " else:\n", " signature = f\"{prc:.0f} : {100-prc:.0f} %\"\n", " \n", " b.text( s=signature, \n", " x=mean_target+550, y=ilabels + (icore-1)*w,\n", " ha = 'left', va = 'center', fontsize=8, weight='bold')\n", "\n", " \n", "\n", "ax.set_ylabel('')\n", "ax.set_xlabel('Maximum Resident Set Size (MB)')\n", "ax.set_yticklabels(labels_mod)\n", "ax.set_axisbelow(True)\n", "ax.grid(which='both', axis='x', color='k')\n", "ax.set_xticks(np.arange(0, 30000, 1000), minor=True)\n", "ax.grid(which='minor', axis='x', alpha=0.2, color='k')\n", "\n", "# fig.suptitle('Benchmark of different Hi-C mapping tools for 1 mln reads (5 iterations)', y=0.99)\n", "\n", "# (x, y, width, height)\n", "bb = (fig.subplotpars.left, fig.subplotpars.top+0.002, fig.subplotpars.right-fig.subplotpars.left, 0.2)\n", "# ax.legend(bbox_to_anchor=bb, title=\"Number of cores\", loc=\"lower right\", ncol=3, borderaxespad=0., bbox_transform=fig.transFigure, frameon=False)\n", "\n", "plt.savefig(\"benchmarking_1mln.mappers.pdf\")" ] }, { "cell_type": "code", "execution_count": null, "id": "a08db361-28ab-4a3d-a69a-4d6869e28a39", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "test", "language": "python", "name": "test" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.13" } }, "nbformat": 4, "nbformat_minor": 5 } pairtools-1.0.3/doc/examples/benchmark/benchmarking_1mln.csv000066400000000000000000000431411452673171500241560ustar00rootroot00000000000000,s,h:m:s,max_rss,max_vms,max_uss,max_pss,io_in,io_out,mean_load,cpu_time,util,ncores 0,444.776,0:07:24,3496.51,4314.64,3468.51,3472.45,0.0,780.64,398.88,1775.19,bowtie,1 1,446.6064,0:07:26,3495.83,4314.77,3466.35,3470.77,0.0,1568.73,396.66,1776.07,bowtie,1 2,439.4402,0:07:19,3495.91,4314.39,3468.05,3471.94,0.0,2373.96,403.7,1781.37,bowtie,1 3,449.5572,0:07:29,3497.03,4314.64,3469.36,3473.22,0.0,3148.84,394.6,1784.75,bowtie,1 4,449.9673,0:07:29,3490.93,4314.89,3470.16,3471.92,40.96,3942.04,393.64,1785.49,bowtie,1 0,280.5757,0:04:40,6019.11,6453.95,5994.93,5998.23,7.86,746.23,366.91,1031.28,bwamem,1 1,286.6525,0:04:46,6004.57,6453.95,5986.34,5988.55,1485.98,1679.14,356.05,1027.24,bwamem,1 2,300.468,0:05:00,6009.04,6517.95,6000.2,6000.56,6660.16,2736.5,375.23,1138.7,bwamem,1 3,336.5047,0:05:36,6027.58,6645.95,6018.34,6018.94,8138.28,3669.41,375.65,1280.85,bwamem,1 4,323.7325,0:05:23,6012.26,6453.95,6002.96,6003.52,8932.21,4602.32,391.87,1291.62,bwamem,1 0,169.2031,0:02:49,17583.51,21017.69,17574.31,17574.8,13309.02,870.68,260.2,441.72,bwamem2,1 1,190.2805,0:03:10,17611.99,20913.7,17601.16,17601.72,29713.3,1554.78,185.67,357.92,bwamem2,1 2,198.262,0:03:18,17553.89,20425.7,17545.7,17546.26,46154.95,2487.69,161.87,328.04,bwamem2,1 3,117.1978,0:01:57,17591.75,20553.7,17583.7,17584.1,46179.89,3669.41,358.44,430.41,bwamem2,1 4,142.6662,0:02:22,17615.75,20688.82,17606.59,17607.45,62596.36,4602.32,301.67,447.83,bwamem2,1 0,155.4555,0:02:35,19062.05,20632.42,19039.34,19042.16,14756.57,0.02,78.1,122.2,chromap,1 1,129.4362,0:02:09,19034.41,20605.15,19011.44,19014.27,14756.57,88.36,86.69,116.07,chromap,1 2,130.3877,0:02:10,19034.32,20605.15,19011.52,19014.34,14756.57,176.69,86.2,121.96,chromap,1 3,133.456,0:02:13,19030.1,20598.45,19007.18,19010.0,14756.57,265.02,84.37,128.14,chromap,1 4,129.5292,0:02:09,19045.01,20615.43,19022.31,19025.15,14756.57,353.35,87.22,134.56,chromap,1 0,4261.7448,1:11:01,7186.76,8679.24,4290.61,5702.39,1719.48,10257.31,36.77,348.34,fanc_bowtie2,1 1,4077.2502,1:07:57,7188.25,8680.68,4290.98,5703.88,1719.5,20183.4,34.11,330.67,fanc_bowtie2,1 2,4131.9376,1:08:51,7189.56,8681.8,4292.67,5709.75,1719.51,30697.16,35.35,351.1,fanc_bowtie2,1 3,4050.4727,1:07:30,9027.23,10823.83,5831.42,7385.27,1719.51,42084.66,35.13,382.96,fanc_bowtie2,1 4,4020.6237,1:07:00,9032.61,10828.28,5837.03,7391.75,2343.53,52412.16,34.58,394.25,fanc_bowtie2,1 0,2731.6263,0:45:31,7185.57,8945.22,5718.36,5838.26,0.38,7029.16,35.71,346.69,fanc_bwa,1 1,2715.4035,0:45:15,9044.39,10839.64,5846.46,7385.01,0.42,14315.23,32.27,353.83,fanc_bwa,1 2,2769.2431,0:46:09,7188.17,9009.55,5735.71,5855.89,0.44,21877.82,37.54,374.56,fanc_bwa,1 3,2706.3695,0:45:06,9043.16,10838.74,5844.58,7393.22,0.44,29434.04,35.55,376.27,fanc_bwa,1 4,2682.8176,0:44:42,6172.31,8945.66,5679.21,5812.1,0.44,37010.45,30.23,380.22,fanc_bwa,1 0,961.0734,0:16:01,21569.48,23347.51,21492.25,21513.06,2618.56,0.02,138.26,532.15,hicexplorer,1 1,908.2106,0:15:08,22286.37,23347.51,22206.49,22228.31,2618.56,0.54,140.61,522.7,hicexplorer,1 2,896.8171,0:14:56,21604.46,23347.51,21524.48,21546.3,2618.56,1.05,138.93,499.36,hicexplorer,1 3,910.574,0:15:10,22440.63,23347.51,22361.79,22382.79,2618.56,1.56,140.63,542.86,hicexplorer,1 4,895.9424,0:14:55,21516.94,23347.51,21469.93,21475.81,2618.56,2.07,138.9,529.28,hicexplorer,1 0,1111.7203,0:18:31,6730.91,7406.83,6675.2,6682.8,237.25,1090.37,186.34,87.74,hicpro,1 1,1130.0595,0:18:50,6730.21,7406.82,6675.14,6682.36,903.14,2215.98,186.08,80.43,hicpro,1 2,1123.3536,0:18:43,6712.22,7406.82,6674.77,6677.97,5265.45,3341.59,182.57,89.92,hicpro,1 3,1181.2436,0:19:41,6715.32,7406.82,6675.26,6680.12,6316.99,4467.2,177.76,100.38,hicpro,1 4,1116.4777,0:18:36,6715.52,7406.82,6674.92,6679.32,6490.31,5592.8,188.64,114.97,hicpro,1 0,951.7772,0:15:51,5457.95,5857.16,5432.96,5439.95,0.0,2882.08,95.15,7.25,juicer,1 1,946.1429,0:15:46,5458.0,16410.45,5433.02,5439.99,0.0,4613.73,92.49,14.04,juicer,1 2,950.1664,0:15:50,5458.07,5857.16,5433.16,5440.17,0.2,7180.02,95.32,26.17,juicer,1 3,1004.5055,0:16:44,5458.27,16410.45,5433.17,5439.37,0.2,10377.86,93.19,30.43,juicer,1 4,1088.6224,0:18:08,5458.32,5857.16,5433.14,5439.08,0.2,13611.21,94.37,43.31,juicer,1 0,1031.7979,0:17:11,5868.29,8533.19,5732.12,5752.16,0.57,0.02,101.37,1048.77,pairtools,1 1,1057.2271,0:17:37,5866.38,8533.06,5731.94,5746.23,5193.45,39.25,101.33,1078.93,pairtools,1 2,1020.0639,0:17:00,5753.98,8533.06,5731.69,5732.67,10586.02,78.47,102.21,1056.3,pairtools,1 3,1044.6887,0:17:24,5852.79,8533.19,5734.25,5766.39,15784.64,117.71,99.64,29.63,pairtools,1 4,1046.266,0:17:26,5824.86,8533.06,5734.24,5757.25,21050.2,156.94,99.64,38.13,pairtools,1 0,482.1029,0:08:02,17068.97,20572.73,16931.91,16951.71,16275.21,0.02,102.18,493.82,pairtools_bwamem2,1 1,482.5261,0:08:02,17079.46,20508.73,16941.46,16956.34,32534.11,39.25,101.73,498.88,pairtools_bwamem2,1 2,488.9997,0:08:08,17055.04,20508.59,16920.96,16939.69,42104.61,78.47,100.17,502.58,pairtools_bwamem2,1 3,484.346,0:08:04,16981.59,20380.6,16961.3,16962.37,45493.36,117.7,93.06,50.54,pairtools_bwamem2,1 4,483.3159,0:08:03,16969.02,20595.51,16944.75,16945.79,61922.79,156.93,99.61,507.64,pairtools_bwamem2,1 0,611.4665,0:10:11,13519.86,15003.46,13507.46,13508.44,22937.93,2801.37,50.95,5.28,tadbit,1 1,442.9993,0:07:22,13559.35,15003.46,13509.66,13529.09,40809.44,6184.54,55.05,25.04,tadbit,1 2,385.3129,0:06:25,13561.27,15003.46,13508.5,13522.26,40809.46,9295.42,59.39,22.13,tadbit,1 3,390.4362,0:06:30,13561.43,15003.46,13509.03,13522.27,40809.5,12333.14,58.93,23.74,tadbit,1 4,447.8446,0:07:27,13560.76,15003.46,13509.25,13528.03,51014.88,15465.8,51.07,24.5,tadbit,1 0,862.2741,0:14:22,3639.61,4465.74,3612.88,3616.18,9401.06,3187.84,73.44,23.31,tadbit_bowtie2,1 1,815.1788,0:13:35,3640.85,4464.65,3582.08,3602.21,9401.11,6292.2,82.09,20.52,tadbit_bowtie2,1 2,817.2921,0:13:37,3736.97,4560.27,3712.91,3716.56,13567.1,9504.59,81.15,19.79,tadbit_bowtie2,1 3,819.7936,0:13:39,3640.98,4464.65,3617.2,3619.83,13567.22,12458.8,80.4,19.48,tadbit_bowtie2,1 4,760.4646,0:12:40,3641.41,4464.98,3621.55,3622.75,13567.24,15676.85,81.76,20.99,tadbit_bowtie2,1 0,444.1354,0:07:24,3496.54,4314.39,3479.12,3481.87,27.41,783.47,400.27,1779.49,bowtie,2 1,446.9715,0:07:26,3496.32,4314.39,3478.36,3481.27,27.41,1570.48,397.44,1782.37,bowtie,2 2,484.7029,0:08:04,3511.4,4338.64,3490.33,3495.52,27.41,2346.41,368.72,1797.04,bowtie,2 3,450.6565,0:07:30,3488.59,4313.88,3466.99,3471.75,27.41,3148.2,393.42,1786.37,bowtie,2 4,453.0468,0:07:33,3488.74,4314.02,3466.96,3470.63,27.41,3936.13,392.09,1793.93,bowtie,2 0,330.2381,0:05:30,6045.63,6645.95,6021.65,6027.11,5173.52,870.68,375.32,1240.4,bwamem,2 1,329.5853,0:05:29,6028.34,6645.95,6019.0,6019.59,6654.07,1803.59,382.07,1265.1,bwamem,2 2,297.1758,0:04:57,6003.03,6453.95,5994.1,5994.56,9493.45,2736.5,363.55,1091.44,bwamem,2 3,263.866,0:04:23,5991.57,6453.95,5982.83,5983.36,10181.14,3669.41,388.27,1039.2,bwamem,2 4,258.637,0:04:18,5992.16,6453.95,5983.26,5983.78,10181.15,4477.87,351.12,927.49,bwamem,2 0,141.9624,0:02:21,17604.44,20094.61,17587.78,17591.4,16300.85,870.68,311.82,444.2,bwamem2,2 1,133.0894,0:02:13,17620.68,20849.7,17603.97,17607.69,26647.44,1554.78,267.76,361.73,bwamem2,2 2,119.1224,0:01:59,17591.03,21040.61,17573.69,17577.37,26647.45,2736.5,354.15,430.73,bwamem2,2 3,119.2461,0:01:59,17618.88,20912.61,17601.95,17605.61,26647.45,3669.41,353.61,437.38,bwamem2,2 4,119.4407,0:01:59,17610.04,20579.05,17592.86,17596.52,26647.46,4602.32,352.7,443.75,bwamem2,2 0,99.0323,0:01:39,19065.62,20682.54,19043.42,19050.13,14756.72,0.02,106.11,105.91,chromap,2 1,93.6757,0:01:33,19075.63,20687.33,19053.32,19060.02,25886.48,88.36,121.88,118.06,chromap,2 2,120.2376,0:02:00,19145.25,20776.39,19130.55,19133.61,37626.33,176.69,104.51,132.92,chromap,2 3,83.0685,0:01:23,18948.87,20569.96,18934.38,18937.44,41077.34,270.34,159.69,144.2,chromap,2 4,98.8891,0:01:38,19049.5,20677.47,19034.7,19037.84,41077.34,353.35,126.08,140.51,chromap,2 0,2463.1096,0:41:03,7184.84,8822.2,4290.22,5704.96,1790.3,9624.3,17.33,337.56,fanc_bowtie2,2 1,2388.2986,0:39:48,7183.59,8820.36,4839.33,5975.55,1790.35,20084.17,17.7,322.7,fanc_bowtie2,2 2,2313.5663,0:38:33,6195.27,8222.25,3496.78,4531.77,1790.41,30597.45,18.65,343.23,fanc_bowtie2,2 3,2351.3693,0:39:11,9008.62,11035.56,5810.7,7349.54,1790.42,41169.94,17.91,356.34,fanc_bowtie2,2 4,2369.8083,0:39:29,7186.87,8822.57,4288.14,5702.9,1790.45,51675.89,19.01,377.66,fanc_bowtie2,2 0,1774.8625,0:29:34,9036.59,11062.79,5886.57,7381.14,180.82,6716.99,24.32,331.93,fanc_bwa,2 1,1740.5138,0:29:00,7185.89,9381.23,5771.89,5896.22,180.85,14316.39,27.45,352.99,fanc_bwa,2 2,1693.8652,0:28:13,7188.38,9315.89,5720.5,5842.73,180.88,21905.75,22.64,337.38,fanc_bwa,2 3,1673.5139,0:27:53,7184.62,9376.55,5740.96,5861.3,180.95,29485.2,22.17,333.76,fanc_bwa,2 4,1671.1137,0:27:51,7186.76,9379.55,5780.07,5902.28,180.97,37075.34,22.58,346.62,fanc_bwa,2 0,746.2236,0:12:26,22026.01,24493.83,21948.96,21969.79,2997.02,0.53,170.7,512.85,hicexplorer,2 1,710.6231,0:11:50,23024.07,24502.34,22945.46,22966.38,3015.5,0.54,171.76,495.71,hicexplorer,2 2,705.1923,0:11:45,22126.58,24493.83,22047.82,22069.79,3015.5,1.05,176.52,507.18,hicexplorer,2 3,712.7222,0:11:52,23066.12,24493.83,22987.89,23008.64,3015.5,1.56,171.49,518.58,hicexplorer,2 4,715.7957,0:11:55,22876.23,24493.83,22797.87,22819.07,3015.5,2.58,172.73,557.14,hicexplorer,2 0,1073.3043,0:17:53,6730.26,7406.83,6678.91,6685.25,9.88,1089.03,184.85,64.55,hicpro,2 1,1038.1439,0:17:18,6730.3,7406.82,6675.17,6685.6,9.89,2215.98,182.2,73.83,hicpro,2 2,1033.7443,0:17:13,6730.34,7406.82,6675.99,6686.95,221.47,3341.59,185.87,88.03,hicpro,2 3,1022.0066,0:17:02,6731.1,7406.83,6675.88,6688.85,222.14,4467.19,188.24,109.28,hicpro,2 4,1094.391,0:18:14,6730.64,7406.82,6676.12,6689.47,222.14,5592.8,175.63,105.96,hicpro,2 0,502.114,0:08:22,5634.02,34265.69,5609.24,5616.47,70.82,2785.59,175.44,10.71,juicer,2 1,502.401,0:08:22,5634.24,6057.17,5609.44,5616.5,70.89,5661.32,175.44,14.17,juicer,2 2,502.5511,0:08:22,5634.45,6057.17,5609.73,5616.78,70.92,8537.05,175.43,18.41,juicer,2 3,500.9428,0:08:20,5634.69,6057.17,5609.77,5616.84,70.92,11412.78,175.96,24.15,juicer,2 4,500.3197,0:08:20,5634.83,6057.17,5610.01,5617.05,70.92,14367.65,176.2,21.5,juicer,2 0,519.8764,0:08:39,6037.57,9285.21,5901.66,5924.11,5249.05,0.02,194.04,1009.67,pairtools,2 1,483.1521,0:08:03,6037.39,9285.21,5901.68,5924.15,5249.05,39.25,200.27,974.78,pairtools,2 2,480.6768,0:08:00,6037.79,9285.21,5903.83,5941.17,5249.05,78.47,201.33,980.38,pairtools,2 3,465.3507,0:07:45,6037.73,9285.21,5903.88,5941.19,5249.05,117.7,194.76,924.69,pairtools,2 4,466.1686,0:07:46,6038.33,9285.21,5903.87,5941.35,5249.05,156.93,194.4,930.11,pairtools,2 0,228.2886,0:03:48,17383.15,22336.79,17245.43,17268.2,0.0,0.02,186.3,427.67,pairtools_bwamem2,2 1,221.768,0:03:41,17381.39,22167.71,17243.96,17266.91,0.0,39.25,193.13,437.76,pairtools_bwamem2,2 2,221.3263,0:03:41,17362.04,22295.71,17224.0,17246.68,0.0,78.47,193.49,445.19,pairtools_bwamem2,2 3,217.581,0:03:37,17340.12,22400.79,17203.5,17233.95,0.0,117.7,196.51,452.01,pairtools_bwamem2,2 4,223.3371,0:03:43,17393.16,22144.79,17255.85,17277.7,0.01,156.93,192.59,462.11,pairtools_bwamem2,2 0,610.9462,0:10:10,13529.42,15232.48,13516.34,13517.79,36766.11,2801.28,49.41,96.95,tadbit,2 1,376.1804,0:06:16,13569.33,15232.48,13545.14,13547.36,61864.18,5678.4,62.61,85.0,tadbit,2 2,300.593,0:05:00,13570.71,15232.47,13518.36,13536.02,61954.27,9211.43,31.59,15.96,tadbit,2 3,297.5085,0:04:57,13570.71,15232.48,13518.59,13531.8,61954.29,12339.2,53.0,24.9,tadbit,2 4,296.7615,0:04:56,13570.29,15232.48,13518.88,13531.85,61954.32,15451.43,72.1,28.21,tadbit,2 0,463.5859,0:07:43,3666.75,4713.83,3630.19,3636.92,0.02,2804.57,129.07,84.87,tadbit_bowtie2,2 1,455.2237,0:07:35,3666.76,4713.65,3630.33,3637.05,0.04,6087.06,128.93,11.28,tadbit_bowtie2,2 2,455.0799,0:07:35,3666.91,4713.66,3630.34,3637.1,0.07,9386.64,128.87,14.03,tadbit_bowtie2,2 3,458.9496,0:07:38,3667.79,4714.59,3631.29,3638.12,321.35,12458.88,123.9,12.09,tadbit_bowtie2,2 4,452.953,0:07:32,3667.88,4714.02,3597.93,3621.82,321.36,15940.75,129.9,20.51,tadbit_bowtie2,2 0,420.8718,0:07:00,3496.11,4314.01,3471.04,3476.4,15.42,768.89,393.0,1654.84,bowtie,4 1,422.8224,0:07:02,3496.45,4314.02,3471.73,3477.1,15.42,1557.63,391.27,1658.74,bowtie,4 2,419.9842,0:06:59,3494.73,4314.02,3470.36,3475.6,15.42,2354.96,393.91,1662.14,bowtie,4 3,420.7907,0:07:00,3495.93,4314.02,3471.43,3476.67,15.42,3145.49,393.27,1666.11,bowtie,4 4,412.5256,0:06:52,3497.47,4314.64,3472.82,3478.16,15.42,3952.15,401.55,1671.29,bowtie,4 0,252.8627,0:04:12,6006.18,6453.96,5982.69,5986.96,0.83,746.23,358.77,908.39,bwamem,4 1,261.662,0:04:21,6007.87,6453.96,5984.64,5988.93,5174.14,1803.59,380.15,999.85,bwamem,4 2,274.3422,0:04:34,6024.01,6581.96,5999.88,6003.05,6023.34,2736.5,373.3,1032.61,bwamem,4 3,298.8224,0:04:58,6014.57,6453.96,5990.63,5993.79,11196.66,3669.41,359.87,1087.63,bwamem,4 4,285.7411,0:04:45,5997.78,6453.96,5988.62,5989.24,12674.78,4477.87,357.24,1036.2,bwamem,4 0,111.3764,0:01:51,17591.11,20784.61,17566.66,17572.18,0.02,932.93,377.1,420.58,bwamem2,4 1,111.2423,0:01:51,17569.3,20537.94,17544.68,17550.22,0.02,1865.84,376.76,425.65,bwamem2,4 2,112.9415,0:01:52,17579.97,20665.95,17555.33,17560.86,0.02,2798.75,371.87,432.32,bwamem2,4 3,111.3421,0:01:51,17573.66,20489.7,17548.98,17554.51,0.02,3731.66,376.83,437.97,bwamem2,4 4,111.3777,0:01:51,17544.64,20889.7,17520.3,17525.84,0.02,4353.51,270.46,325.61,bwamem2,4 0,63.9876,0:01:03,19049.48,20739.12,19027.24,19032.6,14756.71,0.02,122.87,79.43,chromap,4 1,46.2109,0:00:46,17981.29,19696.59,17959.17,17964.53,14756.71,88.36,86.01,43.67,chromap,4 2,46.4987,0:00:46,17964.62,19692.91,17941.91,17947.24,14756.71,176.69,85.48,49.23,chromap,4 3,46.4768,0:00:46,17972.1,19695.5,17949.51,17954.84,14756.71,265.02,85.79,55.0,chromap,4 4,46.1236,0:00:46,17970.75,19693.68,17948.35,17953.68,14756.71,353.35,86.4,60.65,chromap,4 0,1480.6598,0:24:40,6107.95,8576.53,3509.07,4446.13,0.04,9605.84,30.34,315.13,fanc_bowtie2,4 1,1496.7858,0:24:56,9031.23,11498.52,5833.15,7371.95,0.07,20128.0,29.31,332.72,fanc_bowtie2,4 2,1463.532,0:24:23,7184.77,9101.79,4217.2,5669.65,0.07,31165.73,31.89,344.45,fanc_bowtie2,4 3,1450.3658,0:24:10,6120.51,8586.21,3510.02,4468.34,0.07,41105.85,30.36,336.53,fanc_bowtie2,4 4,1452.4516,0:24:12,7187.97,9104.71,4292.93,5709.08,0.07,51577.66,30.16,338.06,fanc_bowtie2,4 0,1150.8569,0:19:10,7186.05,9953.48,5723.31,5859.42,5224.05,6719.89,32.08,312.36,fanc_bwa,4 1,1135.3056,0:18:55,7224.26,9950.27,5660.22,5824.15,5224.08,14390.72,35.73,329.42,fanc_bwa,4 2,1125.9794,0:18:45,9041.66,11507.65,5849.72,7432.53,5224.11,21886.05,34.66,314.55,fanc_bwa,4 3,1128.931,0:18:48,9044.25,11511.71,5853.64,7435.73,5224.14,29477.74,34.51,319.67,fanc_bwa,4 4,1128.7103,0:18:48,9040.23,11509.34,5851.56,7432.95,5224.14,37075.91,34.49,326.24,fanc_bwa,4 0,596.2727,0:09:56,23080.44,26188.7,23034.84,23042.16,0.0,0.53,199.86,493.7,hicexplorer,4 1,594.7958,0:09:54,23219.5,26188.7,23173.16,23180.65,0.0,1.04,203.29,503.47,hicexplorer,4 2,609.9005,0:10:09,23002.46,26188.7,22956.89,22965.46,0.0,1.05,192.2,508.65,hicexplorer,4 3,597.4554,0:09:57,23259.77,26188.7,23215.77,23224.37,19.97,2.01,204.19,518.44,hicexplorer,4 4,622.1449,0:10:22,23509.05,26188.7,23466.36,23474.47,5281.18,2.58,171.82,538.96,hicexplorer,4 0,619.9254,0:10:19,6759.34,7631.43,6704.49,6717.01,3.34,1088.32,295.46,59.78,hicpro,4 1,558.5864,0:09:18,6759.78,7631.43,6705.0,6715.83,3.34,2216.0,327.68,66.81,hicpro,4 2,550.9692,0:09:10,6760.03,7631.43,6716.98,6725.62,3.34,3341.63,337.46,79.54,hicpro,4 3,549.0615,0:09:09,6759.72,7631.44,6717.38,6725.84,3.34,4467.26,338.57,88.86,hicpro,4 4,548.9341,0:09:08,6760.25,7631.43,6717.1,6725.58,3.34,5592.88,339.01,94.98,hicpro,4 0,297.0198,0:04:57,5996.96,6457.18,5977.55,5979.61,3412.56,2785.59,297.18,6.35,juicer,4 1,319.5797,0:05:19,5989.58,6457.18,5979.42,5981.48,9268.84,5739.07,309.19,7.78,juicer,4 2,327.0335,0:05:27,5988.18,6457.18,5977.84,5978.92,10206.69,8537.05,311.25,12.23,juicer,4 3,331.7378,0:05:31,5988.45,6457.18,5978.38,5979.71,16123.1,11364.07,297.09,18.28,juicer,4 4,334.7347,0:05:34,5989.59,6457.18,5979.36,5980.55,19292.39,14066.95,290.47,19.62,juicer,4 0,241.5991,0:04:01,6399.55,10581.27,6265.49,6303.07,0.17,0.02,385.61,935.31,pairtools,4 1,241.5127,0:04:01,6398.66,10581.27,6265.65,6303.01,0.17,39.25,386.39,940.88,pairtools,4 2,242.2225,0:04:02,6399.6,10581.27,6266.3,6303.79,0.17,78.47,384.74,943.77,pairtools,4 3,241.9401,0:04:01,6398.33,10581.27,6264.49,6301.69,0.17,117.7,385.22,947.96,pairtools,4 4,242.4722,0:04:02,6399.78,10581.27,6265.86,6303.43,0.17,156.93,384.24,951.72,pairtools,4 0,149.1161,0:02:29,18032.98,24632.93,17895.58,17910.56,6662.34,0.02,321.06,482.55,pairtools_bwamem2,4 1,129.8502,0:02:09,18011.57,24911.85,17874.46,17889.42,7215.82,39.25,336.11,443.2,pairtools_bwamem2,4 2,149.7954,0:02:29,17943.55,24532.52,17806.29,17821.07,13922.12,78.47,316.37,488.94,pairtools_bwamem2,4 3,151.1137,0:02:31,17982.62,24665.18,17847.23,17861.77,30195.88,117.7,311.36,487.72,pairtools_bwamem2,4 4,151.164,0:02:31,18000.05,24454.96,17865.51,17883.09,46478.44,156.93,310.2,489.74,pairtools_bwamem2,4 0,258.4889,0:04:18,13609.79,15690.48,13542.78,13567.37,15901.3,3103.55,57.27,19.48,tadbit,4 1,226.7053,0:03:46,10086.89,15275.6,10018.9,10043.75,15902.2,5596.25,40.62,76.32,tadbit,4 2,228.1718,0:03:48,8939.3,15275.61,8872.51,8896.66,15902.23,9327.17,39.3,23.97,tadbit,4 3,226.9155,0:03:46,9170.13,15275.61,9102.29,9127.05,15902.26,11800.28,40.77,79.04,tadbit,4 4,225.4808,0:03:45,9664.37,15275.61,9635.06,9642.85,15902.27,14928.92,41.44,83.32,tadbit,4 0,320.7662,0:05:20,3689.32,5212.95,3650.62,3659.72,0.02,3171.16,145.76,25.25,tadbit_bowtie2,4 1,348.5605,0:05:48,3687.51,5211.26,3648.52,3653.68,3011.82,6430.47,170.42,20.75,tadbit_bowtie2,4 2,338.4871,0:05:38,3688.18,5211.85,3649.18,3654.37,3012.64,9240.8,172.35,8.57,tadbit_bowtie2,4 3,340.9527,0:05:40,3689.14,5212.57,3649.83,3654.76,3014.55,12098.38,165.3,65.98,tadbit_bowtie2,4 4,346.3,0:05:46,3688.78,5212.19,3649.61,3654.97,3060.71,15516.58,170.85,94.72,tadbit_bowtie2,4 pairtools-1.0.3/doc/examples/example_pipeline.sh000066400000000000000000000044211452673171500220020ustar00rootroot00000000000000#!/usr/bin/env bash if [ $# -le 3 ] ; then echo "Usage: bash example_pipeline.sh BWA_INDEX FASTQ_1 FASTQ_2 OUTPUT_PREFIX" echo "" echo "A example of a bash pipeline to align the sequencing data from a " echo "single Hi-C experiment." echo "" echo "positional arguments:" echo "" echo "BWA_INDEX The path to a bwa index of the reference genome." echo "CHROM_SIZES The path to a file with chromosome sizes." echo "FASTQ_1 The path to a fastq file with the sequences of " echo " the first side of Hi-C molecules." echo "FASTQ_2 The path to a fastq file with the sequences of " echo " the second side of Hi-C molecules." echo "OUTPUT_PREFIX The prefix to the paths of generated outputs. " echo "" echo "" exit 0 fi set -o errexit set -o nounset set -o pipefail INDEX=$1 CHROM_SIZES=$2 FASTQ1=$3 FASTQ2=$4 OUTPREFIX=$5 N_THREADS=8 UNMAPPED_SAM_PATH=${OUTPREFIX}.unmapped.bam UNMAPPED_PAIRS_PATH=${OUTPREFIX}.unmapped.pairs.gz NODUPS_SAM_PATH=${OUTPREFIX}.nodups.bam NODUPS_PAIRS_PATH=${OUTPREFIX}.nodups.pairs.gz DUPS_SAM_PATH=${OUTPREFIX}.dups.bam DUPS_PAIRS_PATH=${OUTPREFIX}.dups.pairs.gz bwa mem -SP -t "${N_THREADS}" "${INDEX}" "${FASTQ1}" "${FASTQ2}" | { # Classify Hi-C molecules as unmapped/single-sided/multimapped/chimeric/etc # and output one line per read, containing the following, separated by \\v: # * triu-flipped pairs # * read id # * type of a Hi-C molecule # * corresponding sam entries pairtools parse --chroms-path "{CHROM_SIZES}" } | { # Block-sort pairs together with SAM entries pairtools sort --nproc 4 } | { # Remove duplicates, separate mapped and unmapped reads pairtools dedup \ --output \ >( pairtools split \ --output-pairs ${NODUPS_PAIRS_PATH} \ --output-sam ${NODUPS_SAM_PATH} ) \ --output-dups \ >( pairtools markasdup \ | pairtools split \ --output-pairs ${DUPS_PAIRS_PATH} \ --output-sam ${DUPS_SAM_PATH} ) \ --output-unmapped >( pairtools split \ --output-pairs ${UNMAPPED_PAIRS_PATH} \ --output-sam ${UNMAPPED_SAM_PATH} ) } pairtools-1.0.3/doc/examples/example_singlecell_pipeline.sh000066400000000000000000000055271452673171500242130ustar00rootroot00000000000000#!/usr/bin/env bash if [ $# -le 3 ] ; then echo "Usage: bash example_pipeline.sh BWA_INDEX FASTQ_1 FASTQ_2 OUTPUT_PREFIX" echo "" echo "A example of a bash pipeline to align the sequencing data from a " echo "single Hi-C experiment." echo "" echo "positional arguments:" echo "" echo "BWA_INDEX The path to a bwa index of the reference genome." echo "CHROM_SIZES The path to a file with chromosome sizes." echo "FASTQ_1 The path to a fastq file with the sequences of " echo " the first side of Hi-C molecules." echo "FASTQ_2 The path to a fastq file with the sequences of " echo " the second side of Hi-C molecules." echo "OUTPUT_PREFIX The prefix to the paths of generated outputs. " echo "" echo "" exit 0 fi set -o errexit set -o nounset set -o pipefail INDEX=$1 CHROM_SIZES=$2 FASTQ1=$3 FASTQ2=$4 OUTPREFIX=$5 N_THREADS=8 UNMAPPED_SAM_PATH=${OUTPREFIX}.unmapped.bam UNMAPPED_PAIRS_PATH=${OUTPREFIX}.unmapped.pairs.gz NODUPS_SAM_PATH=${OUTPREFIX}.nodups.bam NODUPS_PAIRS_PATH=${OUTPREFIX}.nodups.pairs.gz DUPS_SAM_PATH=${OUTPREFIX}.dups.bam DUPS_PAIRS_PATH=${OUTPREFIX}.dups.pairs.gz LOWFREQPAIRS_SAM_PATH=${OUTPREFIX}.lowfreq.bam LOWFREQPAIRS_PAIRS_PATH=${OUTPREFIX}.lowfreq.pairs.gz HIGHFREQPAIRS_SAM_PATH=${OUTPREFIX}.highfreq.bam HIGHFREQPAIRS_PAIRS_PATH=${OUTPREFIX}.highfreq.pairs.gz bwa mem -SP -t "${N_THREADS}" "${INDEX}" "${FASTQ1}" "${FASTQ2}" | { # Classify Hi-C molecules as unmapped/single-sided/multimapped/chimeric/etc # and output one line per read, containing the following, separated by \\v: # * triu-flipped pairs # * read id # * type of a Hi-C molecule # * corresponding sam entries pairtools parse "{CHROM_SIZES}" } | { # Block-sort pairs together with SAM entries pairtools sort } | { # Set unmapped and ambiguous reads aside pairtools select '(pair_type == "UU") or (pair_type == "UR") or (pair_type == "RU")' \ --output-rest >( pairtools split \ --output-pairs ${UNMAPPED_PAIRS_PATH} \ --output-sam ${UNMAPPED_SAM_PATH} ) } | { # Remove duplicates pairtools dedup \ --output-dups \ >( pairtools markasdup \ | pairtools split \ --output-pairs ${DUPS_PAIRS_PATH} \ --output-sam ${DUPS_SAM_PATH} ) } | { # Remove high frequency interactors pairtools multifilter \ --output \ >( pairtools split \ --output-pairs ${LOWFREQ_PAIRS_PATH} \ --output-sam ${LOWFREQ_SAM_PATH} ) \ --output-high-frequency-interactors \ >( pairtools markasdup \ | pairtools split \ --output-pairs ${HIGHFREQPAIRS_PAIRS_PATH} \ --output-sam ${HIGHFREQPAIRS_SAM_PATH} ) } pairtools-1.0.3/doc/examples/pairtools_phase_walkthrough.ipynb000066400000000000000000002201251452673171500250050ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "id": "112fe2d5-aaed-4eb1-b3f5-2f5889a9c89f", "metadata": {}, "source": [ "# Pairtools phase walkthrough\n", "\n", "Welcome to the pairtools phase walkthrough!\n", "\n", "Haplotype-resolved Hi-C is a popular technique that helps you to resolve contacts of homologous chromosomes. \n", "It relies on a simple idea tha homologous chromosomes have variations (e.g., SNPs) that are inherited together as **haplotypes**. DNA reads in Hi-C will have the SNVs from one of two haplotypes, which can be used to distinguish the contacts on the same chromosome (*cis-homologous*) and contacts connecting two homologs (*trans-homologous*). \n", "\n", "The experimental challenge of the haplotype-resolved Hi-C is to increase the number of SNPs that distinguish reads from different chromosomes. This can be dome by mating highly diverged. \n", "\n", "- Erceg et al. 2019 create highly heterozygous embryos of *Drosophila* [1] \n", "- Collombet et al. 2020 create highly polymorphic F1 hybrid embryos obtained by crossing female *Mus musculus domesticus* (C57Bl/6J) with male *Mus musculus castaneus* CAST/EiJ) to resolve structures of individual chromosomes in the zygote and embryos [2] \n", "- Tan et al. 2018 uses available heterozygous positions to infer the 3D structures of single chromosomes by single-cell variant of the protocol Dip-C [3] \n", "- Duan et al. use dikaryonic nuclei of fungi with 0.7% heterozygosity [4]" ] }, { "attachments": { "62e74fba-c1c1-44b5-a3e2-3699c3cac7ce.png": { "image/png": "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ICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQzNjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MTQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K5t/YPQAAABxpRE9UAAAAAgAAAAAAAADaAAAAKAAAANoAAADaAABR/Kx9IVAAAEAASURBVHgB7J0J3A3V/8e/JPu+JEtky1KSdiVa+aWfpbL+SihFaVG0qkgqSSnSZklFZYmK0GIpUUIpSijJmlA81mzzP5/z+5/5zV2e+9y52zN37ue8XszMmTNnznmfeeaez5zv+Z48lgrCQAIkQAIkQAIkQAIkQAIkQAIeJpCHwsXDrcOikQAJkAAJkAAJkAAJkAAJaAIULnwQSIAESIAESIAESIAESIAEPE+AwsXzTcQCkgAJkAAJkAAJkAAJkAAJULjwGSABEiABEiABEiABEiABEvA8AQoXzzcRC0gCJEACJEACJEACJEACJEDhwmeABEiABEiABEiABEiABEjA8wQoXDzfRCwgCZAACZAACZAACZAACZAAhQufARIgARIgARIgARIgARIgAc8ToHDxfBOxgCRAAiRAAiRAAiRAAiRAAhQufAZIgARIgARIgARIgARIgAQ8T4DCxfNNxAKSAAmQAAmQAAmQAAmQAAlQuPAZIAESIAESIAESIAESIAES8DwBChfPNxELSAIkQAIkQAIkQAIkQAIkQOHCZ4AESIAESIAESIAESIAESMDzBChcPN9ELCAJkAAJkAAJkAAJkAAJkACFC58BEiABEiABEiABEiABEiABzxOgcPF8E7GAJEACJEACJEACJEACJEACFC58BkiABEiABEiABEiABEiABDxPgMLF803EApIACZAACZAACZAACZAACVC48BkgARIgARIgARIgARIgARLwPAEKF883EQtIAiRAAiRAAiRAAiRA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hlmmLKTshjXTpi+BuEzF1B+TDnA3B1MKzE1Q62CYaG4zlABc7L3//vuuaz9mzBhREwBdXxfuArgZHDRokChRHe501HEwF4PZGczenG4Eo86ACX1F4Pbbb5cOHTq4qhNszdUia7Jr1y5X14VLDFt5tW6CdkWvRgTDJWFcLhH47bfftKtVzJFTo7y5VAre1isElKMa3S9yW55+/foJ5n0mIsDkGr+DmJfHQAJ+IZAQ4eIXGKwHCZAACZAACZAACZAACZCANwlQuHizXVgqEiABEiABEiABEiABEiABBwEKFwcM7pIACZAACZAACZAACZAACXiTAIWLN9uFpSIBEiABEiABEiABEiABEnAQoHBxwOAuCZAACZAACZAACZAACZCANwlQuHizXVgqEiABEiABEiABEiABEiABBwEKFwcM7pIACZAACZAACZAACZAACXiTAIWLN9uFpSIBEiABEiABEiABEiABEnAQoHBxwOAuCZAACZAACZAACZAACZCANwlQuHizXVgqEiABEiABEiABEiABEiABBwEKFwcM7pIACZAACZAACZAACZAACXiTAIWLN9uFpSIBEiABEiABm8Cxfftk7w8/2MfOnSL16slxJUo4o7y/f+yYZC1eHLacBatVk/wnnhj2HCNJgAQymwCFS2a3P2tPAiRAAiSQBgQO/fGHLKxQIWxJz1WCpkj9+mHPeTlygRJbR7KyQop42uTJUq5t25B4RpAACZDA/wEAAP//LShvBwAAPlBJREFU7d0J3FTz/sDx71NpX7SnRaKNyFrZkkS6yBJR1rZL1lDk383NpeQWiVCiruKmnZSKilQq2i2JrnYttO97//M9/E4z8zxPM8/MmZlzZj6/16vOMmf5/d5nnuc533N+S8YxKwkJAQQQQAABBDwtMKtECTm0bVtQHjNy55YGe/dKRt68Qev9sLDw0ktlx5w5mbJab+lSKXjmmZnWswIBBBDIIHDhS4AAAggggID3BRbVry/bZ80KymihmjWl7k8/Ba3zy8LP7drJ+kGDgrKb66ST5Io9eyTDmpIQQACBUAECl1ARlhFAAAEEEPCgwC/t28tvb78dlLPSzZrJ2WPGBK3zy8K6V1+V5U8+GZTdQrVqSd0ffghaxwICCCBgBAhcjARTBBBAAAEEPCyw7vXXZXmHDkE5PO3ZZ6XK888HrfPLwrbPP5fF114blN0yt98utUaMCFrHAgIIIGAECFyMBFMEEEAAAQQ8LLBt2jRZfPXVQTms9eGHUqZFi6B1flk4sG6dzK5UKSi7VZ57Tk7r1i1oHQsIIICAESBwMRJMEUAAAQQQ8LDAwY0b5etTTgnKYd3vvpNC55wTtM5PCzOLFZPDO3c6WT571CgpfdttzjIz6Slw6NAhmT59uowfP16KFy8u9a32XVdeeaXkyZMnPUFyUOo1a9bIuHHj5AerymW9evWkUaNGUrly5RwcwdubErh4+/qQOwQQQAABBByBwJ7F/NyjmClQaM9i9X78UQqedZb5mGkaCmzdulXOPfdcWWe9kStYsKAcPHhQDh8+LLdb1Qg/tN4w5sqVKw1VIityr169pHPnzvbGxayHAjt27JDChQvLlClT5OKLL47sIB7fisDF4xeI7CGAAAIIIGAEAnsWK1ijhtRbtsx85MtpYM9i9Cjmy0voeqbvvPNOO0AZMGCAtG7dWg4cOCBdu3aV1602Xp06dZLevXu7fs5UOOD3338vF110kdSyOrj4+OOP5dRTT5WFCxdK48aN5ejRo/Kd9Xa2YsWKvi8qgYvvLyEFQAABBBBIF4HAnsX83KOYuV6BPYvRo5hRSd/pjBkzpEGDBnL33XfL+++/70DoG5caVqC+ZcsW2bRpk+TLl8/5jJk/Ba666ir58ssvZfny5VK1alWHZfDgwdK2bVt56aWXnLcxzoc+nCFw8eFFI8sIIIAAAv4V+NzqTeu3336TjIwM+58piS5rCp0Grits7Vt06FB7O7/2KDZ16lRZu3atXc4CVj38Mq+8YpdnX926svnhh+15YxBYdrMucHrdddeJVokhpYZAnz59pGPHjjJ27Fi55ZZbggrV3uoO/G2rO/BJkyZJkyZNgj5jQaRo0aJSpUoVWbJkSRDHhg0bpHz58nZ7l7lz5wZ95scFAhc/XjXyjAACCCDgWwG92dabr2jSBdZOL/+14xyr0W0XKwjwW7rxxhvtRtea79LWP9P58RBrXv/lJGmj7c8++0wKFCiQk93Y1qMCJjhZvXq1XdUpMJtvvPGGPProo6JVyB544IHAj9J+fqPVcccpVscdWrVO37CEplKlSslJ1qCuGsT4PRG4+P0Kkn8EEEAAAV8JxBK4lLRKOuqv0razpi26dJEePXr4qvyBgYtmfIL1r6D171/Wv6+sfzlNTZs2tZ/Q0+NUTuW8t33Dhg3t3sR2794thQoVCsrgsGHD5K677pLnrXGLnrXGLyIdF/jqq6/sXteyawNUvXp1Wblypd3RgXljeXxvf80RuPjrepFbBBBAAAGfCwQGLnpzVqRIETl27JhdKjMNLKJZZ6aDN2+2b/SvszY6aP171RqB/vHHHw/cxdPzgYGLlv9Vq9eoqlb3t0+VLCnrrO5uTTkDC2HWmem+fftkz549zib33Xef/Oc//3Gq2TkfMOMrAW2boTfYR44cyZTv0aNHS/Pmze2G+i+88EKmz9N5xQcffCD33HNPtkHd2WefLT9aPfZpN9N+D/AJXNL5m07ZEUAAAQQSLhAYuLRp00aefvrpHOXht1tvlfU//ST3WD0FadInqEOGDLFvXHJ0oCRtHBi43HvvvfKQFYDss8adKLdokWRY1VkiSbt27bIbcP/888/O5to24uWXTUU6ZzUzPhKoa7Vzmjdvnmhgmj9//qCcDxw40K4i1rdvX+nQoUPQZ+m+MHHiRLn++uvtxvfaCD80aRsXNd22bVvoR75bJnDx3SUjwwgggAACfhaINXDZ/s9/ynarDcCtVsN289ZBn6JqF6h68+L1FBq4dLBuqvZYA0+W+fTTHGX9jz/+EO06Vxv6m9SzZ0955plnzCJTnwmY78aqVasyDZqo17aLVTVy+PDhcscdd/isZPHNrnZ7fOGFF0qrVq3sN4+hZ9Ne2E4//XT5yXrg4fdE4OL3K0j+EUAAAQR8JRBr4LLb6lXsmPXk9EdrVOy///3vdvUPBdAG6jrQ3GWXXeZpD3NzqpnUNy5PWg3s940ZI8WtJ+k5TRq0tGzZUjZb1edMevfdd+3uX80yU/8IdOvWza7ulFVwcsMNN4i+WdAe+bQhOum4gLYJKlu2rN2hQWhwMn/+fKlTp479tko7NvB7ikvgooA66qm+vjb/DJRpFJTdVLczn2ljIh0lNfR1oTmWV6f79++3BwAKLLspU2D5zDozzeqzk08+WUZZT6L0NR8JAQQQQMD/ArEGLgfmzJGj1ujiBay3K9q1srZv0QHmNOnfDB0L45xzzvEsVGjg0tmqLrfXar9Q5JFHosqzVhfTcT+0+pim3Llz2383Q7vTjerg7JRQgV9++cUer+W8886zq4yZ9hj6BkbvCXWAxdmzZyc0T345mRm4U9sC3WpVJzVJH25oMK+97+lglH5PcQlcdu7c6Vq/6jfddJOMsZ7E6C8ivyStR1iwoPaR4k7SRlX6h6h48eLuHJCjIIAAAggkTSDWwOXI77/LUeuNy0nWgHyaRo4cKf+0qo+ZpE+jv/76a3tMB7POS9PQwEWr/xyYNUvyXX551NlcsGCBaHshHWVdk1aNmTx5st3TUtQHZcekCOh11I4Wbr75ZvuabrWCdH0To1Mdh+Sss85KSr68ftLvv/9etHvwvHnzylNPPSUa/On9s459o6aDBg3yehEiyp/nAxctRXb9UkdUwiRs5HbgokW49NJL7SoAbgZESaDhlAgggEDaC8QauCjgMWsk8QyrXYtJenOivYuZpL0zzbKCAa0+4rWUVeASWp5o8qyjhj9ivbUxPVLpgHy67oILdPQbkl8E9PppL3Fa48a8SaxQoYL0799ftOtrUvYC+sBC3zRq+y9NOnaL/r4ZMWKEHcxnv6d/PklI4HL//ffbVZ1MN4aGxyybqa438/oESV8ZmqTRY69evcyip6ehgUu7du2kYsWKdp5N+UwBApfNvJlqv9wzZ840m8rf/vY3GWf1vKJfRBICCCCAgD8F3Ahcsiq5Nl7W3sVM0ieu+ndEb+C9lLIKXNzKn3ZQENg4v0yZMnYAV61aNbdOwXESJLB9+3a7Wtipp54qWvOEFJmA3kP+YHXcoe2/9A2MdreeSikhgYu20chpfdvfrVfh2uBOG2GZpIGLBjBeT6GBizYy0z8gOU0Hrb7ttW7iN9984+yqgy+9//77Tjsg5wNmEEAAAQR8IRCvwCX0pj1Xrlz2wy5t1OylFM/AZfHixXYtDf07bFL37t3lH//4h1lkigACPhbwbOCipmvWrLGDly1btjjEgwcPtn8pOSs8OONW4KJF044OtNeVpUuXOiV97LHH5LXXXnOWmUEAAQQQ8I9APAIXrVbzr3/p2PN/Jm3UrIPSebHb2HgFLtr+4aGHHpK9e/caBgYrdCSYQSA1BDwduCixduumo4HqDbwmbaSvjY200b5Xk5uBi5ZRAzftLWK11W+/STpqbNeuXc0iUwQQQAABnwi4HbhoQ+Z///vfTum1YbpWt9YAwYspHoGLVol79NFHRWsqmMSYLkaCKQKpI+D5wEWpdRTVtm3bOr+QtHtk7S2kQYMGnrwSbgcuWsh169bZwYtWoTNJG6q1b9/eLDJFAAEEEPCBgJuBy5tvvin9+vVzSq0duGiVsWuuucZZ57UZtwMX7ea1Y8eOctjqsECTDjHw+uuv2w31vVZ28oMAArEJ+CJw0SJOmzbNfppiepjQxob6hCWatiOxkYXfOx6Bi551+fLlom1ctLtpTVp/WdvPNG/e3F7mPwQQQAAB7wu4Fbj07t07qItT/bv4qTX6/OUxdCucCD03AxftsOb//u//nN6n9O+ijlmhvZGSEEAg9QR8E7govVYRC2xgp908aneP2u2jl1K8Ahct46JFi+xfyDrIpSbtr1v/UF199dX2Mv8hgAACCHhbINbARXsNev755+3uYk1JS5QoYQ8wpwP0eT25Fbj4qV2P168J+UPALwK+ClwUVXsH0QaHJlWpUkUWLlxojxZs1iV7Gs/ARcsWGsAVLlxY5lgjKdNdYLKvPOdHAAEEwgvEErjoGBf6AE+rg5mkD/GmTJmS4947zf6JnroRuGhHPYFDJGi7Hu3BlHE+En01OR8CiRXwVeDy7bffyoMPPih79uxxlPQV8Ysvvugse2EmnoGL9svdqlWroG6itaOCVBpcyAvXkDwggAAC8RIIDFy0urMOMBxp+u677+yaBmb7SpUqydSpU6V69epmleengYFL7dq1c1y1bePGjTJ27FinnNquR6uMUfPAIWEGgZQV8E3gogMx6oi4Bw4ccC6GV/tmj1fgsmLFCjtoCWyg36JFC3tcF+36koQAAggg4H2BwMAlltyeccYZdvvPypUrx3KYhO8bGLjEenK/tOuJtZzsjwACfwr4InDRV+BPPvmkHDp0yM619hjy6quvSocOHTx5HeMRuCxbtsxu27Jt2zanzNrT2sCBA+1G+s5KZhBAAAEEPC3gRuBy5pln2m9aypcv7+myZpU5twIXP7XrycqBdQggkHMBzwcun3zyid1jiNbr1aQ9hrz99tvSrl27nJc2QXu4HbgsWbJE/v73vzu9iWkxdBDKvn372t0+JqhYnAYBBBBAwAWBzp07yzfffBP1kYoXLy7vvPOOlCpVKupjJHPHLl26yOzZs2PKgtYy0L+BtO2MiZGdEfCdgKcDFx1Aq1u3bqI9qGjSX1RDhw6Vli1behrazcDFL+16PH1ByBwCCCCAAAIIIICA7wU8G7gMGTJEdNRbk7TbX22AfvPNN5tVnp26Fbhk1a6nR48eok+rSAgggAACCCCAAAIIpJOAJwOXt956yx711lwI7THko48+ksaNG5tVnp66Ebhk1a5HX4trFTESAggggAACCCCAAALpJpCQwEUb0+u/SNPRo0edTYsUKSITJkyQK664wlnn9ZnQwCWn5dfyBRpoux5thK+N8UkIIIAAAggggAACCKSjQEICl2hhtQHi5MmTpW7dutEeIin7hQYusWTCL+16Yikj+yKAAAIIIIAAAgggEE7As4FLmTJl7JGAdXAqvyW3AhcdCVjb9egAkyQEEEAAAQQQQAABBNJZIC6Bi3Zd/MUXX8TkWrNmTdERgf2YtJrXtGnTYs669s9fq1atmI/DARBAAAEEEEAAAQQQ8LtAXAIXv6OQfwQQQAABBBBAAAEEEPCWAIGLt64HuUEAAQQQQAABBBBAAIEsBAhcskBhFQIIIIAAAggggAACCHhLgMDFW9eD3CCAAAIIIIAAAggggEAWAgQuWaCwCgEEEEAAAQQQQAABBLwlQODiretBbhBAAAEEEEAAAQQQQCALAQKXLFBYhQACCCCAgJcEDm7YIKteeCHLLFV64gkpUK1alp+xMjqB7v/3i+zccTjTzo3+VkqubVom03pWIIBAYgQIXBLjzFkQQAABBBCIWuDo3r0yo3BhOXbsWKZjXLpmjeTz6bhnmQrjkRXXXz5Xvvl6W6bcvD7oHLmzTcVM61mBAAKJESBwSYwzZ0EAAQQQQCAmgbmnny77Vq4MOkaeIkWk/s6dQetYiF2g4wM/ypCBazId6PO5l8oF9YplWs8KBBBIjACBS2KcOQsCCCCAAAIxCXzftKlsnjAh6BjF6tWTC+bODVrHQuwCA19bLV0eX5rpQKt2XCOFi+bJtJ4VCCCQGAECl8Q4cxYEEEAAAQRiEljRubOs7tUr6BintGkjNQcNClrHQuwCM6ZukWbXfBt0oAqVCsiSNVcGrWMBAQQSK0DgklhvzoYAAggggEBUApuGDpWl990XtG/Vl1+WSh07Bq1jIXaBTRsOSK3yXwQdqFGT0jJi0kVB61hAAIHEChC4JNabsyGAAAIIIBCVwK4FC2T+RcE3zudOmiQlmjSJ6njsdGKBM4pPlR3bDzkbPfRkFXn+lZrOMjMIIJB4AQKXxJtzRgQQQAABBHIscHTPHplhNcYP7FmMHsVyzBjxDqE9i9GjWMR0MW946NAhmT59uowfP16KFy8u9evXlyuvvFLy5KF9UaS4o0aNkpkzZ8rrr78e6S6+2I7AxReXiUwigAACCCAgEtizGD2KxfcbEdqzGD2KxdfbHH3r1q1y7rnnyrp166RgwYJy8OBBOXz4sNx+++3y4YcfSq5cucymTLMRUK/atWvL77//Lps3b85mK3+uJnDx53Uj1wgggAACaSgQ2LMYPYrF9wsQ2rMYPYrF19sc/c4777QDlAEDBkjr1q3lwIED0rVrV/vNQadOnaR3795mU6YhAhs3bpQlS5bYVhMnTpSSJUsSuIQYsYgAAggggAACCRII7FmMHsXiix7Ysxg9isXX2hx9xowZ0qBBA7n77rvl/fffN6vtNy41atSQLVu2yKZNmyRfvnzOZ8z8KbBq1SqpUqVKEAeBSxBH9As7rcGyhlq9o2jKyMiw/5n5SKfNmjWTEiVK6OYkBBDwsYDW1x8Ux+5c69ata78y9zERWU8zgZEjR9pVPLL6+1j822+l7Hvv2SKbb7tNtl1zjT2v22rS6XnnnScXhTTitz9M4f+0OszHH3/sagl37cgjPTqVtY95ecOi8vEXl7l6fA6WWaBPnz7S0eolb+zYsXLLLbcEbdC+fXt5++23ZZLVIUUTOqQIstGFvXv3ymeffeas17dV2iaIqmIOSfQzK1askDPOOCP6A1h7XnzxxTJt2jS7/mNMB2JnBBBIqsDRo0cld+7cccuDNuzUp3hnn3123M7BgRFwU6BOnToyf/78LA9Zw1rb/69PnrGmwSON/PlB4cKF5YsvvhA9Trok9YpHeUvIKMmQQlKo5AxZ+HMnu+pNupgmo5wmOFm9erWceuqpQVl444035NFHHxWtQvbAAw8EfcZCZoFy5crZb6oIXDLb5HiNG4GLnlQj7k8++UROOumkHOeBHRBAwBsC8Q5ctJTly5eXr7/+Wk477TRvFJpcIHACgRMFLgWs/T79a9+W1nRTNscpVaqU3aNQzZrp0X1vvAKXYvKy5JGzZI/0lXPr7bAfmBYqVCgbdVbHKtCwYUO7N7Hdu3dLqPOwYcPkrrvukueff16effbZWE+V8vsTuLh4iUMDl7JlyzpPXE03j2ZqTmuW9+3bJ1rVzKSWLVvKf//7X6e6mVnPFAEE/CEQGricfPLJkjdv3pgzr8cNfNJUrVo1mTVrlpQpUybmY3MABOIpEBi4FC1aVPQNiibzd7Cv1VNQEev73cb62xm4Xj/XXoRMqlSpkh2w6zTVU2jgUrp0aVfuCw5vv1cyDl4lO+VJOSTLpHHjxjJhwgQemMbpC1W1alVZuXKlHDlyJNMZRo8eLc2bN7cb6r/wwguZPmdFsACBS7BHTEuhgctbb70l+ksmkqSBy3PPPSd6DJP01WGq9VNtysYUgVQXCA1c9Oe7Vq1arhT7P//5j2jPKiadf/759tM8vRkkIeBVgcDARZ8w33zzzUFZLdqzp2RYD/B2WNPQNHz4cBkzZoyz+swzz7TfvGgj3VROoYHLkCFDXKlKPuWTXDLm/QKyTW6To7LXJrzjjjtEn/7TLa/73yhtkzhv3jzRe738+fMHnWDgwIF2FbG+fftKhw4dgj5jIbMAgUtmk6jXxBK46El37NhhvybcsGGDk4d//etf8s9//tNZZgYBBPwhEM/ARZ9A9+vXz75xMxo6iNnkyZPplcaAMPWcQLjApdAHH9iBy+6HHsoy7++88458/vnnzmd6M6htQs2bG+eDFJqJV+Cy7Lvc8t6b1hvg4h3k119/dcQesuzffPNNZ5kZdwRuvPFGe9BJ7SGrcuXKQQftaQXqXbp0EQ3ONXgknViAwOXEPjn6NNbARU/2xx9/2K8LdaAik/TNzYMPPmgWmSKAgA8E4hm4aPG1ysG///1vWbRokaOhT7C12kE8OwVwTsYMAjkUCBe45LNGFNc3Lvutm7yskv5M6VPpOXPmOB9fY/U+plWc3KiG6RzUQzPxCly2b82QoW/lk1aP/W4/MF2/fr1T6m7dutk1QJwVzMQsoKbahiWr4OSGG26w36D/9ttvcsopp8R8rlQ/AIGLi1fYjcBFs7N27Vr7LYs24tKkr211VFUdXZWEAAL+EIh34KIKOoCZ/jH85ZdfHJS2bdvKu+++6ywzg4BXBMIFLnmsJ/8auByyqj5mlw4dOiQvvfSSfPfdd84mqTzyeLwCF8WbOPokue62Q1k+MNWerh5++GHHmJnYBPR3tI7Xol16a5Ux7c5Xk76BqV69ut3N9+zZs2M7SZrsTeDi4oV2K3DRLOmXXG9I9MZEkz5N0qdK+nSJhAAC3hdIROCiCvqAQ6uT6gMPkzp37mzf3Jllpgh4QSBc4JKxf79k7NkjR8O0W9F2Avr38X//+59TLK2VoLUTUi3FM3DZ+FuGlKtwzCZbt26d/eYl8IGpdhDUokWLVCNNWnnatGkj2j5R34zrvNas0TcxOp07d66cddZZScubn05M4OLi1XIzcNFsLV682L75ML1QaBd62oe91uslIYCAtwUSFbiogv7h69q1q/3k1Ki8/PLL9oBnZpkpAskWCBe45CR/u3btsr/zgVWctCtZDWhSKcUzcAl1Wr58uWi7WvPAVIdkGD9+vFx77bWhm7IchYDey9133312DRr9+6CpQoUK0r9/f2natGkUR0zPXQhcXLzubgcumjXt5vS1115zcqk9qMycOVO0RxUSAgh4VyCRgYsqaKceGryYbtV1pHF9uqd/KEkIeEHAzcBFy6Pdgut3fsuWLU7xtCdO7ZEzVVIiAxc1W7Jkif3A9PDhwzahPjCdOnWqPTh2qpgmuxzbt28XrRamA1EygHCyr4Z3zp9h9brz5/vPBOYpHoHL999/b/8SOXjwoFOSV155RZ588klnmRkEEPCeQKIDl23bttkNagOfQGvV0sBemLynRI7SScDtwEXfuugbFm0nYNIll1xiP9xLlQ4qEh24aA9jarp3759dJKvr008/bXcEYoyZIoCA+wIpEbgsWLBANEjRxogm9erVS5566imzyBQBBDwqkMjARXsj1JuNjRs3OhrXXXedPe5F6JgBzgbMIJBgATcDFw3U9TuvbTNM0i7BtWpTKnWPnMjAZdmyZfLiiy/aY40Y006dOknv3r3NIlMEEIiTgO8DF+3uUauImfYtWu1De/nQPtZJCCDgfYFEBS5aRUxv4LTajEm33nqrXY9a66iTEPCKgFuBi37XtS1GYKDepEkTGTt2rBQoUMArxXUlH4kKXLR2h3avbtq3aObpFtmVS8hBEIhIwNeBy3SrL3ttrKU3Ppr0lfegQYOoqx7RpWcjBLwhkIjARXsS06BF60ybdM8999htW1KlqowpF1P/C7gRuGQVqDdr1swO1FNxLJdEBC56Dq3dYdq16DdN37Lo2xYSAggkRsC3gYuOfK1Bikn6xFS7JGzevLlZxRQBBHwgEO/AReuid+/e3e4O2XC0b9/e7hJW39CSEPCaQKyBS1aB+t133y3vvfdeyg66Gu/ARRuJa4cGgbU73nzzTQa99toPD/lJeQFfBi7jxo2TDz74wLk4Wjd91KhRoqOqkhBAwF8C8QxctC56z549gxrQduzYUbQLZBICXhWIJXBZuXKlvPDCC6IN8k26//777doJOkhzqqZ4Bi5ffvmlDBgwIKh2x+DBg+Xee+9NVU7KhYBnBXwXuIwYMUJGjx7tgGoXhBrINGrUyFnHDAII+EcgXoELddH98x0gp8EC0QYuP//8s91oPLCnqyeeeEL69OkTfIIUXIpX4JJV7Y5hw4bJbbfdloKKFAkB7wt4InDRoKNgwYJhtbRHIB011aRixYrJxIkT5dJLLzWrmCKAgM8EQgOX+vXrS6lSpZxSBPbYHjhvNghcZ+a1DvqUKVOoi26QmPpKIDBwqVmzplSrVi1s/vXnSMcRCWw0nooDTWYHERq46ECFefLkcTY3vxvM1Pngrxmz3kx1tY719NVXXzmbau2OMWPGiPZESEIAgeQIeCJwiaboOsCkjrtwwQUXRLM7+yCAgEcEQgMXt7Ol7Vioi+62KseLp0Bg4BLtebTnKx1XJF1SaODidrm1dod2Id2wYUO3D83xEEAgBwK+DFzKlStnP1mqVatWDorKpggg4EWBeAYu2mMYddG9eNXJ04kEYglcNFDv16+fPPzwwyc6Rcp9Fs/ARWt3TJo0SXTQThICCCRXICmBi/Yp37Zt26hKrq9+tTvCqlWrRrU/OyGAgLcENHDRketNCuzpy8ybqW6T1Xx269q0aSM6VgsJAT8JPP7447J8+fKosnzHHXekZaNxbd8TOH6b+Z1gpoqZ1XxW6wK31Q4NtLOD888/P6rrwU4IIOCuQFICF3eLwNEQQAABBBBAAAEEEEAg1QUIXFL9ClM+BBBAAAEEEEAAAQRSQIDAJQUuIkVAAAEEEEAAAQQQQCDVBQhcUv0KUz4EEEAAAQQQQAABBFJAgMAlBS4iRUAAAQQQQAABBBBAINUFCFxS/QpTPgQQQAABBBBAAAEEUkCAwCUFLiJFQAABBBBAAAEEEEAg1QUIXFL9ClM+BBBAAAEEEEAAAQRSQIDAJQUuIkVAAAEEEEAAAQQQQCDVBQhcUv0KUz4EEEAAAQQQQAABBFJAgMAlBS4iRUAAAQQQQAABBBBAINUFCFxS/QpTPgQQQAABBBBAAAEEUkCAwCUFLiJFQAABBBBAAAEEEEAg1QUIXFL9ClM+BBBAAAEEEEAAAQRSQIDAJQUuIkVAAAEEEEAAAQQQQCDVBQhcUv0KUz4EEEAAAQQQQAABBFJAgMAlBS4iRUAAAQQQQAABBBBAINUFCFxS/QpTPgQQQAABBBBAAAEEUkCAwCUFLiJFQAABBBBAAAEEEEAg1QUIXFL9ClM+BBBAAAEE4ihw8MBReW/A2izP0LBxKal2ZqEsP/PyyvffWSf79h7JlMXz6xSTOpeenGk9KxBAIDECBC6JceYsCCCAAAIIpKxAlWJTZdfOQ5nK9/EX9eTyhiUyrff6isZ158jCedszZfPl/mdLq/aVMq1nRXwE9u/fL4888ojceeedctVVV8XnJCl61FGjRsnMmTPl9ddfT6kSErik1OWkMAgggAACCCReoMklc2X+3G2ZTrxsUyMpVSZvpvVeX/FIq+9l+JB1mbI5/quL5ZIrimdaz4r4CAwbNkzuuusu6devnx3AxOcsqXfUw4cPS+3ateX333+XzZs3p1QBCVxS6nJSGAQQQAABBBIv8Hi7H+SDQcHVxUqUzCu/bG6U+My4cMY3eq+U555elulIyzdfLcVLnpRpPSvcEzhw4IAsX75cpk6dKt26dZOdO3cSuETIu3HjRlmyZIn9lmXixIlSsmRJApcI7dgMAQQQQAABBNJEoH+fVfJsx5+CSnvpFSXkk6/qBa3zy8LUiX9Ii+vnB2W3TNl8snQj1ZWCUOKw0KpVKxkyZEjQkXnjEsSR5cKqVaukSpUqQZ8RuARxsIAAAggggAACCIh8+dlmad5kXhBF6/anSu/+tYLW+WVh7ap9cn6V6UHZrd+wpHz0Rd2gdSy4L7Bw4UJZvXq1feDPPvtM3n77bd64RMC8d+9eUS+TWrduLXny5OGNiwFhigACCCCAAAIIqMCGdfvlnEpfBmH8u18tafvIqUHrfLNwTKRykSmyZ89hJ8vtHqksL/U7y1lmJv4CAwYMkAcffJDAJQrqcuXKibZ1oY1LFHjsggACCCCAAAKpLRDas5hfexQzV+maOrNl0fwdZlF6v1VLWj/o00DMKYW/Zghcor9eBC7R27EnAggkUWDOnDmyYMECycjIsHMRbqobZbVN8eLF5dZbb01iSSI79YoVK0QbJWoZTDkCyxQ4H8nnZcuWlaZNm0Z2crZCIEUFPvnkE1mzZk22P1f6szSwd3lZs+J4w/V/vLxBChU57Pwc6jZVq1aVK6+80vNKc+fOla6Pr5XF3xR28tr2iY1yWrX99nIkvzvMjrptrVq15JJLLjGrmEYoQOASIVQWmxG4ZIHCKgQQ8L5Aly5dpGfPnq5kVI/zzDPPuHKseB3ko48+kmbNmrl6+P79+0v79u1dPSYHQ8BPAk2aNAmqP59V3gvLE5JPrrE/Oia7ZKvckWkzrXP/8ccfy/XXX5/pMy+tePbZZ+WV7sukoLRxsrVNWshR2eks52Qmf/78tt8VV1yRk93SflsCl+i/AgQu0duxJwIIJFHAzcBFi/HOO+9Iu3btkliiE586HoFLrly5ZPjw4dK8efMTn5xPEUhRgUgClwLSzLrR//N3w2H5QXbI01lqFChQQKZMmSKXXXZZlp97YaUGLr26fy5F5Dk7O8es0myVljFlrVixYjJ9+nQ577zzYjpOOu1M4BL91SZwid6OPRFAIIkCgYGLPu0sUqSIHDtmtTzNJoV+pst79uyRI0eO2Hvkzp1bRo4c6fpbjWyyk+PVoYGLVnELLVPoQbP6PLTcefPmlU8//VSuvvrq0N1ZRiDlBQIDl3z58knBggUz/VxlHKotufb8+Ub2WN6pcqTAIMdFf550PA6TTj75ZJkxY4acc845ZpWnphq49Oz+jpws//kzX3mWypHC3bPNY1a/Q3Tj0HJr1dOvv/5azjjjjGyPxQfHBQhcjlvkdI7AJadibI8AAp4QCAxcKlWqFFXA8dtvv4kGBCZ40RuXSZMmScOGDT1RxsBMBAYuGmxojzTRJu0Xf/z48XL06FH7EIULF5YvvvhC6tSpE+0h2Q8BXwoEBi4XXHCB1K9fP1M59u7KL2MHN7DX12nwk9Q4b03QNj/88INMmzbNWXfKKafYN/GhY084GyRxRgOXHt17SAkZa+Uin9Q4d43UuTJ4nJpIs6dtDGfNmuVsruXV4EXLTzqxAIHLiX1O9CmBy4l0+AwBBDwr4EbgooXTRu8TJkxwnrLqmxut9qA3MV5KbgYuWq5ly5YF1e0vVaqUzJw5U2rWrOmlYpMXBOIqEEngohkY0f9qOXQwt1zdbL6Uq7QlU57mzZsns2fPdtZrY329qdc3EV5KGrh0797deuPymuSWalK34VKpXntt1FnU3xk6PolJ+qZJ3zjpmydS9gIELtnbhPuEwCWcEJ8jgIAnBdwKXLRwP/30k3z++edOOUuXLm0/OaxWrZqzLtkzbgcuWp7FixfLV1995RRN31zpE1OdkhBIB4FIA5fJIy6WzRuLya3tvpQChQ5mSaM37IsWLXI+0zYf+vNVtGhRZ12yZ0zgUlg6Wu9bGknj2+ZJmQpbY8qWtutZunSpcwxt46PrtM0PKWsBApesXSJZS+ASiRLbIICA5wTcDFy0cPrUUJ8emlS5cmX7Jr5ChQpmVVKn8QhctEDarfS3337rlE3fuOiT4pIlSzrrmEEgVQUiDVzmTDlb1q0oI80f+CJbCm33oQ9A9G2mSQ0aNJDJkyeL9r7lhWQClwLS3OpwoLU0v/9LyVcg60As0vxqlVNtJ6dvr03S3tW0lzVtf0hCAIHwAhnWL5DsW+mG358tEEDA4wJuBy5aXH3bMH/+fKfkOkaBBjPaED7ZKV6Bi5ZL27d8//33ThHr1q1r19nXti8kBFJZINLA5aeFp8naX8tI4+bHg/ysXPQmXtuPaTsyk2666SYZM2aMaAcgyU4mcMkrdaVoro5y16PHq7fFkjcdyVwDFW03aNI999wjQ4YMcca7MeuZIoBAZgECl8wmrEEgpQTiEbgo0NSpU+XHH390rHRwNV2nvQ0lM8UzcNHnPNopwfLly50iXnPNNXbbH+0IgIRAqgpEGrisX1XKfuNS96rjVaKyM9Gb+LFjx8qGDRucTVq3bi2DBw92lpM1YwKX3FJWSuZ7Rlq2X+VaVg4cOCCjR4+WzZs3O8d84oknpE+fPs4yMwggkLUAgUvWLqxFIGUE4hW46BNTHaH+119/daz05kZH2D7ppOOjZzsfJmgmnoGLFkF7VjOjiJsi3X777fLhhx+KjvdCQiAVBSINXLRnMX3jEtqjWHYmehM/atQo2bLleEP+p556Snr16pXdLglZbwKXDMmQskUekzuOj0Ppyvm1i3kt944dO5zj9ejRQ/T3NQkBBLIXIHDJ3oZPEEgJgXgFLoqjvYotWbLEcdIecrTHoDPPPNNZl+iZeAcu+tZFG9RqRwUmlSlTxm7/ou19SAikokCkgYuWfcumYlKy7PEb8hN56FsXfRCwdu3xHruqV69uV0XVnguTlUzgoucvX+Zyad7yQlezogGbVhnbuHGjc1ztpOCbb74R3t46JMwgkEmAwCUTCSsQSC2BeAQuevOu4zEEVhXTboL1hj7Zo0LHM3DRt0zagDiwqph2SqAWNWrUSK0vDqVBIEAgJ4FLwG4nnD148KCMGzdO1q9f72yn3QTr75Fkd48cGLhUrFhRbr31ViePsc7s27fPDlp+//1351D16tWzq6F6oZ2gkylmEPCgAIGLBy8KWULATQG3Axe9edcegX7++Wcnm+XLl7fbtyTzTYvJTLwCF30yrFXjVq5caU4lOpCcBi1eHEDPySQzCLgg4Hbgsn//fvvmfdOmTU7uLrroInvMpBIlSjjrkjUTr8BFq4jp76jAqnHao5p2VJDMN0zJcua8CORUgMAlp2Jsj4DPBNwMXLR9hzZOD2zXotWj9Ob9jDPO8IRMPAKXQ4cO2TcWgdVZtDtk7YzAK91AewKfTKSsgJuBy969e+2b98DG6ZdffrndVbBXxnKJR+Cya9cuuzOC7du3O98TddUOChjLxSFhBoETChC4nJCHDxHwv4BbgYu+cdCngmvWrHFQtC663rx7aSBGtwMXrYuudfADq7Oce+659lsnbdtCQiAdBNwKXHbv3m13eRx4864982l7j2T3SBh4Hd0OXLS8GqBo8GLSLbfcIsOHD6dNiwFhikAEAgQuESCxCQJ+FnAjcNG66HrzHjj2gFfqoodeGzcDF63OosejLnqoMsvpJuBG4KI9aOnN+86dOx2+G2+8UUaOHCn58uVz1nlhxs3ARauFabn1TZNJd911l7z33nsMPGlAmCIQoQCBS4RQbIaAXwViDVy8Xhc99Lq4FbhQFz1UluV0Fog1cNm6dat9864/Vya1aNFC3n//fU/evLsVuOhDD/2dpL9HTbr//vulf//+dJ9uQJgikAMBApccYLEpAn4UCAxctPFntWrVclSM1atXBzUk9Vpd9NDCBAYuOq5KtL2crVixQgKrs1AXPVSa5XQSCAxctMevnLbt0u7DtTctk9q0aSPvvPOOZ2/eAwOXwoULi1aLzWnS3he150V9Y20SA00aCaYIRCdA4BKdG3sh4BuBwMAl1kx7sS56aJkCA5fQz6Jdpi56tHLslyoCgYFLrGV69NFH5bXXXpOMjIxYDxW3/QMDF7dO0rVrV3nhhRfcOhzHQSAtBQhc0vKyU+h0EnArcPFqXfTQa+l24EJd9FBhltNRwK3A5ZlnnpGePXt6ntDtwOWll16Szp07e77cZBABrwsQuHj9CpE/BGIUGDJkiIwYMSKmo2j1sldeecWTddFDCzZ79mzp3r176OqolmvXri0vvviiZ6uzRFUodkIgCgG9kV+wYEEUex7fpVGjRtKxY8fjKzw8p21vPvzwQ1dyeNNNN8kDDzzgyrE4CALpLkDgku7fAMqPAAIIIIAAAggggIAPBAhcfHCRyCICCCCAAAIIIIAAAukuQOCS7t8Ayo8AAggggAACCCCAgA8ECFx8cJHIIgIIIIAAAggggAAC6S5A4JLu3wDKjwACCCCAAAIIIICADwQIXHxwkcgiAggggAACCCCAAALpLkDgku7fAMqPAAIIIIAAAggggIAPBAhcfHCRyCICCCCAAAIIIIAAAukuQOCS7t8Ayo8AAggggAACCCCAgA8ECFx8cJHIIgIIIIAAAggggAAC6S5A4JLu3wDKjwACCCCAAAIIIICADwQIXHxwkcgiAggggAACCCCAAALpLkDgku7fAMqPAAIIIIAAAggggIAPBAhcfHCRyCICCCCAAAIIIIAAAukuQOCS7t8Ayo8AAggggAACCCCAgA8ECFx8cJHIIgIIIIAAAggggAAC6S5A4JLu3wDKjwACCCCAAAIIIICADwQIXHxwkcgiAggggAACCCCAAALpLkDgku7fAMqPAAIIIIAAAggggIAPBAhcfHCRyCICCCCAAAIIIIAAAukuQOCS7t8Ayo8AAggggAACCCCAgA8ECFx8cJHIIgIIIIAAAggggAAC6S5A4JLu3wDKjwACCCCAAAIIIICADwQIXHxwkcgiAggggAACCCCAAALpLpCSgcvmzZvluuuuk4yMDPufuci6rCm7aVafPf7449KsWTN7P/5DAIE/BYYPHy59+vQJ+hkzP1e6hZk308B1gfPm8xo1asiAAQMkd+7c+jEJAQRiFJg7d6489thjEf+Mmp9FPa2Z12muXLnk1VdflfPPPz/GHMV39507d8rVV18dtryh5TO5MmU2n+fJk0f69+8v+ruJhAAC3hFIycBlw4YNUr58eVeU8+XLJxMnTpSrrrrKleNxEARSQeC1114TDerdTK1atZLBgwc7N01uHptjIZBuAp999pk0adLElWKXKVNGvv76a6lataorx4vHQbZu3SolS5Z09dCnnnqqXe6KFSu6elwOhgAC0QsQuERgV6RIEfnyyy/lwgsvjGBrNkEg9QXiEbioWqdOnaR3796pD0gJEYizgJuBi2b1tNNOs2/i3Xoo6Hbx4xG4aB7POussmTlzppQoUcLtLHM8BBCIQiAtApcqVapI3rx5s+Q5duxYlusPHjwoq1atcj4rXbq0zJo1S6pXr+6sYwaBdBUIDFz0Z0t/xk6Usvs5033WrVsne/fudXZ/6aWXpHPnzs4yMwggkHOB0MDlRFWe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DhxoDzhptmGKAALJE0iLwCUWXhrixaLHvqkqEBq4xFpOHQ/pk08+kYYNG8Z6KPZHAAFLIDRwiQWlVatW8u6774pW4/RqCg1c3MjnY489Jn379s3Rg083zssxEEAgewECl+xthIZ4J8Dho7QWcDNw0fGQJk6cKJdccklam1J4BNwUcCtwefjhh6Vfv36ev3l3O3Dp0qWL9OjRw81LwrEQQMAFgZQMXLRB4ccffxwTT65cuUQb49EQLyZGdk5RgV9++cXucc+N4ulYSHQt7oYkx0DguICObD99+vTjK6KY0wb4TZs2jWLPxO+i1U7Hjh3ryon1YUqTJk1cORYHQQABdwVSMnBxl4ijIYAAAggggAACCCCAQLIFCFySfQU4PwIIIIAAAggggAACCIQVIHAJS8QGCCCAAAIIIIAAAgggkGwBApdkXwHOjwACCCCAAAIIIIAAAmEFCFzCErEBAggggAACCCCAAAIIJFuAwCXZV4DzI4AAAggggAACCCCAQFgBApewRGyAAAIIIIAAAggggAACyRYgcEn2FeD8CCCAAAIIIIAAAgggEFaAwCUsERsggAACCCCAAAIIIIBAsgUIXJJ9BTg/AggggAACCCCAAAIIhBUgcAlLxAYIIIAAAggggAACCCCQbAECl2RfAc6PAAIIIIAAAggggAACYQUIXMISsQECCCCAAAIIIIAAAggkW4DAJdlXgPMjgAACCCCAAAIIIIBAWAECl7BEbIAAAggggAACCCCAAALJFiBwSfYV4PwIIIAAAggggAACCCAQVoDAJSwRGyCAAAIIIIAAAggggECyBQhckn0FOD8CCCCAAAIIIIAAAgiEFSBwCUvEBggggAACCCCAAAIIIJBsAQKXZF8Bzo8AAggggAACCCCAAAJhBQhcwhKxAQIIIIAAAggggAACCCRbgMAl2VeA8yOAAAIIIIAAAggggEBYAQKXsERsgAACCCCAAAIIIIAAAskWIHBJ9hXg/AgggAACCCCAAAIIIBBWgMAlLBEbIIAAAggggAACCCCAQLIFCFySfQU4PwIIIIAAAggggAACCIQVIHAJS8QGCCCAAAIIIIAAAgggkGwBApdkXwHOjwACCCCAAAIIIIAAAmEFCFzCErEBAggggAACCCCAAAIIJFuAwCXZV4DzI4AAAggggAACCCCAQFgBApewRGyAAAIIIIAAAggggAACyRYgcEn2FeD8CCCAAAIIIIAAAgggEFaAwCUsERsggAACCCCAAAIIIIBAsgUIXJJ9BTg/AggggAACCCCAAAIIhBUgcAlLxAYIIIAAAggggAACCCCQbAECl2RfAc6PAAIIIIAAAggggAACYQUIXMISsQECCCCAAAIIIIAAAggkW4DAJdlXgPMjgAACCCCAAAIIIIBAWAECl7BEbIAAAggggAACCCCAAALJFiBwSfYV4PwIIIAAAggggAACCCAQVoDAJSwRGyCAAAIIIIAAAggggECyBQhckn0FOD8CCCCAAAIIIIAAAgiEFSBwCUvEBggggAACCCCAAAIIIJBsAQKXZF8Bzo8AAggggAACCCCAAAJhBQhcwhKxAQIIIIAAAggggAACCCRbgMAl2VeA8yOAAAIIIIAAAggggEBYgf8H9H/SxaYCxioAAAAASUVORK5CYII=" } }, "cell_type": "markdown", "id": "c3795661-e308-44e6-9b0f-3f0396541250", "metadata": {}, "source": [ "In `pairtools` we implement an approach to resolving haplotypes from Erceg et al. The outline of haplotype-resolved parsing of pairs:\n", "\n", "1. [Create the reference genome](#Create-the-reference-genome): create the concatenated reference genomes from two haplotypes. \n", "\n", " Usually the SNVs are known and can be obtained in .vsf format. We will incorporate the SNVs by [bcftools](https://samtools.github.io/bcftools/bcftools.html) into the reference and create updated fasta files with haplotype-corrected sequences.\n", " For each homologue we will add the suffixes that identify the type of homologue (`_hap1` or `_hap2`).\n", "\n", "2. Map the Hi-C data to the concatenated reference and parse allowing multimappers (mapq 0). \n", "\n", " We will also need the mapper to report two suboptimal alignments (aka the second and the third hit).\n", " When the Hi-C read is mapped to some location in the genome, it will have the suffix of the homologue reported as part of chromosome name.\n", " However, the true resolved pairs are not yet known at this step. \n", " \n", " See sections:\n", " \n", " (i) [Download data](#Download-data)\n", " \n", " (ii) [Map data with bwa mem to diploid genome](#Map-data-with-bwa-mem-to-diploid-genome)\n", " \n", " (iii) [pairtools parse](#pairtools-parse)\n", " \n", "\n", "3. [pairtools phase](#pairtools-phase): phase the pairs based on the reported suboptimal alignments. \n", "\n", " By checking the scores of two suboptimal alignments, we will distinguish the true multi-mappers from unresolved pairs (i.e. cases when the read aligns to the location with no distinguishing SNV).\n", " Phasing procedure will remove the haplotype suffixes from chromosome names and add extra fields to the .pairs file with:\n", " \n", " '.' (non-resolved)\n", " \n", " '0' (first haplotype) or \n", " \n", " '1' (second haplotype). \n", " \n", " \n", " \n", " Phasing schema: \n", " \n", "![image.png](attachment:62e74fba-c1c1-44b5-a3e2-3699c3cac7ce.png)\n", "\n", "\n", "4. Post-procesing. Do sorting, dedup and stats, as usual. \n", "\n", " See sections:\n", " \n", " (i) [pairtools dedup](#pairtools-dedup)\n", " \n", " (ii) [Stats](#Stats)" ] }, { "cell_type": "markdown", "id": "9dc8a020-7c4b-471d-9dfd-a5e346f10a27", "metadata": {}, "source": [ "[1] Erceg, J., AlHaj Abed, J., Goloborodko, A., Lajoie, B. R., Fudenberg, G., Abdennur, N., Imakaev, M., McCole, R. B., Nguyen, S. C., Saylor, W., Joyce, E. F., Senaratne, T. N., Hannan, M. A., Nir, G., Dekker, J., Mirny, L. A., & Wu, C. T. (2019). The genome-wide multi-layered architecture of chromosome pairing in early Drosophila embryos. Nature communications, 10(1), 4486. https://doi.org/10.1038/s41467-019-12211-8\n", "\n", "[2] Collombet, S., Ranisavljevic, N., Nagano, T., Varnai, C., Shisode, T., Leung, W., Piolot, T., Galupa, R., Borensztein, M., Servant, N., Fraser, P., Ancelin, K., & Heard, E. (2020). Parental-to-embryo switch of chromosome organization in early embryogenesis. Nature, 580(7801), 142–146. https://doi.org/10.1038/s41586-020-2125-z\n", "\n", "[3] Tan, L., Xing, D., Chang, C. H., Li, H., & Xie, X. S. (2018). Three-dimensional genome structures of single diploid human cells. Science (New York, N.Y.), 361(6405), 924–928. https://doi.org/10.1126/science.aat5641\n", "\n", "[4] Duan, H., Jones, A. W., Hewitt, T., Mackenzie, A., Hu, Y., Sharp, A., Lewis, D., Mago, R., Upadhyaya, N. M., Rathjen, J. P., Stone, E. A., Schwessinger, B., Figueroa, M., Dodds, P. N., Periyannan, S., & Sperschneider, J. (2022). Physical separation of haplotypes in dikaryons allows benchmarking of phasing accuracy in Nanopore and HiFi assemblies with Hi-C data. Genome biology, 23(1), 84. https://doi.org/10.1186/s13059-022-02658-2\n" ] }, { "cell_type": "markdown", "id": "a0b4c550-8168-4780-82e0-1e18493135af", "metadata": {}, "source": [ "We will test on a sample from Collombet et al. 2019 [2], example of mouse single-cell Hi-C on embryos obtained from highly heterozygous parents. We will take some cell from the dataset, GSM3691125_2CSE_70. \n", "Note that becuase the procedure is not strictly Hi-C, the properties of this dataset may differ from what you may obtain on bulk data. " ] }, { "cell_type": "markdown", "id": "5ab026af-fe25-4a70-82ef-52af6fb25371", "metadata": {}, "source": [ "## Create the reference genome\n", "\n", "For phasing, map the data to the concatenated genome with two haplotypes. \n", "Obtaining such genome is not a simple task. You will need a reference genome, and one or two lists of mutations to instroduce to the reference.\n", "\n", "#### Download reference genome" ] }, { "cell_type": "code", "execution_count": null, "id": "9ec0743f-a299-43f0-b568-7e963ed95df8", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "! wget ftp://ftp-mouse.sanger.ac.uk/ref/GRCm38_68.fa" ] }, { "cell_type": "markdown", "id": "7683d63a-bc2f-4c49-8371-fd57f4111072", "metadata": {}, "source": [ "#### Download .vcf file with variants" ] }, { "cell_type": "code", "execution_count": null, "id": "4a347a3b-2ee7-4824-a209-8377edddf640", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "! wget ftp://ftp-mouse.sanger.ac.uk/current_snps/strain_specific_vcfs/CAST_EiJ.mgp.v5.snps.dbSNP142.vcf.gz" ] }, { "cell_type": "markdown", "id": "88363fb6-c233-4a07-a208-a5e5a2679038", "metadata": {}, "source": [ "#### Index the variants" ] }, { "cell_type": "code", "execution_count": null, "id": "84cebce3-29c6-42df-98bf-5388a51fb268", "metadata": {}, "outputs": [], "source": [ "! bcftools index CAST_EiJ.mgp.v5.snps.dbSNP142.vcf.gz" ] }, { "cell_type": "markdown", "id": "2dd599a0-64f9-4c8b-b78f-8eabf49c052e", "metadata": {}, "source": [ "#### Introduce the variants into the genome\n", "\n", "Note that you may select the variants that are only SNPs but not SNVs (deletions/insertions) by using `--include` parameter of `bcftools consensus` (e.g. `--include '(STRLEN(REF)=1) & (STRLEN(ALT[0])=1)'`).\n", "This will make sure that the genomic coorditates correspond between the haplotypes. \n", "Correspondence of coordinates is not a requirement, but might be important for downstream analysis. " ] }, { "cell_type": "code", "execution_count": null, "id": "848c9fe5-a632-4139-ba56-60871d8d1eb4", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "bcftools consensus --fasta-ref GRCm38_68.fa.gz \\\n", " --haplotype 1 CAST_EiJ.mgp.v5.snps.dbSNP142.vcf.gz |sed '/^>/ s/$/_hap1/' | bgzip -c > GRCm38_EiJ_snpsonly_hap1.fa.gz\n", "\n", "bcftools consensus --fasta-ref GRCm38_68.fa.gz \\\n", " --haplotype 2 CAST_EiJ.mgp.v5.snps.dbSNP142.vcf.gz |sed '/^>/ s/$/_hap2/' | bgzip -c > GRCm38_EiJ_snpsonly_hap2.fa.gz\n" ] }, { "cell_type": "markdown", "id": "dfd7c4cb-31dd-43df-8510-95fd0ff9f78f", "metadata": {}, "source": [ "#### Create the index of concatenated haplotypes" ] }, { "cell_type": "markdown", "id": "99d28f6f-b754-4a95-95d5-9e5e51d14571", "metadata": {}, "source": [ "Concatenate the genomes and index them together. Note that [bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) produces [very similar results to bwa mem](https://github.com/open2c/pairtools/discussions/118), while being [x2-3 times faster](https://github.com/bwa-mem2/bwa-mem2#performance). We highly recommend to use it instead of bwa!" ] }, { "cell_type": "code", "execution_count": null, "id": "92ff8a4f-2115-4131-8c4a-cbd040dcdffb", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "cat GRCm38_EiJ_snpsonly_hap1.fa.gz GRCm38_EiJ_snpsonly_hap2.fa.gz > GRCm38_EiJ_snpsonly.fa.gz\n", "bwa index GRCm38_EiJ_snpsonly.fa.gz" ] }, { "cell_type": "markdown", "id": "22017c7e-71af-4ef3-8237-364402e896fb", "metadata": {}, "source": [ "Generate chromosome sizes file: " ] }, { "cell_type": "code", "execution_count": null, "id": "69489018-edde-4aa0-b7ac-7c7b4351764c", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "faidx GRCm38_EiJ_snpsonly.fa.gz -i chromsizes > GRCm38_EiJ_snpsonly.chromsizes" ] }, { "cell_type": "markdown", "id": "bd264406-be74-4060-9798-e18040c44889", "metadata": { "tags": [] }, "source": [ "## Download data\n", "\n", "Uncomment the `--minSpotId` and `--maxSpotId` if you want to run the small test instead of full run." ] }, { "cell_type": "code", "execution_count": null, "id": "f4e310c0-2d16-4e7d-87d7-44feec8e6256", "metadata": {}, "outputs": [], "source": [ "! fastq-dump SRR8811373 --gzip --split-spot --split-3 # --minSpotId 0 --maxSpotId 1000000" ] }, { "cell_type": "code", "execution_count": null, "id": "571e94fb-3dec-4042-9e21-6c39802ed8df", "metadata": {}, "outputs": [], "source": [ "! ls SRR8811373*.fastq.gz" ] }, { "cell_type": "markdown", "id": "2ce00436-bbc7-4241-a41b-12c99c708180", "metadata": { "tags": [] }, "source": [ "## Map data with bwa mem to diploid genome\n", "\n", "Note that you may use [bwa mem2](https://github.com/bwa-mem2/bwa-mem2), which is x2 times faster. \n", "It [proved to produce](https://github.com/open2c/pairtools/discussions/118) results very similar to bwa mem.\n", "\n", "There are two modes to work with phasing. \n", "\n", "1. Github mode with XB bwa tag. This is the most precise algorithm that operates based on alignment scores of optimal alignment (best hit), and two suboptimal ones.\n", "\n", " Download and install [bwa](https://github.com/lh3/bwa) from GitHub.\n", " Map with:\n", " ```bash\n", "./bwa/bwa mem -SPu -t 5 mm10_EiJ_snpsonly.fa.gz test.1.fastq.gz test.2.fastq.gz | samtools view -@ 8 -b > mapped.XB.bam\n", " ```\n", "\n", "\n", "2. Regular mode with XA bwa tag. \n", "\n", " This is simplified version that operates on number of mismatches for the suboptimal alignments.\n", "\n", " ```bash\n", "bwa mem -SP -t 5 mm10_EiJ_snpsonly.fa.gz est.1.fastq.gz test.2.fastq.gz | samtools view -@ 8 -b > mapped.XA.bam\n", " ```\n", "\n", "\n", "We will try the second option for the simplicity: " ] }, { "cell_type": "code", "execution_count": null, "id": "12f8a13d-fba6-45f7-8112-291fb883d7d0", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "bwa mem -SP -t 5 GRCm38_EiJ_snpsonly.fa.gz SRR8811373_1.fastq.gz SRR8811373_2.fastq.gz \\\n", " | samtools view -@ 8 -b > mapped.XA.bam" ] }, { "cell_type": "markdown", "id": "3bce4691-6268-4885-b8e0-1933a561d4b5", "metadata": {}, "source": [ "## pairtools parse\n", "\n", "For phasing, we need additional tags and no filtering by mapq.\n", "\n", "`--min-mapq` is 1 by default, which removes all multiply mapped sequences. However, we need this information for phasing to distinguish true multiply mapped pairs from pairs mapped to both haplotypes:" ] }, { "cell_type": "code", "execution_count": null, "id": "efc63459-aa2f-44f5-804e-a2346d2b7820", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools parse --add-columns XA,NM,AS,XS --min-mapq 0 --drop-sam --walks-policy all \\\n", " -c GRCm38_EiJ_snpsonly.chromsizes mapped.XA.bam -o unphased.XA.pairs.gz" ] }, { "cell_type": "markdown", "id": "c90ff16b-bb5b-4ceb-8fe3-feeae8ada021", "metadata": {}, "source": [ "## pairtools phase\n", "\n", "Phasing will remove the tags \"\\_1\" and \"\\_2\" from chromosome names and add a separate field for the phase:" ] }, { "cell_type": "code", "execution_count": null, "id": "6c8deaee-cb68-4b53-b306-bf223523ab45", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools phase --phase-suffixes _hap1 _hap2 --tag-mode XA --clean-output unphased.XA.pairs.gz -o phased.XA.pairs.gz" ] }, { "cell_type": "markdown", "id": "c17443ec-b647-4818-aced-bdc686109396", "metadata": {}, "source": [ "## pairtools dedup\n", "\n", "Sort prior to dedup: " ] }, { "cell_type": "code", "execution_count": null, "id": "6aabbc13-a8d4-43f2-b388-62e7b3b576ab", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools sort phased.XA.pairs.gz --nproc 10 -o phased.sorted.XA.pairs.gz" ] }, { "cell_type": "markdown", "id": "84d0442c-ba94-4571-8c89-44067acecb47", "metadata": {}, "source": [ "Deduplication now should take additional columns with phases into account: " ] }, { "cell_type": "code", "execution_count": null, "id": "9fd3b266-4faa-4fc0-974d-b0ca9bbeb961", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools dedup --mark-dups --extra-col-pair phase1 phase2 \\\n", " --output-dups - --output-unmapped - --output-stats phased.XA.dedup.stats \\\n", " -o phased.sorted.XA.nodup.pairs.gz phased.sorted.XA.pairs.gz" ] }, { "cell_type": "markdown", "id": "d7ae3575-aef8-4a8b-9707-b37627653ba9", "metadata": {}, "source": [ "Dedup might generate warning that phase columns now contain mixed data types ('.' alongside with 0 and 1). This warning is inherited from reading by reading the pairs file by pandas." ] }, { "cell_type": "markdown", "id": "89f9d829-3f79-49b4-b74d-8bca732b8a44", "metadata": {}, "source": [ "## Stats\n", "\n", "First, filter different types of reads:" ] }, { "cell_type": "code", "execution_count": null, "id": "727a9d2b-5977-4763-81e5-64589c067688", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools select '(phase1==\"0\") and (phase2==\"0\")' phased.sorted.XA.nodup.pairs.gz -o phased.XA.phase0.pairs.gz\n", "pairtools select '(phase1==\"1\") and (phase2==\"1\")' phased.sorted.XA.nodup.pairs.gz -o phased.XA.phase1.pairs.gz\n", "pairtools select '(phase1==\".\") or (phase2==\".\")' phased.sorted.XA.nodup.pairs.gz -o phased.XA.unphased.pairs.gz\n", "pairtools select '(phase1!=phase2) and (phase1!=\".\") and (phase2!=\".\")' phased.sorted.XA.nodup.pairs.gz \\\n", " -o phased.XA.trans-phase.pairs.gz" ] }, { "cell_type": "markdown", "id": "916a5ca1-e549-4501-82d2-8a6e0645b864", "metadata": {}, "source": [ "Calculate stats for these different types:" ] }, { "cell_type": "code", "execution_count": null, "id": "1172f899-41d6-4ca2-ab21-a283340011f8", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools stats phased.XA.phase0.pairs.gz -o phased.XA.phase0.stats\n", "pairtools stats phased.XA.phase1.pairs.gz -o phased.XA.phase1.stats\n", "pairtools stats phased.XA.unphased.pairs.gz -o phased.XA.unphased.stats\n", "pairtools stats phased.XA.trans-phase.pairs.gz -o phased.XA.trans-phase.stats" ] }, { "cell_type": "markdown", "id": "25fdebb4-24ca-4280-950e-baa9cc92d28e", "metadata": {}, "source": [ "Visualize with multiQC:" ] }, { "cell_type": "code", "execution_count": null, "id": "9039184f-65a1-43bd-9495-85266fc1fed6", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "multiqc phased.XA.*phase*.stats -o multiqc_report_phasing" ] }, { "cell_type": "code", "execution_count": 1, "id": "ed403d73-7b5f-432b-9e91-e8c70906d31b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import IFrame\n", "\n", "IFrame(src='./multiqc_report_phasing/multiqc_report.html', width=1200, height=700)" ] }, { "cell_type": "code", "execution_count": null, "id": "20e713fe-c962-4d6f-af73-17c21b987a5a", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "test", "language": "python", "name": "test" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 } pairtools-1.0.3/doc/examples/pairtools_restrict_walkthrough.ipynb000066400000000000000000010367751452673171500255650ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "a26ff7fa-0774-497c-8df8-4686845bf3b6", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "882425fb-e34a-41c7-8103-270da19ecec2", "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.ticker \n", "import matplotlib.gridspec\n", "import seaborn as sns\n", "\n", "%matplotlib inline\n", "plt.style.use('seaborn-poster')\n", "\n", "import pandas as pd\n", "import pairtools\n", "import bioframe" ] }, { "cell_type": "markdown", "id": "66194c2b-8c1b-4e21-80ef-1d2bf069199c", "metadata": {}, "source": [ "# Pairtools: restriction walkthrough\n", "\n", "The common approach to analyse Hi-C data is based to analyse the contacts of the restriction fragments. It is used in *hiclib*, Juicer, HiC-Pro. \n", "\n", "Throughout this notebook, we will work with one of [Rao et al. 2014 datasets for IMR90 cells](https://data.4dnucleome.org/experiment-set-replicates/4DNES1ZEJNRU/) [1]. \n", "\n", "\n", "[1] Rao, S. S., Huntley, M. H., Durand, N. C., Stamenova, E. K., Bochkov, I. D., Robinson, J. T., Sanborn, A. L., Machol, I., Omer, A. D., Lander, E. S., & Aiden, E. L. (2014). A 3D map of the human genome at kilobase resolution reveals principles of chromatin looping. Cell, 159(7), 1665–1680. https://doi.org/10.1016/j.cell.2014.11.021" ] }, { "cell_type": "markdown", "id": "8a77207f-d444-4d5c-ab6c-1f2a1cf4c7b2", "metadata": {}, "source": [ "### Download the data from 4DN portal\n", "\n", "To download the data from 4DN, you may need to [register, get key and secret and write a spceialized curl command for your user](https://data.4dnucleome.org/help/user-guide/downloading-files): " ] }, { "cell_type": "code", "execution_count": 61, "id": "a3d3eafc-5c28-40d4-be2a-8c4ba23e9809", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 330 100 330 0 0 931 0 --:--:-- --:--:-- --:--:-- 932\n", "100 3395M 100 3395M 0 0 29.7M 0 0:01:54 0:01:54 --:--:-- 33.1M 0:01:48 0:00:12 0:01:36 32.8M\n" ] } ], "source": [ "!curl -O -L --user RG6CSRMC:xlii3stnkphfygmu https://data.4dnucleome.org/files-processed/4DNFIW2BKSNF/@@download/4DNFIW2BKSNF.pairs.gz" ] }, { "cell_type": "code", "execution_count": null, "id": "22d0732a-9d6a-4957-8081-5cad5b3abf09", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "# Get total number of contacts to assess how many reads you can read in the future:\n", "pairtools stats 4DNFIW2BKSNF.pairs.gz | head -n 1\n", "# This will produce around 173 M pairs" ] }, { "cell_type": "code", "execution_count": null, "id": "ff187814-015c-4f6a-b0e8-082161dfcef7", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "# Sample the fraction of pairs that will produce ~ 1 M of pairs:\n", "pairtools sample 0.007 4DNFIW2BKSNF.pairs.gz -o 4DNFIW2BKSNF.pairs.sampled.gz" ] }, { "cell_type": "markdown", "id": "e8a51837-c1a9-4c83-a140-8be9f8cbbbed", "metadata": {}, "source": [ "#### Annotate restriction fragments" ] }, { "cell_type": "code", "execution_count": null, "id": "61b32154-a8ec-48d1-9370-eaf6bc357e08", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "# Digest the genome into restriction fragments:\n", "cooler digest ../tests_chromap/hg38/hg38.fa.sizes ../tests_chromap/hg38/hg38.fa MboI > hg38/hg38.MboI.restricted.bed" ] }, { "cell_type": "code", "execution_count": null, "id": "e0699dee-a95f-4114-82c5-9758c74b5d27", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "# Annotate restriction fragments in the sampled file: \n", "pairtools restrict -f hg38/hg38.MboI.restricted.bed 4DNFIW2BKSNF.pairs.sampled.gz -o 4DNFIW2BKSNF.pairs.sampled.restricted.gz" ] }, { "cell_type": "markdown", "id": "34c594fe-41df-4f42-a25d-7c050f020fb2", "metadata": {}, "source": [ "#### Read the pairs and analyse them as dataframe" ] }, { "cell_type": "code", "execution_count": 3, "id": "309d3c54-7b2d-4a5e-a750-87eb0b6914d9", "metadata": {}, "outputs": [], "source": [ "from pairtools.lib import headerops, fileio" ] }, { "cell_type": "code", "execution_count": 4, "id": "40daf717-6ffd-4c27-8b68-d553d458a713", "metadata": {}, "outputs": [], "source": [ "pairs_file = '4DNFIW2BKSNF.pairs.sampled.restricted.gz'" ] }, { "cell_type": "code", "execution_count": 5, "id": "6d363f7a-6053-488e-ad59-9df14260a7f6", "metadata": {}, "outputs": [], "source": [ "pairs_stream = fileio.auto_open(pairs_file, 'r')\n", "header, pairs_stream = headerops.get_header(pairs_stream)\n", "columns = headerops.get_colnames(header)" ] }, { "cell_type": "code", "execution_count": 6, "id": "deb04397-579b-4305-9dec-4f58e61e7ad4", "metadata": {}, "outputs": [], "source": [ "df = pd.read_table(pairs_stream, comment=\"#\", header=None)\n", "df.columns = columns" ] }, { "cell_type": "code", "execution_count": null, "id": "7688d530-4860-40e9-b865-affb7c35ccf1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "44d60718-dd56-4113-a409-57e5c1b882c0", "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'dist_rfrag1_left'] = df.pos1 - df.rfrag_start1\n", "df.loc[:, 'dist_rfrag1_right'] = df.rfrag_end1 - df.pos1\n", "\n", "df.loc[:, 'dist_rfrag2_left'] = df.pos2 - df.rfrag_start2\n", "df.loc[:, 'dist_rfrag2_right'] = df.rfrag_end2 - df.pos2" ] }, { "cell_type": "markdown", "id": "330e034a-e4f2-4deb-ab2c-9103e9083fa2", "metadata": {}, "source": [ "Many of the 5'-ends of reads are mapped to the restriction sites: " ] }, { "cell_type": "code", "execution_count": 8, "id": "1a7ef073-082b-4aa6-972f-85ada84be4d4", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5IAAAJyCAYAAAC2Qv8kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAB+DElEQVR4nOzdeZyP9f7/8efLzJjBWIYhFMYSkqJSlpQ9a9QpJSmUflrOOVKnlUIUvu2b6nSKog4pR7ajVJbSKOqkUiRZqiNLI9liZrx/f3yWM5/PfGbmc82Ox/12+9yY9/V+X9f7el/b5/V5X9f7MuecAAAAAACIVpmSrgAAAAAA4NhCIAkAAAAA8IRAEgAAAADgCYEkAAAAAMATAkkAAAAAgCcEkgAAAAAAT2JLugIniuTkZJeSklLS1QAAAABwnPrss892O+eqF8eyCCSLSUpKitasWVPS1QAAAABwnDKzrcW1LG5tBQAAAAB4QiAJAAAAAPCEQBIAAAAA4AmBJAAAAADAEwJJAAAAAIAnjNqKY87Ro0d15MgRHT16tKSrAgAAABSpMmXKqGzZsipTpnT1AZau2gB5SE9P186dO5Wenl7SVQEAAACKXGn9/kuPJI4ZR48e1a+//qqTTjpJZlbS1QEAAACKRWJionbs2KEaNWqUmp7J0lELIApHjhxRhQoVCCIBAABwQjEzVahQoVT1ShJI4phx9OhRxcTElHQ1AAAAgGIXExOjzMzMkq5GEIEkAAAAAMATAkkAAAAAgCcEkgAAAAAATxi1FceF1z/ZVqLLH9i6br7KTZs2TUOHDg3+Xb58eVWvXl1nnXWWrrrqKl1++eUhI3Nt2bJF9evX19SpUzVkyJColrFs2TItW7ZM999/f6kZ5Su/UlNTdeutt+rrr7/WwYMH9Z///EctW7Ys6Wpl88QTT6hu3br605/+FJI+duxYjRs3Tunp6YqNLbrTb04DUmVtr8C+tHTpUnXs2LHI6lJQgbotW7asROsRqEOnTp3ybLNp06bp6NGjuu666wpt2XPnztUPP/yg2267LWKdlixZoq5duxba8k4UObVraXE8nb8LQ6RjMKfzLUqX/Hx/KQlDhgzRsmXLtGXLlpKuyjGBsxJQCsyePVupqalatGiRxo8fr/j4eF111VW66KKLdOjQoWC+WrVqKTU1Vb1794563suWLdO4ceN09OjRoqh6sbr++uuVkZGh+fPnKzU1VY0bNy7pKkX0xBNPaM6cOSVahyFDhig1NTXkU1rb63gzbdo0vfzyy4U6z7lz5+qxxx4r1Hmi9Lfr8XT+Lgxnn322UlNTdfbZZwfTSsP5FjhR0SMJlAItW7ZUo0aNgn9fc8016t+/v/r3768777xTTz/9tCQpPj5ebdq0KalqlqijR49qw4YNGjVqlDp37pxr3sOHDys+Pr6YalY6nXzyyUW2r9C+KCmZmZlyzhVpj/6xKnCnw7H4iqxozymVKlUqVdfAjh07KiUlRdOmTSvpqhzXuOaUXvRIAqXUZZddpn79+unFF1/UwYMHJfluDTGzkIvW6tWr1a1bN1WrVk3ly5dXgwYNdPPNN0v6362UkhQXFyczC/mSMWbMGJ199tmqXLmykpOT1blzZ61atSqkHsuWLZOZad68efrzn/+s5ORkVa9eXYMGDdJvv/0WkjcjI0OTJ09Ws2bNlJCQoOrVq6tHjx5av359MM/u3bt100036eSTT1Z8fLyaNm2qv//977m2xbRp0xQTE6OjR49q/PjxMjOlpKRI8vW8nXLKKUpNTVW7du1Urlw53XnnnZKkDRs26NJLL1WVKlVUrlw5tWnTRosXLw6Z99ixY2VmWr9+vbp3764KFSqobt26mjp1qiRp+vTpatq0qRITE9WpUydt2rQp17qmpKRo69ateu2114LtHX4bz+bNm9W7d28lJiaqXr16euCBB7L1OOSnnYpCbu0bTR137dql4cOHq3Hjxipfvrzq1KmjgQMH6ueff862rJkzZ6pp06aKj4/X6aefrn/9619R1/PgwYO66667VL9+fZUtW1b169fXgw8+GNKuXvblXbt2aeDAgapUqZKqVKmia6+9NlueSDp27Kjly5dr5cqVwe2f9TbYTz/9VF27dlViYqIqVKigLl266NNPP811nkOGDNErr7yin3/+OTjPwP6fdf2jOT4nTpwYbOPatWvr9ttv1x9//JHnepmZRo8eraeeekr169dXxYoV1aFDB61bty5b3jlz5qhNmzYqX768qlSpov79+2vbttDHD2bOnKnOnTurevXqSkxM1FlnnaVXXnkl4nJHjRqlSZMmBbftV199JUlavny5unTpoooVK6pChQrq3r27vv7665Dy77zzjtq1a6fKlSsrMTFRTZo00QMPPBB1u2YV2H/Cb7OeNm2azCzkVriUlBQNGjRIL774oho1aqSEhASdffbZWrp0aUjZ/J6/A9eCKVOm6M4771Tt2rUVHx8f3OaFvQ1Gjx6tRx99VPXq1VOFChXUu3dv7dy5Uzt37tQVV1yhypUrq06dOpo8eXKO7RfejnPmzNENN9yg6tWr66STTpIkfffdd7r00ktVo0YNJSQkqG7duurfv78yMjIiboO8zrdr165V3759lZSUpHLlyun888/Xhx9+mGcdi1rHjh3Vvn17LV68WC1btlS5cuV01lln6ZNPPlFGRobuvfde1apVS1WrVtWQIUN04MCBkPJert1vvfWWhgwZoqSkJFWqVElXX321fv3115C8gePswQcf1CmnnKJy5crpwgsv1BdffJGt7tHsWwcPHtTNN9+satWqKTExUX379tVPP/0UVdsErslff/21unfvrsTERF1xxRXB+eZ1nv/jjz80cuRINW/eXImJiapZs6YuvvjikO8hAe+//77OPvtsJSQkqGHDhnrhhRey5cnIyNB9992nhg0bKiEhQcnJyWrfvr0++uijqNbneMdPekAp1qtXL82dO1dr1qzRhRdemG36/v371b17d5133nmaNm2aKlasqC1btujjjz+WJA0bNkw//fSTXnrpJX300UfZ3sP5888/a+TIkTrllFN04MABzZgxQxdeeKHWrFmjM888MyTviBEj1KdPH73++uvasGGD7rzzTsXExIR88RgwYIDmzp2rW2+9VV27dtUff/yhFStWaPv27WratKl+//13nX/++Tp06JDGjh2r+vXr65133tFNN92kw4cP6y9/+UvEdujdu7c++ugjtW/fXtdff72GDRsW8uvk3r17NWDAAP3tb3/TQw89pHLlyum///2v2rdvr4oVK+qZZ55R5cqV9eyzz6p3795asGCBevbsGbKM/v3764YbbtDf/vY3TZkyRdddd502btyoZcuWadKkSUpPT9eIESM0cOBAffLJJzlus3/961/q1auXWrRoobFjx0qSqlevHpLn0ksv1dChQzVy5EjNnz9fY8aMUZ06dYLPy+a3nbJ67rnn9PDDDysmJkZt2rTRuHHjdMEFFwSnp6SkyDmX53xyat9o65iWlqaEhARNnDhR1atX13//+189+uijOv/887V+/XolJCRIkt577z0NHDhQvXv31qOPPqpdu3ZpxIgRSk9PV5MmTXKtX0ZGhrp3765vvvlG9913n8444wytWrVK48ePV1pamh599NGQ/NHsy3/605+0du1aPfTQQzr11FM1a9asqNp9ypQpGjRokDIzM4NfSipVqiRJ+vLLL9WhQwc1a9YsGHxMmjRJHTp00KpVq9SiRYuI87zvvvu0a9curV69WvPmzZOkbL/OR7NOgwYN0vz583XXXXepXbt2+vbbb3Xfffdpy5Yteuutt/JctxkzZqhJkyZ68skndeTIEd1xxx3q16+f1q9fH+whfP7553XTTTdp6NChuv/++7Vv3z6NHTtWHTp00JdffqmKFStKkn744Qddfvnluvvuu1WmTBmtWLFCw4YN06FDh3TjjTeGLHfatGlq0KCBHnnkEVWoUEG1a9fWwoUL1a9fP/Xu3VszZsyQJE2ePFkXXHCBvvzyS9WpU0c//PCD+vbtq8svv1z333+/ypYtq40bN+qHH36Iul0LYvny5frss8/04IMPKj4+XpMnT1bPnj21du1aNWnSpMDnb0l68MEHde655+rvf/+7MjMzlZCQUCTbYPr06WrevLmmTJmiHTt26NZbb9W1116rffv2qWfPnvp//+//afbs2br77rt1xhlnqFevXnm2z1/+8hf17NlT06dPD/6Y0adPH1WpUkXPPfeckpOT9fPPP2vRokU53tqb2/n2888/1wUXXKCzzjpLL774osqXL6/nn39eXbt21ccff6xzzjknug1ZRL7//nvdcccdGjVqlBITE3XnnXeqb9++6tu3rzIyMjRt2jR9++23uuOOO1SjRg393//9X7Csl2t34Hr8z3/+Uxs3btS9996r//73v9l+1Hj11VdVt25dPfPMMzp8+LDuv/9+denSRRs3blTVqlUlRX98Dx8+XLNmzdKYMWN07rnnasmSJRo4cKCn9unXr5+uv/563XXXXSpTpkzU5/nDhw9r3759Gj16tGrVqqW0tDRNmTJFbdq00fr161WzZk1J0rfffqtevXqpVatWmjlzpg4fPqyxY8dq//79Icfa5MmT9fjjj+vBBx9Uy5Yt9fvvv2vNmjVKS0vztD7HLeccn2L4nHPOOQ4Fc+DAAXfgwIGI015btbVEP/k1depUJ8lt3Lgx4vTFixc7SW7mzJnOOec2b97sJLmpU6c655xbvXq1k+TWrl2b4zLGjBnjJLn09PRc65KRkeHS09Nd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3jzYa3Do0KHgiV7yjX4WExMTcrL+4IMPtG3bNtWvX99zfS+66CJNmjRJ//jHP3IclKRHjx56+umnVbdu3WBPSFHp0KGDnnjiCW3ZsiV4gcnMzNSsWbN01llnhbRFYYuPjw95/6dXhd1Ov//+uxYuXKjWrVsXeF4B0dbx4MGDIbcHSwqOiBsQExOjc889V2+++abGjh0b/IL3ySefaMuWLXkGkj169NBbb72lxMTE4O1hBdG2bVtlZmbqrbfeCrkda+bMmVGVj4+P1759+7Kld+jQQQsXLtS+ffuC+9++ffs0f/78kJFdc5pnQfepyZMna+/everSpUu+55Obdu3aqWLFivr+++81ePDgHPMFRqEO/xL89ttvR7WcJk2aKCUlRevWrdPdd98dVZn4+Hh17txZ+/fvV79+/bR582YlJyd7atfAfvj1118HbwmWpEWLFkXMv2rVKv3444+qU6eOJN+2XrhwYcT3AHs9f+ekuLZBUTMztWzZUo899pheeuklff311zkGkpG2YYUKFXTBBRdo7dq1Ovvssz0HjaWZ12v3G2+8oeuuuy749+zZs3X06FG1bds2JN+iRYt04MCB4K2eW7Zs0apVq4LHWLT7VuvWrVWmTBm98cYbIcdntOfPnER7nj948GC21wNNnz492KMb0LZt22zr/OOPP2rlypU5/rBWs2ZNDRs2TIsWLco2QvSJikASKAW++OIL7d69W0eOHNG2bdu0YMECzZ49W926ddPEiRNzLLdgwQL9/e9/1yWXXKL69evrwIEDeuqpp1SxYsXgRaJZs2aSpEcffVQ9e/ZUTEyMWrVqpR49euiJJ57QkCFDNHToUH333XcaP358tl8po9WpUydddtlluu222/Tjjz+qc+fOSk9P14oVK9S7d2917NhRI0eO1KxZs3TBBRdo5MiRatKkiQ4cOKD169frww8/LNQvMSNHjtS0adPUrVs3jRs3TpUqVdKUKVP03XffaeHChYW2nEiaNWumDz/8UAsWLFDNmjWVnJzsqVesIO30yCOPaMOGDerUqZNq166trVu36pFHHtEvv/yi1157rRDWzlsdAwHMQw89pPPOO08ffPCB3nzzzWzzGzdunC666CJdcsklGj58uHbt2qUxY8YER9jLzdVXX62pU6eqS5cuuv3229WiRQsdOXJEmzZt0rx58zR37tyofowJ6Nat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9FN17dpViYmJqlChgrp06aJPP/0013kOGTJEr7zyin7++efgPAP7f9b1j+b4nDhxYrCNa9eurdtvv11//PFHnutlZho9erSeeuop1a9fXxUrVlSHDh20bt26bHnnzJmjNm3aqHz58qpSpYr69++vbdu2heSZOXOmOnfurOrVqysxMVFnnXWWXnnllYjLHTVqlCZNmhTctl999ZUkafny5erSpYsqVqyoChUqqHv37vr6669Dyr/zzjtq166dKleurMTERDVp0kQPPPBA1O0a7ocfflDv3r1Vvnx5Va9eXSNGjNDhw4ez5UtPT9fo0aOVkpKismXLKiUlRaNHj1Z6enowT/PmzTVs2LDg33v37lVMTIxOOeWUkHmdf/75uuKKK0LaJJptkd91Dxwnc+bM0Q033KDq1avrpJNOCs73xRdfVIsWLZSQkKDk5GRdf/31SktLC1n2M888o7Zt26pq1aqqUqWK2rRpo4ULF4bkCVzPnn/+ed1zzz2qWbOmKlasqEGDBungwYP6/vvv1b17dyUmJqpRo0YR949wgdtTV6xYof79+6tKlSpq3bq1pNyvlVnLBm5tDVwrH3zwwWAbZQ3qotn/SkJKSooGDRqk6dOnq0mTJipXrpwuuOACbdy4UQcOHNDw4cNVrVo1nXTSSbr99ttDHrX4448/NHLkSDVv3lyJiYmqWbOmLr744pBruBTazpdccokSExNVrVo13XLLLSF3UQW28ZQpU3TbbbepRo0aKl++vPr06RPxVvBo9q38npul0nc9279/v/7yl7+obt26io+P10knnaSuXbtma+/SjJ/0gFKsV69emjt3rtasWaMLL7ww2/T9+/ere/fuOu+88zRt2jRVrFhRW7Zs0ccffyxJGjZsmH766Se99NJL+uijjxQTExNS/ueff9bIkSN1yimn6MCBA5oxY4YuvPBCrVmzRmeeeWZI3hEjRqhPnz56/fXXtWHDBt15552KiYkJubgPGDBAc+fO1a233qquXbvqjz/+0IoVK7R9+3Y1bdpUv//+u84//3wdOnRIY8eOVf369fXOO+/opptu0uHDh/WXv/wlYjv07t1bH330kdq3b6/rr79ew4YNC/kFce/evRowYID+9re/6aGHHlK5cuX03//+V+3bt1fFihX1zDPPqHLlynr22WfVu3dvLViwQD179gxZRv/+/XXDDTfob3/7m6ZMmaLrrrtOGzdu1LJlyzRp0iSlp6drxIgRGjhwoD755JMct9m//vUv9erVSy1atAh+6Qj/lfvSSy/V0KFDNXLkSM2fP19jxoxRnTp1NHToUEnKdztl9dxzz+nhhx9WTEyM2rRpo3HjxumCCy4ITk9JSZFzLs/55NS+0dYxLS1NCQkJmjhxoqpXr67//ve/evTRR3X++edr/fr1SkhIkCS99957GjhwoHr37q1HH31Uu3bt0ogRI5Senq4mTZrkWr+MjAx1795d33zzje677z6dccYZWrVqlcaPH6+0tDQ9+uijIfmj2Zf/9Kc/ae3atXrooYd06qmnatasWVG1+5QpUzRo0CBlZmbqhRdekCRVqlRJkvTll1+qQ4cOatasWfCL2KRJk9ShQwetWrVKLVq0iDjP++67T7t27dLq1as1b948Scr2C3o06zRo0CDNnz9fd911l9q1a6dvv/1W9913n7Zs2aK33norz3WbMWOGmjRpoieffFJHjhzRHXfcoX79+mn9+vXBHsLnn39eN910k4YOHar7779f+/bt09ixY9WhQwd9+eWXqlixoiRfQHb55Zfr7rvvVpkyZbRixQoNGzZMhw4d0o033hiy3GnTpqlBgwZ65JFHVKFCBdWuXVsLFy5Uv3791Lt3b82YMUOSNHnyZF1wwQX68ssvVadOHf3www/q27evLr/8ct1///0qW7asNm7cqB9++CHqds3qyJEj6tatmw4dOqRnn31WNWrU0AsvvBDxNvbBgwfrjTfe0L333qv27dsrNTVVEyZM0A8//KDXX39dktS5c2ctWLAgWGbZsmWKj4/Xzz//rO+++06NGzfWgQMHtHr1ag0aNMjTtiiMdf/LX/6inj17avr06cEfG+6++249+uij+utf/6qHH35YP//8s0aPHq2vv/5aH3/8cfAas2XLFg0bNkwpKSnBxxH69OmjRYsWZTv3Tpw4UR07dtQrr7yib775RnfeeafKlCmj//znP8Fz8nPPPaehQ4eqVatWOv3003PcRgFXX321rrrqKr355pvKyMjI81oZSWpqqtq2bashQ4Zo+PDhkhQM8qPZ/0rSihUrtGnTJk2ePFlHjhzRrbfeqssuu0wNGjRQo0aNNHPmTK1YsUITJkxQw4YNgwH14cOHtW/fPo0ePVq1atVSWlqapkyZojZt2mj9+vWqWbNmyHIGDRqkK664QjfffLM+/fRTPfDAAzpw4EC2cRwmTpyoli1baurUqdq5c6fuvfdeXXTRRVq3bp3i4uIkRb9v5ffcHFCarmcjR47UvHnzguvy66+/auXKlVEHxqWCc45PMXzOOa2ec6tfjvxBVA4cOOAOHDgQeWJObVtcn3yaOnWqk+Q2btwYcfrixYudJDdz5kznnHObN292ktzUqVN9q716tZPk1q5dm+MyxowZ4yS59PT0XOuSkZHh0tPTXePGjd1f//rXYPrSpUudJHfttdeG5L/llltcfHy8O3r0qHPOuffff99Jck8++WSOy3jggQdcfHy8++6770LShw0b5qpVq5ZrHdPT050kN2bMmJD0wYMHO0lu7ty5Iem33367i4mJCWnbjIwM17hxY3fWWWcF0wLt88orrwTT0tLSXExMjKtatarbu3dvMP3JJ590ktyWLVtyrKdzztWrV89dffXV2dIDy3r55dB9pnnz5q5bt27BvwvSTs45N2jQIDdz5ky3YsUKN336dHfmmWe62NhYt3Tp0lzLRZJT++a3jhkZGW7btm1OkpszZ04wvV27du60005zmZmZwbRVq1Y5Sa5Dhw651vHVV191ktzy5ctD0idMmODi4uLcjh07nHPR78vvvvuuk+T++c9/huTr0aOHk5RnO3bo0MGdf/752dIvu+wyV7lyZbdnz55g2t69e11SUpK79NJLc53n4MGD3cknn5wtPdp1WrFiRbb93DnnZsyY4SS5//znP7kuX5Jr1KiRO3LkSDBt9uzZTpJbuXKlc865ffv2uUqVKrmhQ4eGlN28ebOLi4tzjz/+eMR5Z2ZmuvT0dDds2DB35plnZlturVq13MGDB0PSGzZs6Dp37hyStnfvXletWjU3YsSIkPplPYbD5dSukfz97393klxqampI3Zs1a+Ykuc2bNzvnnPvqq68inqvGjx8fcr6eM2dOyPlkxIgR7uKLL3aNGjVyzz//vHPOuX//+99Okvv2229D2iSvbVGQdQ/sU5dccklI+ubNm12ZMmXcuHHjQtI/+ugjJ8n961//iricwPbt1q2b69u3b8j8JLlOnTqF5L/00kudJDd9+vRgWuCcPHbs2BzXx7n/XVNvvfXWkPRorpWBsoHt6JyvrUeNGpUtbzT7nxdHjx516enpIZ969eq5++67LyQtIyMjz3nVq1fPJSUlud9++y2YFrh2XX/99SF5zzrrLNexY8cc55WRkeEOHDjgEhMT3WOPPRZMD7TV8OHDQ/JPmDDBlSlTxm3YsME5979tHH5uD+wz//jHP4L5otm3CnpuLm3Xs9NPP92NHDky1zqHy/W7sJ+kNa6Y4htubQVKMd/5QCG3o2Z16qmnqkqVKho+fLhmzJihH3/80dP833vvPXXq1EnVqlVTbGys4uLi9N1332nDhg3Z8oYP8HPGGWfo8OHD2rFjhyTp3XfflZnphhtuyHF5ixcvVuvWrVW/fn1lZGQEP927d9evv/6qb775xlP9A2JjY9WnT5+QtBUrVqhNmzYhz57GxMToqquu0hdffKHff/89JH/WX8mTkpJUo0YNtWnTJtibJElNmzaVJM/tHC68LZs3bx5y619B22n69Om68sordcEFF2jQoEH66KOPVLt2bY0ePTpf9Y3Uvl7q+Nxzz6lFixZKTExUbGys6tatK0nB/SwzM1OrV6/W5ZdfrjJl/ndZat26dZ63GgbqUq9ePbVr1y6kLhdddJHS09Oz3a6d176cmpqqmJgYXXbZZSH5BgwYkGddcrNixQr16dNHVapUCaZVqlRJffv21fLlyws077zWafHixSpbtqwuu+yybG0UqFteunXrFuw9CCxDUnDfTU1N1e+//66rr746ZBmnnHKKmjZtGrKMjRs36qqrrtLJJ5+suLg4xcXF6R//+EfEc0+PHj1Urly5kLKbNm3Ktpzy5curbdu2weW0bNlScXFxGjBggN58803t3LkzqrbMSWpqqurUqRPy7HGZMmVCbjuV/teW4b2Igb8D27pDhw4qU6ZMcDCXDz74QJ07d1bnzp1D0mrVqhU89wTktS0KY90vvfTSkL+XLFmio0ePZmv31q1bq1KlSiHb97PPPlOfPn100kknBa8tS5Ysibh9w3soA+vavXv3YFrgnBztuTe87gW9VmYV7f7nxfLly4PHQeCzdetWjR8/PiStS5cuUc2vbdu2qly5cvDvSG0aSA9vizfeeEOtW7dWlSpVFBsbqwoVKmj//v0Rt134vj9gwAAdPXo02+364ef2888/P3iLqRT9vlUY5+bSdD0799xzNW3aND300ENas2aNMjMzo16P0oJAEijFAif4rKPIZVW5cmUtXbpUtWvX1s0336y6deuqefPmUd2m9vnnn6tXr15KTEzUSy+9pFWrVmn16tVq0aJFxGemqlatGvJ34DaoQN5ff/1VVatWDfnCF27nzp1asWJFtgtm//79g/PIjxo1amS7bTctLS1iu9WsWVPOOe3ZsyckPSkpKeTvsmXLRkyTFNUzZbmJ1JZZ51nY7VSxYkX17t1bq1evzld9I7VvtHV8+umndfPNN6tr166aM2eOPv3002BgF1jn3bt3Kz09PeQ5rIBIaeF27typrVu3ZqvLeeedF1KXgLz25e3btyspKSnki3q0dclNbvtk+P7oVV7rtHPnTh05ckSJiYkhbVSjRg1J0e1T0SxDkrp27ZptW3z11VfBZezfv1/dunXT2rVrNWnSJH344YdavXq1rrvuuojPG4a3WWA5119/fbblLFiwILicRo0a6Z133tHRo0d1zTXXqGbNmmrdunW+g/bt27dHtY8GnukKr3fgtsDA9KpVq6pFixZaunSpdu/era+//lqdOnVSp06dgq8xWLp0qTp16pRtmXlti8JY95zavVGjRtna/ffffw+2+48//qguXbooLS1NTz/9tD7++GOtXr1aPXr0iHjuzOk8Gyk92nNveN0Lcq0MF+3+58U555yj1atXh3xq1aqlG264ISQtcLt8XvLbpvPnz9eVV16p0047Ta+//ro++eQTrV69WtWrV4/Y9uH7fuDv8GcGczpuAvmi3bcK49xcmq5nTz/9tIYPH66XX35Z5557rmrUqKGRI0cGx8U4FvCMJFCKLVy4UAkJCTrnnHNyzNOyZUu99dZbysjI0Jo1azRx4kRdccUVWrt2rZo3b55jubfeekuxsbGaM2dOyEl5z549IT0m0UpOTlZaWpoOHTqUYzBZrVo11ahRQ08++WTE6Xk9C5eTSD22VatW1S+//JIt/ZdffpGZZfsiVpoURTs553Ls2c5LpHLR1nHmzJnq0qVLyHOKmzdvDsmbnJysuLi4YO9ZVjt27FC9evVyrV+1atVUv359vfHGGxGnR9OrmVWtWrW0Z88epaenhxwbkernRW77ZFHvj9WqVVNCQoI+/PDDiNNr165dKMuQfM80RnqOLfB8ZGpqqrZu3aoPP/xQ7du3D07P6f2q4ftfYDkTJ05U165ds+UPfGmWFAzMDh8+rJUrV+r+++9X7969tWXLFiUnJ3tav1q1akUcXCh8vwhsy19++UUNGzYMpge2faD+gfrNmjVLS5cuVbVq1XTmmWeqVq1a2rlzp1auXKn//Oc/wefzvCrouufU7u+++262gCTr9MWLF2vv3r164403QgYOKs4vx5HOWfm9Vobzsv9Fq2LFimrVqlW2+dSuXTtbelGaOXOmGjVqFPKMY3p6erYBbwJ27NgRcqwHjoWTTz45W75IZVu2bCkp+n2rMM7Npel6lpiYqIkTJ2rixInaunWr3nzzTd19990qW7asJk+eHPU6lSQCSaCUmjNnjubNm6cRI0aofPnyeeaPjY1VmzZtNH78eM2bN0/ffvutmjdvHvyl+tChQ8EvcpLvoh4TExNyUv3ggw+0bds21a9f33N9L7roIk2aNEn/+Mc/cnzwvUePHnr66adVt27dYE9IUenQoYOeeOIJbdmyJRhIZGZmatasWTrrrLNC2qKwxcfHh4xc51Vht9Pvv/+uhQsXBkcvLAzR1vHgwYMhtwdLCo6IGxATE6Nzzz1Xb775psaOHRu8HeiTTz7Rli1b8gwke/ToobfeekuJiYnZbgHMj7Zt2yozM1NvvfVWyC1TM2fOjKp8fHy89u3bly29Q4cOWrhwofbt2xfc//bt26f58+fn+ZLqwtinJk+erL1790Z9e5xX7dq1U8WKFfX9999r8ODBOeYLBBThP2C9/fbbUS2nSZMmSklJ0bp163T33XdHVSY+Pl6dO3fW/v371a9fP23evFnJycme2rVt27aaOnWqVq1aFby99ejRo9l+wOjQoYMk3/4yatSoYPprr70mSSEDp3Xq1EmPPfaYXnjhBXXs2FFmpho1auj000/XmDFjlJmZmefrjopj3SXf7bRlypTRtm3b1K1btxzzRdq+3333nVauXJltRNqSkNO1MpKyZctma6P87H/HioMHD2Z7tc706dNzvOXyjTfeCNk/Z86cqTJlygTvBgkIP7evXLlSP/30k9q2bSsp+n2roOfmnJSG61m9evV0++2367XXXisVo/9Gi0ASKAW++OIL7d69W0eOHNG2bdu0YMECzZ49W926ddPEiRNzLLdgwQL9/e9/1yWXXKL69evrwIEDeuqpp1SxYsXgCbpZs2aSpEcffVQ9e/ZUTEyMWrVqpR49euiJJ57QkCFDNHToUH333XcaP358tl8So9WpUydddtlluu222/Tjjz+qc+fOSk9P14oVK9S7d2917NhRI0eO1KxZs3TBBRdo5MiRatKkiQ4cOKD169frww8/jPqLZDRGjhypadOmqVu3bho3bpwqVaqkKVOm6Lvvvss2DH1ha9asmT788EMtWLBANWvWVHJysqdesYK00yOPPKINGzaoU6dOql27trZu3apHHnlEv/zyS/CLbGGIto6BAOahhx7Seeedpw8++EBvvvlmtvmNGzdOF110kS655BINHz5cu3bt0pgxY7KNEhjJ1VdfralTp6pLly66/fbb1aJFCx05ckSbNm3SvHnzNHfu3Kh+jAno1q2b2rdvr+HDh2v37t3BkQGjvbg3a9ZMU6ZM0axZs9SwYUNVrFhRTZo00X333acFCxaoS5cuuuuuu2Rmmjx5sg4ePKj7778/z3mmpaXpueeeU6tWrZSQkBB8Li4aHTt21FVXXaXLL79ct912m8477zyVKVNGW7Zs0aJFizR58mQ1btw46vlFUqlSJT388MO65ZZbtGvXLvXs2VOVK1fWzz//rOXLl6tjx44aOHCg2rVrp0qVKumWW27RuHHjdODAAU2YMEHJycnau3dvnssxMz377LPq16+fjhw5oiuuuELJycnasWOHPv74Y9WtW1e33Xabnn/+ea1YsUK9evVSnTp1tHv3bk2cOFG1a9cOBg5e2nXw4MGaNGmS/vSnP+mhhx5SjRo19Pzzz2d73vr000/XVVddpbFjxyojI0Pt2rVTamqqxo8fr6uuuipkROwLL7xQMTExev/99/Xss88G0zt16qRnnnlGdevWVYMGDTxvi8Jed0lq2LCh7rrrLv35z3/Whg0b1KFDByUkJOjHH3/UkiVLNGzYMHXq1Eldu3ZVbGysrr32Wt1+++3avn27xowZo7p162Z7zVFxieZaGUmzZs20cOFC9ejRQ0lJSapdu7Zq164d1f4n+Xrnhw4dqqVLl+b5Y1Fp0KNHD82dO1cjR45Unz599Nlnn+mpp57K8S6lRYsW6Y477tBFF12kTz/9VOPGjdO1116b7Vyyb9++kHP7Pffco1NPPVXXXnutpOj3rYKem3NSUteztm3bqm/fvjrjjDOUmJio5cuXa+3atbn+EFfqFNeoPif6h1FbCy6akaqONYGRzwKfhIQEV7duXXfJJZe4N954IzjiYkD4qK3r1693V1xxhUtJSXHx8fEuOTnZ9ezZ061atSpYJiMjw918882uevXqzsyc77D3eeqpp1xKSopLSEhwrVq1ckuWLHEdOnQIGVUsMILfkiVLItY96wh36enpbsKECe7UU091cXFxwfqsX78+mCctLc3deuutLiUlxcXFxbnq1au79u3b5ziiY9Z5K4dRW3MadXH9+vWuX79+rlKlSi4+Pt61bt3a/fvf/w7Jk9OotpFGXs2pLcJ9++23rn379q5cuXJOkhs8eHCuyxo8eLCrV69eSFp+22nevHmuXbt2rlq1ai42NtZVrVrVXXzxxe6TTz7JtVxOcmvfaOp48OBBd+ONN7rk5GSXmJjoevfu7X744YeI2/L11193jRs3dmXLlnXNmjVzc+bMybY/5uTQoUNuzJgxrkmTJq5s2bIuKSnJtWrVyo0ZMybY3l725Z07d7oBAwa4xMREV7lyZXfNNde4uXPnRjUy4Pbt213Pnj1dYmJitlH6Vq1a5bp06eIqVKjgypcv7zp37hzVttm/f78bMGCAq1KlipMU3F+8rFNmZqZ74okn3Jlnnuni4+NdpUqV3JlnnunuuOOOkBEeI1GE0SvDz0cBCxcudB07dnQVK1Z0CQkJrmHDhm7o0KFu3bp1wTzvv/++a9mypUtISHANGjRwTz75ZPD4yGu5AR9//LHr3bu3q1KliouPj3f16tVzV155pfv444+D0/v27etOOeUUV7ZsWVezZk13+eWXh5yPcmrXnGzatMn17NnTlStXziUnJ7u//vWv7vnnn8/W1keOHHGjRo1ydevWdbGxsa5u3bpu1KhRISOtBpx33nnZRmYNjOgaOHfk1Sbh26Ig657Xee7VV191rVu3duXLl3cVKlRwTZs2dbfccov78ccfg3lmzZrlmjRp4uLj412zZs3cP//5z2znuUCdX3zxxZD5ezknh8tpJPRorpWRjpmPPvrInX322S4+Pj7bOSuv/c8555555hknyX3zzTe51juSevXqZTtHRlsu2mtX+Pk9MzPTjRo1ytWqVcuVK1fOXXjhhe7zzz939erVC9kXA221fPly17dvX1ehQgWXlJTkbr755pARlgPb+Nlnn3UjR450ycnJrly5cq5Xr17uhx9+yFb3aPatgpybS9v17M4773QtW7Z0lSpVcuXLl3fNmzfPdeR750rfqK3mWx6KWqtmKW7Nq2NymDi0eCtzjArcLuOlZwEAAKAkDBw4UL/99psWLVpU0lUpVIGe1o0bN4aMjB5uy5Ytql+/vl588UUNGzas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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "xmin = 0\n", "xmax = 2000\n", "step = 20\n", "\n", "sns.distplot(df.query('strand1==\"+\"').dist_rfrag1_left, bins=np.arange(xmin, xmax, step), label='Distance from the 5\\' read end to the nearest upstream rsite, + mapped reads')\n", "sns.distplot(df.query('strand1==\"+\"').dist_rfrag1_right, bins=np.arange(xmin, xmax, step), label='Distance from the 5\\' read end to the nearest downstream rsite, + mapped reads')\n", "\n", "plt.xlim(xmin, xmax)\n", "plt.legend()\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": 9, "id": "8fb2a16b-a921-4451-9250-4c0e381ac516", "metadata": {}, "outputs": [ { "data": { "image/png": "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ySe5jnP48OF64YUX9NNPPwXHGdj+s85/NPvnlClTgsu4Vq1auu222/Tbb7/lOV9mpnHjxunxxx9XvXr1VL58eXXo0EHr1q3LVnfevHlq3bq1ypYtq0qVKmnAgAHati309oM5c+aoc+fOqlatmpKTk3XuuefqhRdeiDjdsWPHaurUqcF1+5///EeStHz5cnXp0kXly5dXuXLl1KNHD3311Vchw7/99ttq27atKlasqOTkZDVu3Fj3339/1Ms1q8D2E36Z9cyZM2VmIZfCpaamasiQIXruuefUsGFDJSUl6bzzztPSpUtDhs3v8TvwWTB9+nTdcccdqlWrlhITE4PrvLDXwbhx4/Twww+rbt26KleunPr06aOdO3dq586duvLKK1WxYkXVrl1b06ZNy3H5hS/HefPm6frrr1e1atV02mmnSZI2btyoyy67TNWrV1dSUpLq1KmjAQMGKCMjI+I6yOt4u3btWvXr10+VK1dWmTJl1K5dO33wwQd5trGodezYUe3bt9fixYvVokULlSlTRueee64+/vhjZWRk6J577lHNmjVVpUoVDR8+XIcOHQoZ3stn9+uvv67hw4ercuXKqlChgq6++mr98ssvIXUD+9kDDzygM844Q2XKlNHFF1+sL774Ilvbo9m2Dh8+rJtuuklVq1ZVcnKy+vXrpx9//DGqZRP4TP7qq6/Uo0cPJScn68orrwyON6/j/G+//aYxY8aoWbNmSk5OVo0aNXTJJZeEfA8JeO+993TeeecpKSlJDRo00N/+9rdsdTIyMnTvvfeqQYMGSkpKUkpKitq3b68PP/wwqvk5mcTy57uzJL0RoXydpAFFNVEzqyKpmaQZ+Rz+08D/zz+fq2NR/Hr37q358+drzZo1uvjii7O9f/DgQfXo0UMXXnihZs6cqfLly2vLli366KOPJEkjR47Ujz/+qOeff14ffvhhtudw/vTTTxozZozOOOMMHTp0SLNnz9bFF1+sNWvW6JxzzgmpO3r0aPXt21cvv/yyNmzYoDvuuENxcXEhXzwGDhyo+fPn65ZbblHXrl3122+/acWKFdq+fbuaNGmi/fv3q127djpy5IgmTJigevXq6e2339aNN96oo0eP6o9//GPE5dCnTx99+OGHat++va677jqNHDky5NfJffv2aeDAgfrzn/+sBx98UGXKlNF///tftW/fXuXLl9eTTz6pihUr6qmnnlKfPn20cOFC9erVK2QaAwYM0PXXX68///nPmj59uq699lpt2rRJy5Yt09SpU5Wenq7Ro0dr8ODB+vjjj3NcZ//617/Uu3dvNW/eXBMmTJAkVatWLaTOZZddphEjRmjMmDF68803NX78eNWuXTt4v2x+l1NWTz/9tP7yl78oLi5OrVu31sSJE3XRRRcF309NTVXYb285irR8o23jnj17lJSUpClTpqhatWr673//q4cffljt2rXT+vXrlZSUJEl69913NXjwYPXp00cPP/ywdu3apdGjRys9PV2NGzfOtX0ZGRnq0aOHvv76a9177706++yztWrVKk2aNEl79uzRww8/HFI/mm3597//vdauXasHH3xQZ555pubOnRvVcp8+fbqGDBmizMzM4JeSChUqSJK+/PJLdejQQU2bNg2Gj6lTp6pDhw5atWqVmjdvHnGc9957r3bt2qXVq1drwYIFkpTt1/lo5mnIkCF68803deedd6pt27b65ptvdO+992rLli16/fXX85y32bNnq3Hjxnrsscd07Ngx3X777erfv7/Wr18fPEP4zDPP6MYbb9SIESN033336cCBA5owYYI6dOigL7/8UuXLl5ckff/997riiit01113qVSpUlqxYoVGjhypI0eO6IYbbgiZ7syZM1W/fn099NBDKleunGrVqqVFixapf//+6tOnj2bPni1JmjZtmi666CJ9+eWXql27tr7//nv169dPV1xxhe677z6VLl1amzZt0vfffx/1ci2I5cuX69NPP9UDDzygxMRETZs2Tb169dLatWvVuHHjAh+/JemBBx7QBRdcoGeffVaZmZlKSkoqknUwa9YsNWvWTNOnT9eOHTt0yy23aOjQoTpw4IB69eql//f//p9effVV3XXXXTr77LPVu3fvPJfPH//4R/Xq1UuzZs0K/pjRt29fVapUSU8//bRSUlL0008/6a233srx0t7cjrefffaZLrroIp177rl67rnnVLZsWT3zzDPq2rWrPvroo5h/r/v22291++23a+zYsUpOTtYdd9yhfv36qV+/fsrIyNDMmTP1zTff6Pbbb1f16tX1f//3f8FhvXx2Bz6P//nPf2rTpk2655579N///jfbjxovvvii6tSpoyeffFJHjx7Vfffdpy5dumjTpk2qUqWKpOj371GjRmnu3LkaP368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aOTIkXrrrbey9RB9KohlkHxO0h8kvWFm4+S7X3KSpB8kBfvaNbO6kr6TdL9z7v4s5R0kVZNUw1/U0swOSpJz7jV/nYsl/VPSl5JmmlnWBw0ddc59XkTzBhTYF198od27d+vYsWPatm2bFi5cqFdffVXdunXTlClTchxu4cKFevbZZ3XppZeqXr16OnTokB5//HGVL18++CHRtGlTSdLDDz+sXr16KS4uTi1btlTPnj316KOPavjw4RoxYoQ2btyoSZMmZfuVMlqdOnXS5ZdfrltvvVU//PCDOnfurPT0dK1YsUJ9+vRRx44dNWbMGM2dO1cXXXSRxowZo8aNG+vQoUNav369Pvjgg0L9EjNmzBjNnDlT3bp108SJE1WhQgVNnz5dGzdu1KJFiwptOpE0bdpUH3zwgRYuXKgaNWooJSXF01mxgiynhx56SBs2bFCnTp1Uq1Ytbd26VQ899JB+/vlnvfTSS4Uwd97aGAgwDz74oC688EK9//77eu2117KNb+LEierevbsuvfRSjRo1Srt27dL48eODPezl5uqrr9aMGTPUpUsX3XbbbWrevLmOHTum7777TgsWLND8+fOj+jEmoFu3bmrfvr1GjRql3bt3B3ttjfaLQ9OmTTV9+nTNnTtXDRo0UPny5dW4cWPde++9Wrhwobp06aI777xTZqZp06bp8OHDuu+++/Ic5549e/T000+rZcuWSkpKCt6jGI2OHTtq0KBBuuKKK3TrrbfqwgsvVKlSpbRlyxa99dZbmjZtmho1ahT1+CKpUKGC/vKXv+jmm2/Wrl271KtXL1WsWFE//fSTli9fro4dO2rw4MFq27atKlSooJtvvlkTJ07UoUOHNHnyZKWkpGjfvn15TsfM9NRTT6l///46duyYrrzySqWkpGjHjh366KOPVKdOHd1666165plntGLFCvXu3Vu1a9fW7t27NWXKFNWqVSt4ts/Lcq1Zs6Y6dOigKVOmKCUlRdWrV9fs2bNzfCTQaaedpu7du2vChAnBXlsPHTqke++9V1LBjt+xXgdF4csvv9To0aN11VVXqWHDhsrMzNTMmTMVHx+f67ODczrePvLII7r44ovVo0cPXXfddapZs6Z2796tzz77TJmZmZo6daok32MyOnXqpBkzZmR7VFNJ5PWze926dRoxYoQGDhyojRs3auzYserQoUO2H5TKlCmj7t276/bbb9fRo0c1fvx4VahQQWPGjJEU/bbVuHFjDR48WPfdd5+OHz8e7LU1px9cohXtcb5nz56aP3++xowZo759++rTTz/V448/nu1s7bhx4/Tqq68G5/nYsWMaP358tktb+/fvr+bNm+u8885T5cqV9fnnn2vx4sUaNWpUgebnhFQUPfhE+5JUR9LrkvZLOiBpvqTUsDqp8oXMCWHly/zl2V5Z6kzIqY6kLQVtf1S9tq7+R+gLhSqanqpONIHe/gKvpKQkV6dOHXfppZe6V155JaQ3Puey99q6fv16d+WVV7rU1FSXmJjoUlJSXK9evdyqVauCw2RkZLibbrrJVatWzZlZYL9xzjn3+OOPu9TUVJeUlORatmzplixZ4jp06BDSS2ag57clS5ZEbHvWngrT09Pd5MmT3ZlnnukSEhKC7Vm/fn2wzp49e9wtt9ziUlNTXUJCgqtWrZpr3759jr0JZh23cui1NadeF9evX+/69+/vKlSo4BITE12rVq3cv//975A6OfWKGKknwJyWRbhvvvnGtW/f3pUpU8ZJcsOGDct1WsOGDQvpJc65/C+nBQsWuLZt27qqVau6+Ph4V6VKFXfJJZe4jz/+ONfhcpLb8o2mjYcPH3Y33HCDS0lJccnJya5Pnz7u+++/j7guX375ZdeoUSNXunRp17RpUzdv3rxs22NOjhw54saPH+8aN27sSpcu7SpXruxatmzpxo8fH1zeXrblnTt3uoEDB7rk5GRXsWJFd80117j58+dH1Wvr9u3bXa9evVxycnK2XmdXrVrlunTp4sqVK+fKli3rOnfuHNW6OXjwoBs4cKCrVKmSkxTcXrzMU2Zmpnv00UfdOeec4xITE12FChXcOeec426//Xb366+/5jp9SW7s2LEhZeHHo4BFixa5jh07uvLly7ukpCTXoEEDN2LECLdu3bpgnffee8+1aNHCJSUlufr167vHHnssuH/kNd2Ajz76yPXp08dVqlTJJSYmurp167qrrrrKffTRR8H3+/Xr58444wxXunRpV6NGDXfFFVeEHI9yWq45+eGHH1zfvn1dxYoV3Wmnnebuvvtu99xzz0XstfXqq692zz33nKtfv74rXbq0a9GihXvvvfeCdQpy/A4s++eeey5iO4t6HeTU43hOPRZnldM2u2PHDjd06FB35plnujJlyrjKlSu7iy++2C1evDjbsFn3wZyOt8459/XXX7urrrrKVatWzZUuXdqdfvrp7pJLLnGLFi0K1lm4cKGTlO2zIRodOnQImZ6X4cKXU07rNNLnhpfP7tdff90NGzbMVaxY0SUnJ7tBgwa5Xbt2hUxDkrvnnnvcAw884E4//XSXmJjo2rdvH7E352i2rUOHDrkbbrjBVa5c2ZUrV85dcskl7sMPP/TUa2uknr+jOc5nZma6sWPHupo1a7oyZcq4iy++2H322Weubt262dbVkiVLXIsWLVzp0qVdvXr13DPPPJPt8/ihhx5yrVq1clWqVHFJSUmuUaNGbvz48SE9WBenWPbaai5Lj0/wpmXLlm7NmjW5V1oTermWWo4ougadggKX4ng5swAAQHFLTU1V+/btg8+4RMl1zz33aMGCBfrPf/6T7/vIS6LAmdYlS5ZEvJc4KzPT2LFjNXny5GJqHfIrmu/CZvapc67Qb9w9eS4QBwAAAApo+fLluueee06qEAkUhVjeIwkAAACUKCtXrox1E4ATAkESAACgiG3ZsiXWTcAprmPHjor2ljZufUM0uLQVAAAAAOAJQRIAAAAA4AlBEgAAAADgCUESAAAAAOAJQRIAAAAA4AlBEgAAAADgCUESAAAAAOAJQRInrzUzYvvKp5kzZ8rMgq9y5copNTVVl112mV555RUdP348pP6WLVtkZpo5c2bU01i2bJkmTJiQbVwnorS0NLVq1UrlypWTmemLL76IdZMievTRRzVv3rxs5RMmTJCZKSMjo0inn3WbyvrKurwC29KyZcuKtC0F1bFjR3Xs2DHWzZDk25eiWWYzZ87UP/7xj0Kd9vz58/XII4/k2KZ33323UKd3qshpuXoROI6faM+OLIx5P5lEWo8TJkzQ+++/H7tGISrRHptjrSR9nuUHQRIooV599VWlpaXprbfe0qRJk5SYmKhBgwape/fuOnLkSLBezZo1lZaWpj59+kQ97mXLlmnixIknRZC87rrrlJGRoTfffFNpaWlq1KhRrJsUUU5BsjgNHz5caWlpIa+SurxONsUZJFEwp/JyPZXnPZI+ffooLS1NNWvWDJZNnDiRIAn4xce6AQAia9GihRo2bBj8+5prrtGAAQM0YMAA3XHHHXriiSckSYmJiWrdunWsmhlTx48f14YNGzR27Fh17tw517pHjx5VYmJiMbWsZDr99NOLbFth+SJWMjMz5ZxTfDxfaYrTibzPR9v2atWqqVq1asXQouikpqZq+PDhmjBhQqybclI7kbft4sYZSeAEcvnll6t///567rnndPjwYUmRL21dvXq1unXrpqpVq6ps2bKqX7++brrpJkm+y3ImTpwoSUpISAhe4hgwfvx4nXfeeapYsaJSUlLUuXNnrVq1KqQdgUtGFixYoD/84Q9KSUlRtWrVNGTIEP36668hdTMyMjRt2jQ1bdpUSUlJqlatmnr27Kn169cH6+zevVs33nijTj/9dCUmJqpJkyZ69tlnc10WM2fOVFxcnI4fP65JkybJzJSamirJd+btjDPOUFpamtq2basyZcrojjvukCRt2LBBl112mSpVqqQyZcqodevWWrx4cci4A5ebrl+/Xj169FC5cuVUp04dzZjhu2R51qxZatKkiZKTk9WpUyd99913ubY1NTVVW7du1UsvvRRc3sOHDw+ps3nzZvXp00fJycmqW7eu7r///mxnjPOznIpCbss3mjbu2rVLo0aNUqNGjVS2bFnVrl1bgwcP1k8//ZRtWnPmzFGTJk2UmJios846S//617+ibufhw4d15513ql69eipdurTq1aunBx54IGS5etmWd+3apcGDB6tChQqqVKmShg4dmq1OJB07dtTy5cu1cuXK4PrPeinTJ598oq5duyo5OVnlypVTly5d9Mknn+Q6zuHDh+uFF17QTz/9FBxnYPvPOv/R7J9TpkwJLuNatWrptttu02+//ZbnfJmZxo0bp8cff1z16tVT+fLl1aFDB61bty5b3Xnz5ql169YqW7asKlWqpAEDBmjbtm0hdebMmaPOnTurWrVqSk5O1rnnnqsXXngh4nTHjh2rqVOnBtftf/7zH0nS8uXL1aVLF5UvX17lypVTjx499NVXX4UM//bbb6tt27aqWLGikpOT1bhxY91///1RL9dw33//vfr06aOyZcuqWrVqGj16tI4ePZqtXnp6usaNG6fU1FSVLl1aqampGjdunNLT04N1mjVrppEjRwb/3rdvn+Li4nTGGWeEjKtdu3a68sorQ5ZJNOsiv/Me2E/mzZun66+/XtWqVdNpp50WHO9zzz2n5s2bKykpSSkpKbruuuu0Z8+ekGk/+eSTatOmjapUqaJKlSqpdevWWrRoUUidwOfZM888o7vvvls1atRQ+fLlNWTIEB0+fFjffvutevTooeTkZDVs2DDi9hEucHnqihUrNGDAAFWqVEmtWrWSlPtnZdZhA5e2Bj4rH3jggeAyyhrqotn+YiE1NVVDhgzRrFmz1LhxY5UpU0YXXXSRNm3apEOHDmnUqFGqWrWqTjvtNN12220ht1r89ttvGjNmjJo1a6bk5GTVqFFDl1xySchnuBS6nC+99FIlJyeratWquvnmm0Ouogqs4+nTp+vWW29V9erVVbZsWfXt2zfipeDRbFv5PTZLJe/z7ODBg/rjH/+oOnXqKDExUaeddpq6du2abXmXFPx8B5xgevfurfnz52vNmjW6+OKLs71/8OBB9ejRQxdeeKFmzpyp8uXLa8uWLfroo48kSSNHjtSPP/6o559/Xh9++KHi4uJChv/pp580ZswYnXHGGTp06JBmz56tiy++WGvWrNE555wTUnf06NHq27evXn75ZW3YsEF33HGH4uLiQj7cBw4cqPnz5+uWW25R165d9dtvv2nFihXavn27mjRpov3796tdu3Y6cuSIJkyYoHr16untt9/WjTfeqKNHj+qPf/xjxOXQp08fffjhh2rfvr2uu+46jRw5MuQXxH379mngwIH685//rAcffFBlypTRf//7X7Vv317ly5fXk08+qYoVK+qpp55Snz59tHDhQvXq1StkGgMGDND111+vP//5z5o+fbquvfZabdq0ScuWLdPUqVOVnp6u0aNHa/Dgwfr4449zXGf/+te/1Lt3bzVv3jz4pSP8V+7LLrtMI0aM0JgxY/Tmm29q/Pjxql27tkaMGCFJ+V5OWT399NP6y1/+ori4OLVu3VoTJ07URRddFHw/NTVVzrk8x5PT8o22jXv27FFSUpKmTJmiatWq6b///a8efvhhtWvXTuvXr1dSUpIk6d1339XgwYPVp08fPfzww9q1a5dGjx6t9PR0NW7cONf2ZWRkqEePHvr6669177336uyzz9aqVas0adIk7dmzRw8//HBI/Wi25d///vdau3atHnzwQZ155pmaO3duVMt9+vTpGjJkiDIzM/W3v/1NklShQgVJ0pdffqkOHTqoadOmwS9iU6dOVYcOHbRq1So1b9484jjvvfde7dq1S6tXr9aCBQskKdsv6NHM05AhQ/Tmm2/qzjvvVNu2bfXNN9/o3nvv1ZYtW/T666/nOW+zZ89W48aN9dhjj+nYsWO6/fbb1b9/f61fvz54hvCZZ57RjTfeqBEjRui+++7TgQMHNGHCBHXo0EFffvmlypcvL8kXyK644grdddddKlWqlFasWKGRI0fqyJEjuuGGG0KmO3PmTNWvX18PPfSQypUrp1q1amnRokXq37+/+vTpo9mzZ0uSpk2bposuukhffvmlateure+//179+vXTFVdcofvuu0+lS5fWpk2b9P3330e9XLM6duyYunXrpiNHjuipp55S9erV9be//S3iZezDhg3TK6+8onvuuUft27dXWlqaJk+erO+//14vv/yyJKlz585auHBhcJhly5YpMTFRP/30kzZu3KhGjRrp0KFDWr16tYYMGeJpXRTGvP/xj39Ur169NGvWrOCPDXfddZcefvhh/elPf9Jf/vIX/fTTTxo3bpy++uorffTRR8HPmC1btmjkyJFKTU0N3o7Qt29fvfXWW9mOvVOmTFHHjh31wgsv6Ouvv9Ydd9yhUqVK6fPPPw8ek59++mmNGDFCLVu21FlnnZXjOgq4+uqrNWjQIL322mvKyMjI87MykrS0NLVp00bDhw/XqFGjJCkY8qPZ/mJpxYoV+u677zRt2jQdO3ZMt9xyiy6//HLVr19fDRs21Jw5c7RixQpNnjxZDRo0CAbqo0eP6sCBAxo3bpxq1qypPXv2aPr06WrdurXWr1+vGjVqhExnyJAhuvLKK3XTTTfpk08+0f33369Dhw5l68dhypQpatGihWbMmKGdO3fqnnvuUffu3bVu3TolJCRIin7byu+xOaAkfZ6NGTNGCxYsCM7LL7/8opUrV0YdjIudc45XPl/nn3++y9Pqf4S+UKgOHTrkDh06FPnN8GVf3K98mjFjhpPkNm3aFPH9xYsXO0luzpw5zjnnNm/e7CS5GTNm+GZ79Wonya1duzbHaYwfP95Jcunp6bm2JSMjw6Wnp7tGjRq5P/3pT8HypUuXOklu6NChIfVvvvlml5iY6I4fP+6cc+69995zktxjjz2W4zTuv/9+l5iY6DZu3BhSPnLkSFe1atVc25ienu4kufHjx4eUDxs2zEly8+fPDym/7bbbXFxcXMiyzcjIcI0aNXLnnntusCywfF544YVg2Z49e1xcXJyrUqWK27dvX7D8sccec5Lcli1bcmync87VrVvXXX311dnKA9P6xz9Ct5lmzZq5bt26Bf8uyHJyzrkhQ4a4OXPmuBUrVrhZs2a5c845x8XHx7ulS5fmOlwkOS3f/LYxIyPDbdu2zUly8+bNC5a3bdvW/e53v3OZmZnBslWrVjlJrkOHDrm28cUXX3SS3PLly0PKJ0+e7BISEtyOHTucc9Fvy++8846T5P75z3+G1OvZs6eTlOdy7NChg2vXrl228ssvv9xVrFjR7d27N1i2b98+V7lyZXfZZZflOs5hw4a5008/PVt5tPO0YsWKbNu5c87Nnj3bSXKff/55rtOX5Bo2bOiOHTsWLHv11VedJLdy5UrnnHMHDhxwFSpUcCNGjAgZdvPmzS4hIcH99a9/jTjuzMxMl56e7kaOHOnOOeecbNOtWbOmO3z4cEh5gwYNXOfOnUPK9u3b56pWrepGjx4d0r6s+3C4nJZrJM8++6yT5NLS0kLa3rRpUyfJbd682Tnn3H/+85+Ix6pJkyaFHK/nzZsXcjwZPXq0u+SSS1zDhg3dM88845xz7t///reT5L755puQZZLXuijIvAe2qUsvvTSkfPPmza5UqVJu4sSJIeUffvihk+T+9a9/RZxOYP1269bN9evXL2R8klynTp1C6l922WVOkps1a1awLHBMnjBhQo7z49z/PlNvueWWkPJoPisDwwbWo3O+ZT127NhsdaPZ/rw4fvy4S09PD3nVrVvX3XvvvSFlGRkZeY6rbt26rnLlyu7XX38NlgU+u6677rqQuueee67r2LFjjuPKyMhwhw4dcsnJye6RRx4JlgeW1ahRo0LqT5482ZUqVcpt2LDBOfe/dRx+bA9sM3//+9+D9aLZtgp6bC5pn2dnnXWWGzNmTK5tDpfrd2E/SWtcEWQhLm0FTjDOf8Yo6+WoWZ155pmqVKmSRo0apdmzZ+uHH37wNP53331XnTp1UtWqVRUfH6+EhARt3LhRGzZsyFY3vIOfs88+W0ePHtWOHTskSe+8847MTNdff32O01u8eLFatWqlevXqKSMjI/jq0aOHfvnlF3399dee2h8QHx+vvn37hpStWLFCrVu3Drn3NC4uToMGDdIXX3yh/fv3h9TP+it55cqVVb16dbVu3Tp4NkmSmjRpIkmel3O48GXZrFmzkEv/CrqcZs2apauuukoXXXSRhgwZog8//FC1atXSuHHj8tXeSMvXSxuffvppNW/eXMnJyYqPj1edOnUkKbidZWZmavXq1briiitUqtT/PqpatWqV56WGgbbUrVtXbdu2DWlL9+7dlZ6enu1y7by25bS0NMXFxenyyy8PqTdw4MA825KbFStWqG/fvqpUqVKwrEKFCurXr5+WL19eoHHnNU+LFy9W6dKldfnll2dbRoG25aVbt27BsweBaUgKbrtpaWnav3+/rr766pBpnHHGGWrSpEnINDZt2qRBgwbp9NNPV0JCghISEvT3v/894rGnZ8+eKlOmTMiw3333XbbplC1bVm3atAlOp0WLFkpISNDAgQP12muvaefOnVEty5ykpaWpdu3aIfcelypVKuSyU+l/yzL8LGLg78C67tChg0qVKhXszOX9999X586d1blz55CymjVrBo89AXmti8KY98suuyzk7yVLluj48ePZlnurVq1UoUKFkPX76aefqm/fvjrttNOCny1LliyJuH7Dz1AG5rVHjx7BssAxOdpjb3jbC/pZmVW0258Xy5cvD+4HgdfWrVs1adKkkLIuXbpENb42bdqoYsWKwb8jLdNAefiyeOWVV9SqVStVqlRJ8fHxKleunA4ePBhx3YVv+wMHDtTx48ezXa4ffmxv165d8BJTKfptqzCOzSXp8+yCCy7QzJkz9eCDD2rNmjXKzMyMej5igSAJnGACB/isvchlVbFiRS1dulS1atXSTTfdpDp16qhZs2ZRXab22WefqXfv3kpOTtbzzz+vVatWafXq1WrevHnEe6aqVKkS8nfgMqhA3V9++UVVqlQJ+cIXbufOnVqxYkW2D8wBAwYEx5Ef1atXz3bZ7p49eyIutxo1asg5p71794aUV65cOeTv0qVLRyyTFNU9ZbmJtCyzjrOwl1P58uXVp08frV69Ol/tjbR8o23jE088oZtuukldu3bVvHnz9MknnwSDXWCed+/erfT09JD7sAIilYXbuXOntm7dmq0tF154YUhbAvLalrdv367KlSuHfFGPti25yW2bDN8evcprnnbu3Kljx44pOTk5ZBlVr15dUnTbVDTTkKSuXbtmWxf/+c9/gtM4ePCgunXrprVr12rq1Kn64IMPtHr1al177bUR7zcMX2aB6Vx33XXZprNw4cLgdBo2bKi3335bx48f1zXXXKMaNWqoVatW+Q7t27dvj2obDdzTFd7uwGWBgferVKmi5s2ba+nSpdq9e7e++uorderUSZ06dQo+xmDp0qXq1KlTtmnmtS4KY95zWu4NGzbMttz3798fXO4//PCDunTpoj179uiJJ57QRx99pNWrV6tnz54Rj505HWcjlUd77A1ve0E+K8NFu/15cf7552v16tUhr5o1a+r6668PKQtcLp+X/C7TN998U1dddZV+97vf6eWXX9bHH3+s1atXq1q1ahGXffi2H/g7/J7BnPabQL1ot63CODaXpM+zJ554QqNGjdI//vEPXXDBBapevbrGjBkT7BejpOEeSeAEs2jRIiUlJen888/PsU6LFi30+uuvKyMjQ2vWrNGUKVN05ZVXau3atWrWrFmOw73++uuKj4/XvHnzQg7Ke/fuDTljEq2UlBTt2bNHR44cyTFMVq1aVdWrV9djjz0W8f287oXLSaQztlWqVNHPP/+crfznn3+WmWX7IlaSFMVycs7leGY7L5GGi7aNc+bMUZcuXULuU9y8eXNI3ZSUFCUkJATPnmW1Y8cO1a1bN9f2Va1aVfXq1dMrr7wS8f1ozmpmVbNmTe3du1fp6ekh+0ak9nmR2zZZ1Ntj1apVlZSUpA8++CDi+7Vq1SqUaUi+exoj3ccWuD8yLS1NW7du1QcffKD27dsH38/p+arh219gOlOmTFHXrl2z1Q98aZYUDGZHjx7VypUrdd9996lPnz7asmWLUlJSPM1fzZo1I3YuFL5dBNblzz//rAYNGgTLA+s+0P5A++bOnaulS5eqatWqOuecc1SzZk3t3LlTK1eu1Oeffx68P8+rgs57Tsv9nXfeyRZIsr6/ePFi7du3T6+88kpIx0HF+eU40jErv5+V4bxsf9EqX768WrZsmW08tWrVylZelObMmaOGDRuG3OOYnp6ercObgB07doTs64F94fTTT89WL9KwLVq0kBT9tlUYx+aS9HmWnJysKVOmaMqUKdq6datee+013XXXXSpdurSmTZsW9TwVF4IkcAKZN2+eFixYoNGjR6ts2bJ51o+Pj1fr1q01adIkLViwQN98842aNWsW/KX6yJEjwS9yku9DPS4uLuSg+v7772vbtm2qV6+e5/Z2795dU6dO1d///vccb3zv2bOnnnjiCdWpUyd4JqSodOjQQY8++qi2bNkSDBKZmZmaO3euzj333JBlUdgSExNDeq7zqrCX0/79+7Vo0aJg74WFIdo2Hj58OOTyYEnBHnED4uLidMEFF+i1117ThAkTgpcDffzxx9qyZUueQbJnz556/fXXlZycnO0SwPxo06aNMjMz9frrr4dcMjVnzpyohk9MTNSBAweylXfo0EGLFi3SgQMHgtvfgQMH9Oabb+b5kOrC2KamTZumffv2RX15nFdt27ZV+fLl9e2332rYsGE51gsEivAfsN54442optO4cWOlpqZq3bp1uuuuu6IaJjExUZ07d9bBgwfVv39/bd68WSkpKZ6Wa5s2bTRjxgytWrUqeHnr8ePHs/2A0aFDB0m+7WXs2LHB8pdeekmSQjpO69Spkx555BH97W9/U8eOHWVmql69us466yyNHz9emZmZeT7uqDjmXfJdTluqVClt27ZN3bp1y7FepPW7ceNGrVy5MluPtLGQ02dlJKVLl862jPKz/Z0oDh8+nO3ROrNmzcrxkstXXnklZPucM2eOSpUqFbwaJCD82L5y5Ur9+OOPatOmjaTot62CHptzUhI+z+rWravbbrtNL730Uono/TcSgiRQQn3xxRfavXu3jh07pm3btmnhwoV69dVX1a1bN02ZMiXH4RYuXKhnn31Wl156qerVq6dDhw7p8ccfV/ny5YMH6KZNm0qSHn74YfXq1UtxcXFq2bKlevbsqUcffVTDhw/XiBEjtHHjRk2aNCnbL4nR6tSpky6//HLdeuut+uGHH9S5c2elp6drxYoV6tOnjzp27KgxY8Zo7ty5uuiiizRmzBg1btxYhw4d0vr16/XBBx9E/UUyGmPGjNHMmTPVrVs3TZw4URUqVND06dO1cePGbN3QF7amTZvqgw8+0MKFC1WjRg2lpKR4OitWkOX00EMPacOGDerUqZNq1aqlrVu36qGHHtLPP/8c/CJbGKJtYyDAPPjgg7rwwgv1/vvv67XXXss2vokTJ6p79+669NJLNWrUKO3atUvjx4/P1ktgJFdffbVmzJihLl266LbbblPz5s117Ngxfffdd1qwYIHmz58f1Y8xAd26dVP79u01atQo7d69O9gzYLQf7k2bNtX06dM1d+5cNWjQQOXLl1fjxo117733auHCherSpYvuvPNOmZmmTZumw4cP67777stznHv27NHTTz+tli1bKikpKXhfXDQ6duyoQYMG6YorrtCtt96qCy+8UKVKldKWLVv01ltvadq0aWrUqFHU44ukQoUK+stf/qKbb75Zu3btUq9evVSxYkX99NNPWr58uTp27KjBgwerbdu2qlChgm6++WZNnDhRhw4d0uTJk5WSkqJ9+/blOR0z01NPPaX+/fvr2LFjuvLKK5WSkqIdO3boo48+Up06dXTrrbfqmWee0YoVK9S7d2/Vrl1bu3fv1pQpU1SrVq1gcPCyXIcNG6apU6fq97//vR588EFVr15dzzzzTLb7rc866ywNGjRIEyZMUEZGhtq2bau0tDRNmjRJgwYNCukR++KLL1ZcXJzee+89PfXUU8HyTp066cknn1SdOnVUv359z+uisOddkho0aKA777xTf/jDH7RhwwZ16NBBSUlJ+uGHH7RkyRKNHDlSnTp1UteuXRUfH6+hQ4fqtttu0/bt2zV+/HjVqVMn22OOiks0n5WRNG3aVIsWLVLPnj1VuXJl1apVS7Vq1Ypq+5N8Z+dHjBihpUuX5vljUUnQs2dPzZ8/X2PGjFHfvn316aef6vHHH8/xKqW33npLt99+u7p3765PPvlEEydO1NChQ7MdSw4cOBBybL/77rt15plnaujQoZKi37YKemzOSaw+z9q0aaN+/frp7LPPVnJyspYvX661a9fm+kNcTBVFDz6nyoteW2Mvmp6qTjSBns8Cr6SkJFenTh136aWXuldeeSXY42JAeK+t69evd1deeaVLTU11iYmJLiUlxfXq1cutWrUqOExGRoa76aabXLVq1ZyZOd+hwOfxxx93qampLikpybVs2dItWbLEdejQIaRXsUAPfkuWLInY9qw93KWnp7vJkye7M8880yUkJATbs379+mCdPXv2uFtuucWlpqa6hIQEV61aNde+ffsce3TMOm7l0GtrTr0url+/3vXv399VqFDBJSYmulatWrl///vfIXVy6tU2Us+rOS2LcN98841r3769K1OmjJPkhg0bluu0hg0b5urWrRtSlt/ltGDBAte2bVtXtWpVFx8f76pUqeIuueQS9/HHH+c6XE5yW77RtPHw4cPuhhtucCkpKS45Odn16dPHff/99xHX5csvv+waNWrkSpcu7Zo2bermzZuXbXvMyZEjR9z48eNd48aNXenSpV3lypVdy5Yt3fjx44PL28u2vHPnTjdw4ECXnJzsKlas6K655ho3f/78qHoG3L59u+vVq5dLTk7O1kvfqlWrXJcuXVy5cuVc2bJlXefOnaNaNwcPHnQDBw50lSpVcpKC24uXecrMzHSPPvqoO+ecc1xiYqKrUKGCO+ecc9ztt98e0sNj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "xmin = 0\n", "xmax = 200\n", "step = 1\n", "\n", "sns.distplot(df.query('strand1==\"+\"').dist_rfrag1_left, bins=np.arange(xmin, xmax, step), label='Distance from the 5\\' read end to the nearest upstream rsite, + mapped reads')\n", "sns.distplot(df.query('strand1==\"+\"').dist_rfrag1_right, bins=np.arange(xmin, xmax, step), label='Distance from the 5\\' read end to the nearest downstream rsite, + mapped reads')\n", "\n", "plt.xlim(xmin, xmax)\n", "plt.legend()\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "2cfd8a30-79d4-4926-b0e9-809ac185228c", "metadata": {}, "source": [ "However, if we select only the pairs that map to the restriction sites, there is no significant skew in scaling:" ] }, { "cell_type": "code", "execution_count": 10, "id": "97eac9b5-2b51-4529-9056-48d061c30d6b", "metadata": {}, "outputs": [], "source": [ "hg38_chromsizes = bioframe.fetch_chromsizes('hg38', \n", " as_bed=True)\n", "hg38_cens = bioframe.fetch_centromeres('hg38')\n", "hg38_arms = bioframe.make_chromarms(hg38_chromsizes, \n", " dict(hg38_cens.set_index('chrom').mid), \n", " cols_chroms=('chrom', 'start', 'end') )\n", "\n", "# To fix pandas bug in some versions: \n", "hg38_arms['start'] = hg38_arms['start'].astype(int)\n", "hg38_arms['end'] = hg38_arms['end'].astype(int)" ] }, { "cell_type": "code", "execution_count": 11, "id": "28358a56-a6fe-4ec7-9ca6-52822a6224b9", "metadata": {}, "outputs": [], "source": [ "import pairtools.lib.scaling as scaling" ] }, { "cell_type": "code", "execution_count": 12, "id": "3769c57b-78c7-48e4-85bf-710f7f459e1e", "metadata": {}, "outputs": [], "source": [ "def plot(cis_scalings, n, xlim=(1e1,1e9), label='' ):\n", " strand_gb = cis_scalings.groupby(['strand1', 'strand2'])\n", " for strands in ['+-', '-+', '++', '--']:\n", " sc_strand = strand_gb.get_group(tuple(strands))\n", " sc_agg = (sc_strand\n", " .groupby(['min_dist','max_dist'])\n", " .agg({'n_pairs':'sum', 'n_bp2':'sum'})\n", " .reset_index())\n", "\n", " dist_bin_mids = np.sqrt(sc_agg.min_dist * sc_agg.max_dist)\n", " pair_frequencies = sc_agg.n_pairs / sc_agg.n_bp2\n", " pair_frequencies = pair_frequencies/cis_scalings.n_pairs.sum()\n", " mask = pair_frequencies>0\n", " label_long = f'{strands[0]}{strands[1]} {label}'\n", "\n", " if np.sum(mask)>0:\n", " plt.loglog(\n", " dist_bin_mids[mask],\n", " pair_frequencies[mask],\n", " label=label_long,\n", " lw=2\n", " )\n", "\n", " plt.gca().xaxis.set_major_locator(matplotlib.ticker.LogLocator(base=10.0,numticks=20))\n", " plt.gca().yaxis.set_major_locator(matplotlib.ticker.LogLocator(base=10.0,numticks=20))\n", " plt.gca().set_aspect(1.0)\n", " plt.xlim(xlim)\n", "\n", " plt.grid(lw=0.5,color='gray')\n", " plt.legend(loc=(1.1,0.4))\n", " plt.ylabel('contact frequency, \\nHi-C molecule per bp pair normalized by total')\n", " plt.xlabel('distance, bp')\n", "\n", " plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": 13, "id": "bf07b649-d184-4ded-827b-d8ff3f9f4284", "metadata": {}, "outputs": [ { "data": { "image/png": "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T7kvvfRSxB133JE0ZsyYyhEjRlS19hpdc801vc4777yim266aY/D4VClpaWGc845p9+QIUMqFyxYsDcwMNCVkZFh+f7775veX7G236eeemr/hlPD66anv/fee0GXX355n4kTJ5a88sorewGefvrp6ClTpvTfuHHj1j59+nT6FGhPT/F9EKgATgZKgDzgDq3110qpy4F5wAWea55oj+/2FAAwpnf4UY1uOl1OlmYsBeD24bdTvr17p8IbTWa8/QOoqiinqrycGpt7hNHXYGfvsgicVUYM/v5E/+1+AqdPP6KvMX37U5qXS/audMITerD562UADJky9bBygyfG88v/9pPxcx5lhTYCw36bspyxyf37LbxHMjk7Mzm4fUsTAepvI6gAfUaNISQ2nuKsg2z++n8MO/0sAKptNg5s/RVlMHDbhfdxV0AgP2UWsea1t/DPqUQbInACLsdBqq0OVr34GeecU40K7QlxaWDusg/IhBBCiDZxuVzUjYo1Pm63//b3sVIKk6njf976+fk5v/rqq91GozufTkpKStUZZ5zRf8GCBWFz5swpAHjsscdy6so7nU6mTZtWnpOTY/7Xv/4V0ZYA9cYbb8y7//778+qev/rqqyF2u1299tpr+0JDQ+umMnX4j59zzz23aNq0aSUJCQn2jIwMy3PPPRd99tln91uyZMmus88+u831Op1OHn/88djx48eXffjhh5l1xyMiIhw33nhjr5auXbt2rV9AQIBz8eLF9QNNF1xwQf2UsbS0tCp/f3+X0+k8Yir00KFDq1999dX66xwOB6ecckpF3759h3z44YdBV155ZUnD8rfddlvOHXfcUQhw3nnnla9duzbggw8+CL3jjjsKY2NjHb17964GGDlypHXQoEEtrsOdMmVK5fPPP++wWCy6qSnSQ4cOrXz//ff31T1fv36999KlS0PnzJmTXTfV/IILLigzGo08+eSTsT/88EPOSSedZKsrn5iYWP3xxx9nAsyYMaNs7dq1AUuWLAl78cUX995yyy1FAOPHj6+MiYkZ9u6774aMGDEiu6X2AkybNq345ZdfPlj3fM2aNb5lZWXGp5566mDDe99+++3NTlmu62tTU8PvvvvuhJEjR5avWLGiflbrWWedVda7d+/BjzzySHTD17izeDpAHQs8r7XerZSq27/DAKC1fkspdTLwBDC1uQrEsWPtbneAOu4os/f+mPMjudZc4vzjSI1MZc32NZ3RvHbxCw6hqqKcypJiqmuTGpkrqnFWGfEZnkrck09ijotr8tqYvsnsWLuarF07CIqMpjQ3h4DwCHoMTT2snH+IF31GRLLzx1w2rzzIuJl968/t/cX9+63vqOHk7FzGwe1HZtktrJ3iGxbvnrFhMBgZd9HlLH32Mb555zX6jDgJ/9AwMjb+iMvpJHHQkPo1piOSQhl2/228v243OUtW4rdPgyMHZS/jYE4Y8z6dz/mmNfQM7AnX/Q98Q4+4vxBCiN+XY3nksjWff/55wPTp0/s1Pv7cc8/FPPfcc/VTYUeOHFnx448/poM7sNH6t8E2g8FAXeDZnOnTpxc3LHP66adXRkVF2detW+cHFABs3rzZ669//WvsDz/8EFBYWGh2udwxpcViadN6xFmzZpU0fD5y5EiryWTS559/fq+rr7668PTTTy+Pi4vr8PrAJUuWHDZqd8kll5QMHDhw4N///vfYs88+O7256xrLyMiw5Obmmv/yl78canj86quvLr755ptb7OtJJ51UWVZWZjz33HN7zpo1q+i0006rCA8PbzVBUZ3HH388YvHixREHDhzwqhupBNixY8cRn5rPnDmztOHz5ORk25YtW7pkKti5555b0vD5ihUrAgCuvfbaw4K/6667rvDJJ5+MXb58eUDDIPG00047rK39+vWr+uqrrzjvvPPqg/eIiAhnaGio/eDBg23KiDxz5szihs8HDhxYHRAQ4Lzpppt63HjjjXmnn356eUdHOTdv3ux14MABr7lz52Y3/CAoICDAlZqaWrlu3bpmR2WPhqfXoHrz2xTeuk80Gs4N/QkY060tEh3idGnWZbjXSY7rc3SZdT/d8ykA5/Q+B4PyzFvULzgYgMrSEiprEySZbS5MIb4kLFzYbHAK7gAVIGf3Tn5d/gUAg085HYPhyF+KQ6e4Rz+3rc2mpsr9u6imUpO3rxyT2cDgycMxms0U7M/EVnH4h55FtSOoYXG/ZT/vN3ocvYaPpMZmZcXilwHY9aM7OVOfUWMPu95kNHDZuH7c8Y/H0SExaKWIObQEgIDMy3g9M5EbXaW89O7Z7MjbfNgveSGEEKI7jRs3rnL16tXbGz4iIiLss2bNKmh4bNGiRZl114wdOzbZYrGk1T3uuuuuVrd8iYqKOuIP+fDwcHt2drYFoLS01DB16tR+27Zt8/373/9+8Msvv9yxevXq7RdeeGFBTU1Nm6aPNZ5eOmjQoOqPP/54l8vlUjfffHPPhISEoUOGDOn/2Wefdcof/yEhIa5TTjmldPPmzX7tue7AgQNmgOjo6MOCZbPZXD8dtznTpk2rWLx4cUZWVpbliiuu6B0dHT107Nix/X744YdWM1w+/PDDkX/5y18SJ0yYUPbWW2/tWbVq1fYVK1bsAKiqqjriD8PIyMjD2mexWHRNTU2X/AEZFxd32GtXVFRkgiNf07rMv0VFRYf98RcSEnLYz63uQ42IiIjGP2PdVF+bEh8ff9i9w8LCnF9++WV6VFSU/e677+7Rt2/fIX379h342muvBbelvoays7NNAHPmzElq+G/JYrGkrVy5MqhuynZn8/QI6iEgHkBrXamUKgZSgf/Unu8NHHepnY9H27LKKLXZiQ/xISG06Q+tSqtLWXVgFWcknYG3qelpo5X2SpbvXw7A9F7Tu6q5rfINqt1qpqSY8vQtAHg7nMQ8cB9G/5Z/X0T06IWxNjNucfYhlDIwaPJpTZaN7BFITJ8gsneX8tXibVRV2MnZ6w4EEwaE4uPvQ0yfZA5u38KBLZvoN3o8ANXWSiqKCjGZLQRGRtbXp5RiynW3cGDbLexe/z3bv1lJ5qafAQ7b9qahIF8zw0eP5OcvP6VgYBRehTlUe0czYt/pJHz/CWtTSvhL3iWUJEVwUcqFXJZyGUFeQU3WJYQQQnSFkJAQ14QJE6wNj5nNZh0TE2NvfLzOokWLMktLS+sDhLZsgZKbm2tufKygoMA8cOBAK8DXX3/tn5WVZfnyyy/TzzjjjPo1nc8++2yb1zYZDIYjPvGdPn16+fTp08ttNpv66quv/P/xj3/EXnjhhX337NmzOSYm5qizrWrd9I4BLakLsnJycg6LF+x2OyUlJa3uKXrNNdcUX3PNNcWlpaWGzz//POD++++Pnz59et/s7OxfWxrJ/uijj0LHjBlTvmjRovppqzt27Gjz/qpdSSl12GsXGhrqAHcwP3DgwPrpw3XBfVhYWJdnym3qdR07dqxt2bJle+x2O2vWrPF75JFHoq+77rreAwcO3Dpy5MhW17XWiYiIcALcc889h6ZOnXpEVs+6ddmdzdMjqN8BUxo8Xwr8SSl1v1Lq78AfgW890jLRLmv31E3vbX709PWtr3Pf2vt4cN2DzZZZvm85NoeN1MhUEgI9ty9yXSbfiqJC8pZ+AkBwhAX/M85v9VqT2Uxkz94AuJxOeqWNJCC0+Z9L3Shq5q8F5GS4Z35E9QxkxFlJACQNc+e0yNi4vv6aokPu/7NDYuOOGJkNDI/g5EuvAuDLl57FUVNNTJ/kFtsQ13+gu75QC9Pud69d3Z94KuWBA+hbeDKX/nQtl3z1B7a9v5YzPprK/J/nU1JV0urPQgghhPCUoUOHVk+YMMFa90hKSmo1QP30009DGq51/d///ueXm5trHj16dCVAZWWlAdzBcV2Z/Px841dffRXcGW328fHR55xzTvncuXNzbDabYefOnUcdmBUVFRm+/vrroCFDhrRr25levXrVREdH13z00UeHrfN57bXXQpxOZ5uj3aCgINcll1xSevXVV+fn5+ebc3NzTQAWi8XV1CihzWYzmEymwwKfl19+ucPT8+qCqNYSO3XEqaeeWg7wxhtvHJbNc/HixaEAU6ZMqWjquu5iNpuZMmVK5SOPPJLlcrnYvHlzsyPYZrNZN5xODTB06NCq2NjYmm3btvk0/LdU92g4fbkzddoIqlLKiXtE9D6t9RttvOxF4DyllLfWugr4MzAc+Eft+R3AnM5qo+g63+1xT70f26f59aeZZZkAfLLnE6YmTeXk+JOPKPPJHncweE7vczq/ke1QF6AWrl5FpdUO3t5ETmv7UuiYvv3r90JtnBypsZ5DIxhxVhL2aifxySHsydnMlNNH1J/vnTaKb999nYyN63G5nBgMRgoP1mbwjU9sss5hp53F9m9Xkb1zB+BOoNSS+BR3gJq1cweRPfwYMC6GbWuz2TTk1sPKpWadS3DxP1lU8wrvbn2DV898k+Sw/lSWuj809AvqcMJBIYQQwuMqKyuNp512Wp8bb7wxPy8vz/Tggw/G9ejRo/qWW24pBDjllFMq/P39nbfffnvifffdl1VRUWF44oknYkJCQhwVFRWtjio25Yknnoj45ptv/M8888zSHj161OTn55ueeuqpmIiICHtaWpoN3NuU9O/ff3DDZDxN+dvf/ha1c+dO70mTJpXHx8fb9+7da5k/f35UQUGB+dVXX93b3HVNMRqN3H333dlz587tMXPmzKRLLrmkaOfOnV7PPvtsjL+/f4tTfGfPnh2bl5dnnjRpUllCQoJ93759loULF0b279/fVrf/ZnJyctWbb74ZsWjRopDk5OTqoKAg59ChQ6tPOeWU0pdeein6L3/5S/To0aMrly9fHrh06dIOb+cwZMgQG8Czzz4bce211xZaLBY9atQom7e391GP/o0YMaLq7LPPLnr66adjHQ6HGj9+fOXatWv9nn322Zizzz67qKsCuJa8++67QYsWLYo455xzinv37l1TUVFheOGFFyL9/PxcEydObDZg7t27d9Xy5cuD/vOf/5SFhYU5EhMT7UlJSfZnnnlm/2WXXdZ72rRp6sILLyyKiIhwZGdnm7/77jv/xMTEmgceeCC3s/vQmVN8DwB+wGtKqdla6+GtXaC1/hH4scHzHKXUEGAw4AR2aK3bvKBadI+KagcurQn0ds+CqXG4WL/Xvf50TAsJknIq65Pe8Y/v/8GSc5fgb/ltumxWRRY/5vyIxWDh9KTTu6j1LXNVVVHx9dfULPsfACVbt1Btdv++CRg4qc311K1DDQiLIGlYy/8UDAbFSef8lgwvs+jwDyXD4hPrt67J3rWTuOSUBhl845usUxkMnH7jH3nzz3fgcjro20qA6hccUp8B+O175jD+khs4mO5dHzTH8iM/rfOh0ieK07YMYtT+n3n4XPjrV3/gtTM/54MHN+Byamb+OY2Q6HYtcRFCCCGOGbNnz87evXu3180335xUVVVlOOmkk8pffvnl/XWjcLGxsY633357z5///OeEq6++undERETNTTfdlFdUVGSaN29eh/YtHT58uHXZsmWB//znP+OLiopMQUFBjhEjRlS8/fbbGf7+/hqgvLzcABAdHd3iKHD//v2rli5dGrJs2bLg8vJyo7+/v2v48OEVr7zySubkyZObnArdkjlz5hRUVFQYXnrppahPP/00tG/fvrY33ngj49prr+3Z0nWjR4+ufOGFFyLvvffehNLSUlNoaKhjwoQJpU888UR9cP33v/89e/fu3V6zZ89OslqthroEV48//nhWSUmJ8ZVXXomaP3++YdSoUeVffvnlzpSUlMHtbT/AmDFjbHPnzs168803I95///0Il8vFjh07NicnJ9d0pL7GPvzww8y77rqr+t133w1/7rnnYiIjI+233HJLzpNPPtlqBt6uMGDAgCofHx/Xk08+GVtQUGD29fV1DhkypPKTTz7Z2bt372bfP88999y+OXPmJM6aNatPTU2Nqvsw5OKLLy4NCwtLf/jhh2Nu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3vdshv+0mC1XXszA19/D6H/EUiIhhBCiW6xcuTLopptuip86dWrZunXrfJ955pnY888/v7Bu/elZZ51Vunjx4siZM2f2vPbaawt27Njh/fTTT8c0NXW3rS655JIe/v7+zrFjx1ZGR0fbt2/f7v3RRx+FjR8/vj6xzfPPPx92xx13JLW2lvacc87pmZSUVJ2WlmYNCQlxbtiwwff555+PjoyMrLn77rvzmruuKUOHDq2ePn160ZNPPhnrcrmoy+K7cuXKoNaunTJlSu/Bgwfb0tLSrKGhoY4NGzb4fvPNN4GXXnppfVbb3r17Vy1fvjzoP//5T1lYWJgjMTHRnpSUZB86dGjlSy+9FBUTE2OPiIhwvPrqq2G5ubkdXguUkpJie/fdd8Mff/zxiNGjR1f6+PjohutCj8att95a+Morr0RdcsklfRpm8f3uu+8Cn3zyyX0dyXB7tGbPnh2bl5dnnjRpUllCQoJ93759loULF0b279/f1tz07EGDBlUZjUb96quvhoeHhzu8vb314MGDqwYOHFh9880359xzzz2J6enp3pMmTSr38fFx7du3z7J8+fLAG264oWD69Omtru1uzNN/lc9s8H3/2kdjbVow3UjjpEsLar+uxp3MCa11pVLqFNz7kr6JOznSCmC21rrFjFgnohyrO9B02YMJ8//tQ8Aze57JUz89xY85P7KnZA+9g3sffl0XBai2XzfjqqjAkpSEOc49omvu0YPq7dupKbTiEx8CfhFU7XCPpoZdfz0l77+P9aefKHhxAdaffgKXi9CrrsJnsKw/7SoGgyI8PoCcDPea/0mX9ie6V/O/t/qMHE1ITBzF2YdIO306+76wUxKaxrY+B0jZupyfLj6b4W//B3NwuxJtCyGEEJ1i8eLFe5966qmoyy67rLfZbNazZs0qeOmll+qzoc6YMaPsoYceOrBgwYKoZcuWhfTp08e2cOHCvY888khsR+85duzYijfffDP8o48+CquoqDBGRETYL7jggqInn3zyUF2ZyspKAxy5RraxgQMH2j766KPQV199NdJmsxnCw8MdU6dOLXnssceyWlv72ZQ333xz3x/+8AfnSy+9FP3888+r0aNHl7/22msZZ5xxRlN/09cbP358xZIlS0Jee+21yKqqKkN0dHTNzTffnPvoo4/WZ4J97rnn9s2ZMydx1qxZfWpqatScOXOy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oYTQQwi9NynSFFBRsVw76EVAUa+iqIgFQQUUC5/YCyqKiigiTVApgiIIhB5KKOm9zcz+/pgEA4SQQWAo632e85A558zea88EmDW7GZRLFzMXQghRA3a7nap6bux2O2VlZcceK6UwmZz5eHs8Ly8v2+LFi3dWfFhv1KhRcZ8+fRrOmjUraOzYsekAzz///OGK+202G/379887fPiw+e233w6pSYJ61113HX388cePTZV75513AsrKytS7776bEhgYWJGw5Z1pGwYPHpzZv3//7Fq1apXt3r3bMn369PABAwY0mD9//o4BAwbUuNykpKRib29vu81mO2m48sSJEyPMZrN9xYoV24ODg20AgwYNyq1Tp07ziRMnRv7444+7rFYrzz33XFSbNm3yFixYcCzpatKkSXHfvn3jZ86cGTxhwoQTpwwCjqGoc+fOLYWTh0rPnTs3peJnq9XKsGHDcuLi4pq+8cYbwW3btt1f+d6EhISCyvdXpV69emVFRUWF5T+XnFhfdna2acGCBVs6dOhwLOns27dv3dO1v+LegoICw6uvvppSMXS4Vq1aZe3atWu8ePFi/507d26u+H3dvHmzx7vvvhtqtVpP+zucl5dn/P3337fExMQcGxK2du1a706dOuVW/t264YYbcqprd1RUVBlA9+7dC8zmf/oZ33rrrcANGzZ4L1y4MLki7sGDB+cBvPTSS5FPPvnk4aioqHM2HM2Zv8FzgbFKqU9xzEGF8qG+Sqk7gCHAI07W7w0scPI54jwK9QzlurDZTF+STEgP57aYqWCJjaVwzRpK9+yB0HzY+RO4+UGPJ0ApGDQT0pLhyCb4+l4Y/tEpy7KmOkZ8m9ztkHgT/PEBfPEfsJWBwQSBdc8oRnHxq58USmlxQ5Z9uI3fvtpFabGVTcsPOq61bMP21T9gK9vNwdB4GiUrbO/8wiPufXjquvl4WLxOU7oQQlz8LuSey9NZuHChz8CBA0/aLWL69OkR06dPPzYUtnXr1vlr165NBkfyovU/s9IMBgOnm8s4cODArMr39O7duyAsLKxs9erVXkA6wKZNm9weffTRyDVr1vhkZGSY7XZHTmmxWGo0L3H48OHZlR+3bt260GQy6auvvrrurbfemtG7d++8f/Phf/78+cdNj7v++uuzmzRp0mTixImRAwYMSD7Tcitbu3atT48ePXIqkjOAwMBA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uabuX3/9te1M2nEirfVZWxshODjYCnDo0KGTlrJNT083N2vWrAD+ScD2799vbtKkybH3af/+/WaAoKCgGg83rjBv3rzA9u3b582ePftYL/G2bdssp7rfYDD866mGJ75nNW3/uVTVexkVFWX94IMP9gH7Nm7c6DZ79uzgadOmRYaEhFgffvjh0w4brszf39/WunXrvP/973+Hq7peu3btf5X4O/2VvdY6W2s9V2v9gtb6ea31Z/8mOVVKxSmlXlNKrVNK7VRK7T7h2HWmZYtLg/bwwFSepEoPqriQWdxNdL+xIZFx/sedv6JffZQRtKElBqWwGuxoezaUOealbltd5b/vQgghLjCffvppQOXH77//foDBYKBTp04FAIWFhQaDwXBc4vPNN9/4HDp06JRJkjNCQkJsd955Z9bAgQMzd+zY4XE2yvz55589U1JS3Fu1auV04mQ2m3XlYbQACQkJxUFBQdbPP//8uNdq8eLFXqmpqZbOnTvnA/Tq1SsPHK9h5fvmzJkTCNCzZ898Z+MpKioymEym4xLGN95447zOo6lp+10pISGh5NVXXz3o6+trq9hCpyoWi8VeVc9z165dc7Zu3erZsmXLoi5duhSeePzbrZGcXv1LKdUNuAIIBaZprbcppbyB5sDfWusaT4pVSiUCPwNmHHNa6wJ/AwFAJI7e2dMtvCQuA56tW5H77QLc4+JcHYoQTrN4mPCLgew9Ckz1oWwHfmmLabp3E7+1m8SO9al0uyEei8c//yTv/jONtH15tB5QB4NBVvwVQogLwbJly/zuvvvu6L59++auXr3a86WXXoq8+uqrMyrmn1555ZU5c+bMCR02bFid2267LX3btm3u06ZNi6hq6G5NXX/99bW9vb1tHTp0KAgPDy/bunWr+7x584I6dep0bI5ixf6up5tLO2jQoDqxsbElSUlJhQEBAbb169d7zpgxIzw0NLT0oYceqnaxoKrUq1ev+KeffvL76quvcoOCgqwxMTFlsbGxZY888sjB8ePH1x48eHCdm266KWP//v2WyZMnR9WuXbvkvvvuSwdo1apV8YABAzKnTZsWabVaVadOnQp++eUXr1deeSViwIABmWcy/7RHjx45r7/+evgjjzwS3q5du4KffvrJd8GCBQGnf+bZYzKZqEn7z6eMjAxj165dG1x77bUZjRs3Ljabzfqrr77yz83N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tT7t+/Dhhx/633rrrfUSExPzp02blhIaGmrdtGmTR0pKyimXj1+zZo1Hv379GtarV6/otdde26uU0lOnTo3o169fw2XLlm1t3759UU5OjmHQoEENmjdvXjBr1qw9vr6+9t27d1t+++23Y0nYzp07zR06dGgUFBRknTx58v6wsDDrp59+GnjrrbfWMxqNO2+88cacquq/99570w4ePGj+7LPPghctWrSt8hDf3NxcQ9euXeNzcnKMjz322MGYmJjSDz/8MOjee++tU1hYaHjwwQdPu2PJ+PHjY7p3754ze/bsPUVFRQaAQYMGxfn4+NheeumllJCQEOv+/fst33//vZ/NZlNms/mkHtbPPvts51VXXRXXsGHDoieffDIVIDw83AqwatUqzyuuuCK+cePGhdOnT0/x9PS0v/nmmyGDBg1qsGTJkm2dO3cuPF2MF7vqEtQyoPIvXzfg/85m5Vrr2LNZnhBCXC68/AMYNPZ+Zo+tS3H2T9ite9lUJ4COW49gHzeZHbsPE3evzEkVQlwa7HY7VS14Y7fbqeilAseUCJPJmRlsx/Py8rItXrx4Z0VS06hRo+I+ffo0nDVrVtDYsWPTAZ5//vnDFffbbDb69++fd/jwYfPbb78dUpME9a677jr6+OOPH+uMeeeddwLKysrUu+++mxIYGGgvP513pm0YPHhwZv/+/bNr1apVtnv3bsv06dPDBwwY0GD+/Pk7BgwYUONy7XY7Dz/8cK2GDRsWrl69OrniNbnqqquqLWPixIkRZrPZvmLFiu3BwcE2gEGDBuXWqVOn+cSJEyN//PHHXRs3bnTPzc01Tp069UDbtm2PzcscPXp0RsXPjz76aKTWmpUrV24LDw+3AQwdOjS3Q4cO5kmTJkWdKkGtV69eWVRUVBlA9+7dC8xm87Frr776alBKSorbt99+u73itbj22mtzO3ToYH722WejxowZk36635+EhISCuXPnplQ8PnTokCklJcXtww8/PC5pvueeezJPVUbHjh2LLBaLDgwMtJ449Hf8+PHRERERpb/88st2d3d3Xd7unAYNGjR56qmnIn766add1QZ4CajuHdgJ3KSU2gBUvNhBSqmYap5TMa9TCCHEOWayGKmXWJ/taw2U5s4mx+LFylYWOv9einXm22wpyKPxQ0+5OkwhxAXiQu65PJ2FCxf6DBw4sMGJ56dPnx4x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Bg4cmDVq1Khdq1ev9nr55ZcjCgsLDfPmzdtbcU9qaqr53nvvPRITE1OWn59v+Oijj4L69u0bv2rVqq1t27atdkjvnj173MePHx8zfvz41Pr165eGhIRYX3/99cCnnnqq1pgxY1K7du2aX1hYaNi4caNHRkaGM5/jj3P77bfXHTp0qMnHx8fWuXPnnJdeeulgXFxcacX10aNHZ4wePfq0w1/vuuuu6NmzZ4dde+216RMmTEg1GAz89ttvXnv27LEAVfYITp06NXj8+PG1+/fvn/X0008fPHjwoPmZZ56J6tq1a/zGjRu3+Pn52RctWuQ9atSoOrfeeuvR5557br/dbldbtmxxz87OPtbmTz/91G/EiBH1u3btmv3mm2/uAZg2bVp4z549G27YsOHv+vXrl1VV/+uvv55y00031bHZbGrWrFkpAP7+/jaANWvWePTr169hvXr1il577bW9Sik9derUiH79+jVctmzZ1vbt2592SPaQIUPq33jjjekPPfTQYYPBwJYtWyzXX399/b59+2Y99thjqRaLRScnJ7vt3r3brarnx8TElL333nu7brnllnr33nvv4auvvjoboFGjRiUAU6ZMCXn44Ydjhg0blvHoo48eys3NNTz33HOR3bp1i9+8efPfAQEBzuZjFxxnfrHXAzcqpV7UWh/35iilPIAbyu9xRjDwbTXXvwY6O1mmEEIIJ0U2aMiGhV+Tun0r7Yddz7Z2FnYvXUqJzmJT7do0X7mS3IUL8evf39WhCiEuQ3a7HZvNVuX5srJ/8hClFCbTPx9vrVYrWuvj7geOew6A0WjEYDj9wMLu3bvnvPXWWwcAhgwZkluewET99ddfh5o3b14CMHfu3JTK9Q8bNiwnLi6u6RtvvBHctm3b/dWVn52dbVqwYMGWDh06HPus/dprr4U0aNCgcOrUqYcqzl133XU5VZdQvYCAAOudd955pFu3bnl+fn629evXe77yyisRHTt29Pnjjz+2REVFWWta1ubNm93efvvtsNtvv/3I//3f/x2oOD98+PBTxma1Wnnuueei2rRpk7dgwYLdFeebNGlS3Ldv3/iZM2cGT5gw4egvv/zi5ePjY5szZ86x12vIkCG5lct66KGHarVu3TpvyZIluyrOXXnllbn16tVr9uyzz4ZXfm5lSUlJxd7e3nabzcaJw2onTpwYYTab7StWrNge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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Get the pairs where R1 is far enough from site of restriction, but not too far\n", "df_subset = df.query(\"(strand1=='+' and dist_rfrag1_left>5 and dist_rfrag1_left<=250)\")\n", "n_distant = len(df_subset)\n", "cis_scalings_distant, trans_levels_distant = scaling.compute_scaling(\n", " df_subset,\n", " regions=hg38_arms,\n", " chromsizes=hg38_arms,\n", " dist_range=(10, 1e9), \n", " n_dist_bins=128,\n", " chunksize=int(1e7),\n", " )\n", "plot(cis_scalings_distant, n_distant, label=\"pairs, 5' distant from rsite\")\n", "\n", "\n", "# Get the pairs where R1 is too far enough from site of restriction\n", "df_subset = df.query(\"(strand1=='+' and dist_rfrag1_left>550)\")\n", "n_toodistant = len(df_subset)\n", "cis_scalings_toodistant, trans_levels_toodistant = scaling.compute_scaling(\n", " df_subset,\n", " regions=hg38_arms,\n", " chromsizes=hg38_arms,\n", " dist_range=(10, 1e9), \n", " n_dist_bins=128,\n", " chunksize=int(1e7),\n", " )\n", "plot(cis_scalings_toodistant, n_toodistant, label=\"pairs, 5' too far from rsite\")\n", "\n", "\n", "# Get the pairs where R1 is very close to the site of restriction\n", "df_subset = df.query(\"(strand1=='+' and dist_rfrag1_left<5)\")\n", "n_tooclose = len(df_subset)\n", "cis_scalings_tooclose, trans_levels_tooclose = scaling.compute_scaling(\n", " df_subset,\n", " regions=hg38_arms,\n", " chromsizes=hg38_arms,\n", " dist_range=(10, 1e9), \n", " n_dist_bins=128,\n", " chunksize=int(1e7),\n", " )\n", "plot(cis_scalings_tooclose, n_tooclose, label=\"pairs, 5' close to rsite\")\n", "# Try another replicate of replicate, maybe the last one " ] }, { "cell_type": "markdown", "id": "60967f0b-7f50-429f-8865-046d3fd0d878", "metadata": {}, "source": [ "#### How many pairs we take if not strictly filtering by dangling ends and self-circles? " ] }, { "cell_type": "code", "execution_count": 14, "id": "bfb77fa0-85ee-4573-b745-57353b74f646", "metadata": {}, "outputs": [], "source": [ "df.loc[:, \"type_rfrag\"] = \"Regular pair\"\n", "\n", "mask_neighboring_rfrags = (np.abs(df.rfrag1-df.rfrag2)<=1)\n", "\n", "mask_DE = (df.strand1==\"+\") & (df.strand2==\"-\") & mask_neighboring_rfrags\n", "df.loc[mask_DE, \"type_rfrag\"] = \"DanglingEnd\"\n", "\n", "mask_SS = (df.strand1==\"-\") & (df.strand2==\"+\") & mask_neighboring_rfrags\n", "df.loc[mask_SS, \"type_rfrag\"] = \"SelfCircle\"\n", "\n", "mask_Err = (df.strand1==df.strand2) & mask_neighboring_rfrags\n", "df.loc[mask_Err, \"type_rfrag\"] = \"Mirror\"" ] }, { "cell_type": "code", "execution_count": 15, "id": "c6913bb4-f861-4098-a193-94a134df4ea5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "type_rfrag\n", "DanglingEnd 76902\n", "Mirror 3214\n", "Regular pair 1132002\n", "SelfCircle 3036\n", "Name: readID, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values(\"type_rfrag\").groupby(\"type_rfrag\").count()['readID']" ] }, { "cell_type": "code", "execution_count": 16, "id": "c2e77360-e8ee-43c6-8322-b9990aef19bc", "metadata": {}, "outputs": [ { "data": { "image/png": "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RM9Je/bsYffu3ezZs8fpUKQOie7an/Yf/sbirq0JdsNZX+Tw+s3DWLt9odOhiYhIA+BLEL/55pvok046qUNkZGTvRo0a9br44otbZ2Vl7ZeMjRs3Lrlbt25dY2JiesXHx/ccMGBA56lTp0aVPqesqZv9+/dP6du3b8q7774b17Vr126hoaF9Hn300USABx54oGn79u27h4eH94mNje2VmpradeLEiY0O9fP40zBdagFr7XhgfEpKSqCb19cYX8XNMkf0mviappeaurnkU3AXQocTIabZwe8pq/Jm6ambUuNee+01srKyiI6O5pZbbnE6HKlDkpvE0vX5D/nhrps58Y/fOP3nIr656TwG/Otx+qac6nR4IiLSAFxxxRXtRowYsee6665bM3PmzKinnnqqeU5OjmvSpElpvnO2bNkScv31129v3bp1YVZWluudd95pPHz48JQZM2YsO+qooyqcqrlu3brw2267rfVtt922pWPHjgWJiYlF//vf/xLuv//+VjfddNOW448/PisnJ8e1YMGCiF27dh1yvqZET2pchSN6MckQHOEprJK7FyIalZq2eV7ZFyxdedNHUzdF6qzUFnG0Hf8yHz3wMP0+fYcT51nm3HoL629dzVnH3+h0eCIitdoRbx7h+JRFgEWXLvK7jLLb7aa4uLjM/YWFhSWvjTEEB/+VxhQVFWFLVV93uz0zJUu/ByAoKAiXq/IJjSeccELG+PHjNwGcddZZ+4wx9vHHH2+xcOHCrT169MgH+OCDD0rWDBUVFTF69OiMTp06pb700ktNjjrqqIP7fpWyd+/e4C+//HLpwIEDSxLCF154IbFz5845jz/+eMmahXPPPfewpvBVeepmdTHGBBljrjbGfGmMWeLdvvTuUyJaD8WFxdEkosn+rRV8XK6/1untXgO718HGmRASCV1OK+eCvhG9DX/t27fJe0yJnkhdFB0WzOUP3sPeux8gLwz6rQLzwP/4/JN7nQ5NRESqyddffx0TGhrat/S2ZcuW0GeeeaZ56X0DBw5MKf2+gQMHppQ+Pm7cuLYAB17r66+/rlL1y/POO2+/tSeXXHLJHrfbzYwZM0qmZk6ePDnmqKOO6tyoUaNeISEhfUNDQ/uuX78+bPXq1eGVXT85ObmgdJIHcOSRR2YvX7488tJLL201efLkmMzMzMPO0xxNpIwxCcB3QB+gAPBl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2v3CtDT7s83sFsZr2xYz9M1xZOU4NSuVIzHBdndIEYljKvREREREYkCraq2om1SXjTs3MnfrAg5o/yMJyVt5tVdTEqtXh8REVrYsx7LkJGrveI0mNSpy47Ftgo4tIgFJCjqAiMSf2rVrU7FiRSpVqhR0FBGRuGFmdKrUic82fca7C97lp+1TAVi8/p/sfPxoWiZl0GX1W/yw5iPW1viJh45uR8Vy+lVPpKzSd7+IFLtzzz036AgiInGpU8VQoTd28VgA6iS3Y+HWVjz1yw4ePaMjH05YRcVqHzK3QiKVNrwHXBxsYBEJjG7dFBEREYkR9ZPr06xqsz9f33bo1ZRLTOSzeau4dvT3/Lomh322NQXglXkvB5RSRKKBCr0YownTRUREyi4z45jmxwBweMPD6dH8YPoe2Ah3+PiHlSQYDDzidhLd+a9vZtXy6QEnFpGgqNCLMZowXUREpGw7v/35XH/g9Qw9bCgAFx/Rgl0Da154RAv+sf8h/CO5FllmvDH1/gCTikiQ9IyeiBS7MWPGsH37dipUqECfPn2CjiMiElcqJFXg3Hb/exa6ac1K3HLcvsxfuYWr/9EagHM7XMLYmfcwK30xnpODJehv+yJljQo9ESl2CxcuJD09ncqVKwcdRUSkTLjg8BZ/eb1/uzN4OSeTju3PUpEnUkap0BMRERGJN2YcsP85QacQkQDpTzwiIiIiIiJxRoWeiIiIiIhInFGhJyIiIiIiEmdU6ImIiIiIiMQZFXoiIiIiIiJxRoWeiIiIiIhInFGhJyIiIiIiEmc0j56IFLu0tDR27NhB+fLlg44iIiIiUiap0IsxZnYRcFHdunWDjiKyWyeccELQEURERETKNN26GWPcfYS7H5iamhp0FBERERERiVIq9EREREREROKMCj0REREREZE4o2f0RKTYPf/882zdupVKlSoxaNCgoOOIiIiIlDkq9ESk2G3cuJH09HQyMzODjiIiIiJSJunWTRERERERkTijQk9ERERERCTOqNATERERERGJMyr0RERERERE4owKPRERERERkTijQk9ERERERCTOqNATERERERGJMyr0RERERERE4oy5e9AZJEJmNhPYH/i+BA5fC/ijBPYpqM3utuW3Pu+63b3eN/x6fiG59kS89BFEVz8VtX2k/bQn66K1j4q6T3F8LamPirZeP5MKX68+Kny9+qjw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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Full scaling\n", "\n", "n = len(df)\n", "cis_scalings, trans_levels = scaling.compute_scaling(\n", " df,\n", " regions=hg38_arms,\n", " chromsizes=hg38_arms,\n", " dist_range=(10, 1e9), \n", " n_dist_bins=128,\n", " chunksize=int(1e7),\n", " )\n", "plot(cis_scalings, n, label=\"pairs\")\n", "\n", "# The point where the scalings by distance become balanced:\n", "plt.axvline(2e3, ls='--', c='gray', label='Balancing point')\n", "\n", "plt.savefig(\"./oriented_scalings.pdf\")" ] }, { "cell_type": "code", "execution_count": 17, "id": "a506a74c-230f-4219-9273-99b6f04e211d", "metadata": {}, "outputs": [], "source": [ "df.loc[:, \"type_bydist\"] = \"Regular pair\"\n", "\n", "mask_ondiagonal = (np.abs(df.pos2-df.pos1)<=2e3)\n", "\n", "mask_DE = (df.strand1==\"+\") & (df.strand2==\"-\") & mask_ondiagonal\n", "df.loc[mask_DE, \"type_bydist\"] = \"DanglingEnd\"\n", "\n", "mask_SS = (df.strand1==\"-\") & (df.strand2==\"+\") & mask_ondiagonal\n", "df.loc[mask_SS, \"type_bydist\"] = \"SelfCircle\"\n", "\n", "mask_Err = (df.strand1==df.strand2) & mask_ondiagonal\n", "df.loc[mask_Err, \"type_bydist\"] = \"Mirror\"" ] }, { "cell_type": "code", "execution_count": 18, "id": "255bda45-6a64-4795-a964-546e55d67145", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "type_bydist\n", "DanglingEnd 135381\n", "Mirror 18383\n", "Regular pair 1053213\n", "SelfCircle 8177\n", "Name: readID, dtype: int64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values(\"type_bydist\").groupby(\"type_bydist\").count()['readID']" ] }, { "cell_type": "code", "execution_count": 19, "id": "b628bdfb-abbf-45df-8f33-2056dc96f19f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
readID
type_bydistDanglingEndMirrorRegular pairSelfCircle
type_rfrag
DanglingEnd76898040
Mirror03176380
Regular pair584831520710529945318
SelfCircle001772859
\n", "
" ], "text/plain": [ " readID \n", "type_bydist DanglingEnd Mirror Regular pair SelfCircle\n", "type_rfrag \n", "DanglingEnd 76898 0 4 0\n", "Mirror 0 3176 38 0\n", "Regular pair 58483 15207 1052994 5318\n", "SelfCircle 0 0 177 2859" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values([\"type_rfrag\", \"type_bydist\"])\\\n", " .groupby([\"type_rfrag\", \"type_bydist\"])\\\n", " .count()[['readID']]\\\n", " .reset_index()\\\n", " .pivot(columns=\"type_bydist\", index=\"type_rfrag\")\\\n", " .fillna(0).astype(int)" ] }, { "cell_type": "markdown", "id": "23a56c6f-c2d1-48e4-9b2e-860622af5a3f", "metadata": {}, "source": [ "False Positives are in 3rd row, False Negatives are in 3rd column. Filtering by distance is, thus, nearly as effective as filtering by restriction fragment, but removes additional pairs that can be potential undercut by restriction enzyme.\n", "\n", "Removing all contacts closer than 2 Kb will remove Hi-C artifacts." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10", "language": "python", "name": "python310" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 } pairtools-1.0.3/doc/examples/pairtools_walkthrough.ipynb000066400000000000000000004632711452673171500236400ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "id": "112fe2d5-aaed-4eb1-b3f5-2f5889a9c89f", "metadata": { "tags": [] }, "source": [ "# Pairtools walkthrough\n", "\n", "Welcome to the pairtools walkthrough. \n", "\n", "Pairtools is a tool for extraction of pairwise contacts out of sequencing chromosomes conformation capture data, such as Hi-C, Micro-C or MC-3C.\n", "Pairtools is used for obtaining .cool files by [distiller](https://github.com/open2c/distiller-nf/blob/master/distiller.nf), and has many more applications (see single-cell walkthrough or phasing walkthrough). \n", "\n", "Here, we will cover the basic steps from raw reads to .cool file with binned contacts.\n", "\n", "Outline:\n", "\n", "- [Download raw data](#Download-raw-data)\n", "\n", "- [Install reference genome](#Install-reference-genome)\n", "\n", "- [Map data with bwa mem](#Map-data-with-bwa-mem)\n", "\n", "- [Extract contacts](#Contacts-extraction)\n", "\n", "- [MultiQC]( #MultiQC )\n", "\n", "- [Load pairs to cooler](#Load-pairs-to-cooler)\n", "\n", "- [Visualize cooler](#Visualize-cooler)" ] }, { "cell_type": "markdown", "id": "bd264406-be74-4060-9798-e18040c44889", "metadata": {}, "source": [ "### Download raw data\n", "\n", "\"Raw\" data, or .fastq files are generated by sequencing facilities or can be taken from public databases, such as SRA. We will take a sample from Rao et at al. 2017, human datasets.\n", "To reduce computateion time, take 5 mln reads instead of full sample:" ] }, { "cell_type": "code", "execution_count": null, "id": "f4e310c0-2d16-4e7d-87d7-44feec8e6256", "metadata": {}, "outputs": [], "source": [ "! fastq-dump SRR13849430 --gzip --split-spot --split-3 --minSpotId 0 --maxSpotId 5000000" ] }, { "cell_type": "code", "execution_count": null, "id": "571e94fb-3dec-4042-9e21-6c39802ed8df", "metadata": {}, "outputs": [], "source": [ "! ls SRR13849430*.fastq.gz" ] }, { "cell_type": "code", "execution_count": 1, "id": "e9fb044d-1ba0-48c7-b40a-99d033518e43", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "@SRR13849430.1 1 length=150\n", "NTCTCAGCCTTTATAAGATAGAAGAGAGTTGGGACCTTGCTCTAAATTCTGCTTTAGCAAGGGACTTTTGTACCTGCTTTCTTCCTTTATCCAGATCTAAAAATAGTTTATATGCTGACAACTCCCTGATGTTATTCTTTGTAGTATTTG\n", "+SRR13849430.1 1 length=150\n", "#AAFFJJJJJJJJJJJAJAJJJJFJJJAFFFFFFA7A-FJ7JJJ-AJAJJF-<-JJFFJ7FJJF7FJJFJJ test.bam" ] }, { "cell_type": "markdown", "id": "89f9d829-3f79-49b4-b74d-8bca732b8a44", "metadata": {}, "source": [ "After mapping, you have .sam/.bam alignment file, which cannot be interpreted as pairs directly. You need to extract contacts from it:" ] }, { "cell_type": "code", "execution_count": 3, "id": "955bcafa-e521-4627-8c8b-94e05e46e6b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SRR13849430.1\t121\tchr12\t78795720\t60\t53S97M\t=\t78795720\t0\tCAAATACTACAAAGAATAACATCAGGGAGTTGTCAGCATATAAACTATTTTTAGATCTGGATAAAGGAAGAAAGCAGGTACAAAAGTCCCTTGCTAAAGCAGAATTTAGAGCAAGGTCCCAACTCTCTTCTATCTTATAAAGGCTGAGAN\t-7-7---A------7--77--))))7--F-A)7F( pairtools split \\\n", " --output-pairs test.nodups.pairs.gz \\\n", " --output-sam test.nodups.bam \\\n", " ) \\\n", " --output-unmapped \\\n", " >( pairtools split \\\n", " --output-pairs test.unmapped.pairs.gz \\\n", " --output-sam test.unmapped.bam \\\n", " ) \\\n", " --output-dups \\\n", " >( pairtools split \\\n", " --output-pairs test.dups.pairs.gz \\\n", " --output-sam test.dups.bam \\\n", " ) \\\n", " --output-stats test.dedup.stats \\\n", " test.pairs.gz" ] }, { "cell_type": "code", "execution_count": 7, "id": "d9aaceeb-1a88-4c24-9fc2-3f44069715a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SRR13849430.513\tchr20\t23502312\tchr20\t23063544\t+\t+\tRU\t60\t60\n", "SRR13849430.1442\tchr7\t57224960\tchrX\t82818236\t+\t+\tUU\t60\t30\n", "SRR13849430.2378\tchr5\t115925933\tchr21\t24124840\t+\t+\tUU\t60\t50\n", "SRR13849430.2547\tchr1\t52097837\tchr12\t1888807\t-\t-\tUU\t60\t60\n", "SRR13849430.3015\tchr17\t74750879\tchr11\t117356318\t+\t-\tUR\t60\t60\n", "SRR13849430.3027\tchr15\t34977762\tchr15\t31897447\t-\t+\tUR\t11\t60\n", "SRR13849430.3406\tchr11\t1171960\tchr9\t121265592\t+\t-\tUU\t60\t60\n", "SRR13849430.3988\tchr16\t86824176\tchr13\t104521019\t-\t+\tUU\t60\t17\n", "SRR13849430.4030\tchr17\t73189645\tchr4\t49092470\t-\t+\tUU\t60\t31\n", "SRR13849430.4316\tchr8\t124329308\tchr8\t124336541\t-\t-\tUU\t60\t60\n" ] } ], "source": [ "%%bash\n", "# Unique pairs:\n", "gzip -dc test.nodups.pairs.gz | grep -v \"#\" | head -n 10" ] }, { "cell_type": "code", "execution_count": 8, "id": "ca3e27a7-7905-46b2-8ad4-245c28f01102", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SRR13849430.60371\tchr2\t44507613\tchr7\t116276932\t-\t+\tDD\t60\t57\n", "SRR13849430.67567\tchr5\t62425895\tchr5\t62425612\t-\t+\tDD\t60\t60\n", "SRR13849430.97623\tchr3\t162233323\tchr3\t162154449\t-\t+\tDD\t60\t52\n", "SRR13849430.108366\tchr8\t48691403\tchr8\t48872239\t-\t-\tDD\t60\t60\n", "SRR13849430.138622\tchr16\t8435050\tchr16\t6032751\t+\t-\tDD\t60\t60\n", "SRR13849430.146482\tchr14\t86385083\tchr2\t119648648\t+\t+\tDD\t60\t60\n", "SRR13849430.148232\tchrX\t21885792\tchrX\t21887418\t+\t-\tDD\t60\t60\n", "SRR13849430.149771\tchr16\t6646543\tchr16\t6648097\t-\t-\tDD\t60\t60\n", "SRR13849430.156983\tchr4\t55704089\tchr4\t76039070\t+\t+\tDD\t60\t13\n", "SRR13849430.157962\tchr6\t47656758\tchr6\t47748395\t+\t-\tDD\t60\t35\n" ] } ], "source": [ "%%bash\n", "# Only duplicated pairs:\n", "gzip -dc test.dups.pairs.gz | grep -v \"#\" | head -n 10" ] }, { "cell_type": "markdown", "id": "7441b723-5c5d-4502-8330-c8b7b4a24e30", "metadata": {}, "source": [ "#### pairtools select\n", "\n", "Sometimes you may need certain types of pairs based on their properties, such as mapq, pair type, distance or orientation. \n", "For all these manipulations, there is `pairtools select` which requires a file and pythonic condition as an input:" ] }, { "cell_type": "code", "execution_count": null, "id": "3a2de712-b4ef-4ee3-af68-d19f2fa8fb8f", "metadata": {}, "outputs": [], "source": [ "%%bash \n", "pairtools select \"mapq1>0 and mapq2>0\" test.nodups.pairs.gz -o test.nodups.UU.pairs.gz" ] }, { "cell_type": "markdown", "id": "1e6445fa-551b-4583-aa61-587a27370fa4", "metadata": { "tags": [] }, "source": [ "#### pairtools stats\n", "\n", "Describe the types fo distance properties of pairs: " ] }, { "cell_type": "code", "execution_count": null, "id": "3aca9ac8-668b-46c4-a1c2-6172303f284a", "metadata": {}, "outputs": [], "source": [ "%%bash\n", "pairtools stats test.pairs.gz -o test.stats" ] }, { "cell_type": "markdown", "id": "ca2c1c56-9024-4fa0-abb9-ed1f9ab313f1", "metadata": {}, "source": [ "### MultiQC" ] }, { "cell_type": "code", "execution_count": null, "id": "0967edf9-fdf6-4294-98fc-a2c069917de6", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "multiqc test.stats" ] }, { "cell_type": "code", "execution_count": 9, "id": "d76bd76c-f0f5-4921-b873-9390e715eab9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import IFrame\n", "\n", "IFrame(src='./multiqc_report.html', width=1200, height=700)" ] }, { "cell_type": "markdown", "id": "e0dc157d-a8c6-4319-b83c-d450f2a822f3", "metadata": {}, "source": [ "### Load pairs to cooler\n", "Finally, when you obtained a list of appropriate pairs, you may create coolers with it: " ] }, { "cell_type": "code", "execution_count": null, "id": "3d9df0e2-f8d3-487b-8369-cddf8bdd54df", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "cooler cload pairs \\\n", " -c1 2 -p1 3 -c2 4 -p2 5 \\\n", " --assembly hg38 \\\n", " ~/.local/share/genomes/hg38/hg38.fa.sizes:1000000 \\\n", " test.nodups.UU.pairs.gz \\\n", " test.hg38.1000000.cool" ] }, { "cell_type": "code", "execution_count": null, "id": "083da222-8d15-408b-ad8c-7fa35881597f", "metadata": { "tags": [ "hide-output" ] }, "outputs": [], "source": [ "%%bash\n", "cooler zoomify \\\n", " --nproc 5 \\\n", " --out test.hg38.1000000.mcool \\\n", " --resolutions 1000000,2000000 \\\n", " --balance \\\n", " test.hg38.1000000.cool" ] }, { "cell_type": "markdown", "id": "9a17fb3c-d5f8-472e-b80a-e7708798ea72", "metadata": {}, "source": [ "### Visualize cooler\n", "\n", "Based on [open2c vis example](https://github.com/open2c/open2c_examples/blob/master/viz.ipynb)" ] }, { "cell_type": "code", "execution_count": 36, "id": "1839183d-4d5c-4b29-926c-0d56e00c8b8a", "metadata": {}, "outputs": [], "source": [ "import cooler\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import cooltools.lib.plotting\n", "from matplotlib.colors import LogNorm\n", "import seaborn as sns\n", "import bioframe\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 11, "id": "7bae233c-36f2-483c-8957-766e200739a4", "metadata": {}, "outputs": [], "source": [ "file = \"test.hg38.1000000.mcool::/resolutions/1000000\"" ] }, { "cell_type": "code", "execution_count": 12, "id": "2b4cc40b-5aaf-4db8-b870-ba190fdb5d01", "metadata": {}, "outputs": [], "source": [ "clr = cooler.Cooler(file)" ] }, { "cell_type": "code", "execution_count": 19, "id": "4350d8c1-b50c-43f7-92e5-43802122320b", "metadata": {}, "outputs": [], "source": [ "# Define chromosome starts\n", "chromstarts = []\n", "for i in clr.chromnames:\n", " chromstarts.append(clr.extent(i)[0])" ] }, { "cell_type": "code", "execution_count": 20, "id": "cd823dec-49c8-46e0-96b6-dcb0344f9d9c", "metadata": {}, "outputs": [], "source": [ "from matplotlib.ticker import EngFormatter\n", "bp_formatter = EngFormatter('b')\n", "\n", "def format_ticks(ax, x=True, y=True, rotate=True):\n", " if y:\n", " ax.yaxis.set_major_formatter(bp_formatter)\n", " if x:\n", " ax.xaxis.set_major_formatter(bp_formatter)\n", " ax.xaxis.tick_bottom()\n", " if rotate:\n", " ax.tick_params(axis='x',rotation=45)" ] }, { "cell_type": "code", "execution_count": 40, "id": "896235bb-749b-4c2e-95ae-352c91452b24", "metadata": {}, "outputs": [], "source": [ "# Define the bounds of the continuous fragment of whole-genome interaction map\n", "chrom_start, chrom_end = clr.chromnames.index('chr3'), clr.chromnames.index('chr6')\n", "start, end = chromstarts[chrom_start], chromstarts[chrom_end]" ] }, { "cell_type": "code", "execution_count": 43, "id": "a0d99510-d5e6-4de5-861b-8eeddcb6c25b", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "vmax = 15\n", "norm = LogNorm(vmin=1, vmax=vmax)\n", "\n", "f, axs = plt.subplots(\n", " figsize=(13, 10),\n", " nrows=2, \n", " ncols=1,\n", " sharex=False, sharey=False)\n", "\n", "ax = axs[0]\n", "ax.set_title('Interaction maps (chr1)')\n", "im = ax.matshow(clr.matrix(balance=False).fetch('chr1'), vmax=vmax, cmap='fall'); \n", "plt.colorbar(im, ax=ax ,fraction=0.046, pad=0.04, label='chr1');\n", "\n", "ax = axs[1]\n", "ax.set_title('Chromosomes 3-5')\n", "im = ax.matshow(clr.matrix(balance=False)[start:end, start:end], norm=norm, cmap='fall'); \n", "plt.colorbar(im, ax=ax ,fraction=0.046, pad=0.04, label='Whole-genome');\n", "ax.set_xticks(np.array(chromstarts[chrom_start:chrom_end])-start, clr.chromnames[chrom_start:chrom_end], rotation=90);\n", "ax.set_yticks(np.array(chromstarts[chrom_start:chrom_end])-start, clr.chromnames[chrom_start:chrom_end], rotation=90);\n", "\n", "format_ticks(axs[0], rotate=False)\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "id": "e07ca165-15ed-459c-af7b-3156de81f935", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "test", "language": "python", "name": "test" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 } pairtools-1.0.3/doc/examples/scalings_example.ipynb000066400000000000000000002373341452673171500225220ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2022-04-12 10:00:02-- https://data.4dnucleome.org/files-processed/4DNFI3PUO824/@@download/4DNFI3PUO824.pairs.gz\n", "Resolving data.4dnucleome.org (data.4dnucleome.org)... 34.225.43.243, 34.199.170.160\n", "Connecting to data.4dnucleome.org (data.4dnucleome.org)|34.225.43.243|:443... connected.\n", "HTTP request sent, awaiting response... 403 Forbidden\n", "2022-04-12 10:00:02 ERROR 403: Forbidden.\n", "\n" ] } ], "source": [ "!wget https://data.4dnucleome.org/files-processed/4DNFI3PUO824/@@download/4DNFI3PUO824.pairs.gz -O ./tmp/MicroC.pairs.gz " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.ticker \n", "import matplotlib.gridspec \n", "\n", "%matplotlib inline\n", "plt.style.use('seaborn-poster')\n", "\n", "import pairtools\n", "import pairtools.lib.scaling as scaling\n", "import bioframe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "pairs_path = '../tmp/MicroC.pairs.gz'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "mm10_chromsizes = bioframe.fetch_chromsizes('mm10', as_bed=True)\n", "mm10_arms = mm10_chromsizes\n", "\n", "# hg38_chromsizes = bioframe.fetch_chromsizes('hg38', as_bed=True)\n", "# hg38_cens = bioframe.fetch_centromeres('hg38')\n", "# hg38_arms = bioframe.split(hg38_chromsizes, hg38_cens, cols_points=['chrom', 'mid'])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "cis_scalings, trans_levels = scaling.compute_scaling(\n", " pairs_path,\n", " regions=mm10_arms,\n", " chromsizes=mm10_chromsizes,\n", " dist_range=(10, 1000000000), \n", " n_dist_bins=128,\n", " chunksize=int(1e7),\n", " cmd_in=\"gzip -dc \"\n", " )\n", "\n", "# calculate average trans contact frequency _per directionality pair_\n", "# convert from int to float64 to avoid overflow\n", "avg_trans = (\n", " trans_levels.n_pairs.astype('float64').sum() \n", " / trans_levels.np_bp2.astype('float64').sum()\n", ")\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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Ukqd6qeffqpx77331svNrToHHNjd8zgGSCrm/n7g1nKKRSlViYgIF708hV21oeZR+OPeC+0OSSmlTjF79uwa48ePj3E6nXaH4jVuJ48i8rGIdC/m/pki8rGH748DVhRzf5WrjlJKnaJmRD0ct19PrkCbZSlMefsBu0NSStkoPT3dra36KqrMzEypDEmmJz2P1wLNirnfBBjt4fv9gaBi7gcDgR62qZSqRgZedj9re0bhAMK/mEbyoT12h6RUtbN69eqAESNGNImNjW0XGBjYuX79+u2uvPLKhklJST55dR577LFoPz+/zvv27fMp+HyzZs3aDho06ESOcfz4ccett94aGxsb287Pz69zbGxsuwcffLBu/qHfn376qYaIdPn0008jLrvsskaRkZEd6tSp08HdePI888wzdWJjY9sFBAR0bteuXetZs2aFxMbGths5cmTj/PXWr1/vP2zYsCaRkZEd/P39O7dq1arNZ599FlHcz+Xee++tN378+BgAf3//LiLSRUS6AGzYsMFfRLq88MILtW+55Zb6derUaR8UFNT50KFDPnv27PG94oorGjVu3PiMoKCgTnXr1m1/wQUXNNm2bZtfwfZFpMuqVasC4uPjmwcHB3eqV69eu/vuuy8m/8/q6NGjjtGjRzeIiYlp5+/v3zkqKqpDr169Wi5btqxUOZY3V1uHAVkePrMeOBd4pYj7Q7G27FFKqSJd8Oo0/jmnF3WTYfoDF3PVR3/aHZJS1crOnTv9YmNjs0aNGrUzKioqZ9OmTQHjxo2LOfvss4OXL1++HuDGG29Mfv755+tPmDCh5kMPPXRiytq8efOCt27dGvj444/vBsjOziY+Pr7Fli1bgu699949HTp0SP/rr79CXn311XrJycm+H3zwwUkTnO+///6G/fv3P/rBBx9sS09Pd7gbD8C4ceNqPfHEEw0uueSSg5dccsnhTZs2BVx77bVNjx07dlKSuXnzZr9evXq1joqKyhk7duzO6OjonG+++abmtdde28zHx2fzlVdeebSwn8vtt9+etHv3br/vvvuu1syZM9f7+JySuzJu3LiY9u3bp7722mvbc3NzJSgoyLlnzx7/gIAA55NPPrkrOjo6Z+fOnX6vv/563bPOOqvVpk2bVgcHB5+0zeFFF13U/Iorrjh499137586dWrEK6+8Uq9BgwZZd9111yGAMWPGNJg1a1bEY489trtVq1YZSUlJvvPnzw9NTk4+NSA3FJs8ikh7oGO+oj4iUtgzkcBtWMmgJyYAr4nIG8CjeXs6ikgN4FmgP9YpM0opVaSgsEgyr70Yxk+kw4Jk/pz+Mb3Pvd7usJTy2B9//BG9ePHi6JLqhYWFZY0ZM+akv3MnT57ccOvWrRElPduwYcNjl156aWL+sg8//LDl4cOHA7t27bq/f//++z2Ne+jQoSlDhw49cbTvoEGDUuLi4jKHDBkS9+effwb17t07vXHjxtndu3c/9s0330TlTx4/+eSTqLCwsNxLL730KMD7779fc+nSpaHTp0/fkNfm8OHDjwOMGzeu3pNPPrkvNjY2J+/5Dh06pH777bfbPY0nNzeXl156qV7fvn2P5n8+JiYm+9prrz1ppPWRRx6pZ4xh3rx56+vWrZsLMHLkyGO9evXye+aZZ2KLSh6bNWuWHRsbmw3Qv3//VD8/v1Pq1KpVK/vXX3/d4nD8OxjcoUOHzE8++WRn3uecnBwGDBiQ0qJFi/aTJk0Kv+aaa47kb+OOO+7Yl5cojhgx4viff/5Z47vvvquZV7ZkyZLQCy+88NA999xzMO+Zgm14oqRh6wuxErwJWJt3j8n3Of81HogBHvPw/W9inSRzO3BQRDaJyCbgIHAnMAV4zcM2lVLV0OAxT7PujEB8nXDs5VfIzvF0IEQp+2VlZfmkpaX5uXGd0pGTkZHh686zGRkZpzybnp7um5aW5peVlVWqnqiMjAx56KGH6jZp0qRtYGBgZ39//y5DhgyJA1izZs2JodErrrgiecWKFSGrVq0KAKuX8ccff6x53nnnJQcFBRmAmTNnhterVy9r0KBBKdnZ2eRd55577rGcnBxJSEgIyf/u4cOHHylNPFu3bvXfv3+/30UXXXQ4/7NXXnnlER8fn5N69hISEsL79+9/NCoqKjd/TIMGDTq2YcOGoOTk5FIvQD733HOP5E8c87z44ou14+Li2gQHB3fy8/Pr0qJFi/YA69evP2WoedSoUSclr3Fxcel79uzxz/vcoUOH1IkTJ9Z66KGH6s6dOzc4JyenYBMeKWnYegKQAAgwG3gOmFWgjgFSgLXGmAxPXm6MMcDFInI5cDnQ3HXrF+AbY8w3nrSnlKreOj39IfuvvorGe5x8/9hlXPpCkTuBKVUh+fv75wYHB2eXVC84OPiUv/0DAwNz3Hk2MDDwlGeDgoJygoODs/39/Uu1n8ydd94ZO2HChDr33HPP3rPOOislPDw8d/v27f6jR49ulpGRcSIzuuaaaw4/8MADDT/++OOo8ePH7/n+++/DDx065Hvttdceyqtz8OBB3z179vj7+/t3KexdBw8ePCl3yevZ8zSenTt3+gFER0ef9PPw9fUlMjLypLLk5GTfH374Icrf3z+qsJgOHDjgW7NmzVL9izUmJuaU+MeOHVvnsccea3DjjTfuHzp06LGoqKic3NxcGThwYKv8P888derUOSlef39/k5WVdaLeRx99tOORRx7J/uqrr2q9+OKLseHh4bkjR4489Oqrr+6uUaOGxyt0ik0ejTHbge1g7ckIzDXGbPP0JSUxxnwNfO3tdpVS1UuTNl1YfE5bwr9fQ/Nf1rHtmr9p0qbITSKUqnD69+9fqmFjgJEjR+4AdpTm2RtvvHFjaZ7LM3Xq1JoXXXTRoZdeemlvXtm0adNO6cUMCwtzDh48+MjkyZNrjh8/fs8XX3xRs379+pmDBw9OzatTs2bN3NjY2KyvvvpqS2HvatGixUlJmogUPObYrXgaNGiQDbB///6TcqGcnBwOHz58UllERERut27djj/88MP7CoupUaNGJSbtRRE5dYH45MmTa/bs2fN4/vmd69ev9z+lopvCw8Odb7311u633npr98aNG/2//PLLyLFjx8b6+/s733nnnd2etuf2ghljzKeeNu4JEWkB1AFWG2MKnTuglFIlGfHU18xc2pFmiU6WPzKGJlOW2x2SUlVeRkaGw9fX96Qk7uOPPy60l+6aa645NHXq1JqTJ08O++233yJuvfXWk5LlwYMHH50xY0ZEjRo1nJ06dfJoRNOTeJo2bZoVHR2d/f3330fmzQ0E+OKLLyJyc3NPyuj69et3dMmSJaGdO3dODw0NPSVZLU5AQIATICUlxREZGelWL196erojNDT0pF7gd999t5Yn7y1Ky5Yts5566qn9EydOrLlu3bridrwpktvJo4i8AowwxhS6XY+IbAYmG2Me9CQAEbkIa7V1Q1fR2cBsEakNzMVaSKNjT0opt/j5+RF19yNk3vcsrdZnMuPN+xlyx//sDkupKq1fv35Hv//++6gXXnghvWXLlpmTJk2KWLJkSWhhdYcPH36sdu3a2bfddlvjjIwMx/XXX38o//0xY8Ykf/7557XOOeeclrfddtv+Tp06pWVmZsrmzZsDfv7554gZM2ZsKWmo1Z14fHx8eOCBB/b897//bXTppZc2uuSSSw5v3rw54LXXXqsbGhqam38e4gsvvLCnZ8+erXv06NFqzJgxB5o2bZqZnJzsu2rVqqBt27YFTJw4MbGoWNq2bZsB8Mwzz9Q9//zzj/r6+pq+ffumFRf/gAEDjr7zzjt1H3roobo9evRI/e2338J++umnyOKeKU7Hjh1bDR069Ej79u3Ta9So4fzjjz9CN2zYEHz55ZfvLPnpU3kywfNcYGIx978Dzvfk5SIyxNXmceBlrLmVABhjkoBE4CpP2lRKqZ5DrmRN79oAhHz+E0cPlmoUUCnlpvfff3/nwIEDjz733HOx1157bdOUlBSfzz//fGthdX18fLjwwguTDxw44NexY8fUM844IzP//YCAADNnzpyNV1111cFPP/201sUXX9zipptuavrVV1/V6t69e2pgYGCJvXfuxnPvvfcefOqpp3bOmzcv7Iorrmj++eef1/rkk0+2iQhhYWEnev5atGiR9ffff69t27Zt2jPPPBM7YsSIlvfee2/D+fPnh/bv3/9YcbFcdtllR6666qqkCRMm1B40aFCrfv36tS4p/hdffHHP5ZdfnvTee+9FX3nllc3XrFkTNGPGjFJPLejZs+fxKVOm1Lz55pubXHzxxc2nTZsW+dRTT+18/PHHD5SmPbHWrLhRUSQVuMsY82ER928Exhtjarj9cpH5QADQA2u7nwPAIGPMbNf9J4DrjDFN3G2zuoiLizMbNmywO4wSJSQkEB8fb3cYJdI4vasixHnsaDKLzutNvYOw5sxajPps3kn3K0KM7tA4vUtElhhjutr1/iVLlnSKi4v7IjQ0NN2uGFTx5syZExwfH9/6zTff3Hb77bcn2x2PXVJSUoI2bNhwVZcuXZYVvOdJz2MWUK+Y+/UAT1fsdAI+N8bkYq3aLmg3UNfDNpVSirDwmmRcPwIn0GrRQeZMKtNp20qpSmj9+vX+N998c/0vvvgiYtq0aTVeeOGF2pdccknz2NjYrNPZB7Gq8yR5XAJcKSKnTK50lV3hquOJkrYEqAekllBHKaUKdd71z7O8cwA+BnJff4ljqaWae6+UqqKCg4Od69atC/rPf/7T6MILL2zx0ksv1TvzzDOP//HHHxtKs4VNdeFJ8vgy0AL4Q0SGikis6xoK/OG6V9Qxg0VZijWX8hQi4oe19+PfHraplFIn9H76LQ7WgJgDTqY/ONrucJRSFUjDhg1z5s2btyk5OXlFTk7O0uTk5BXTpk3bVnA7IHUyt5NHY8wM4C6soeafsPaS2uH6ujNwrzHmZw/f/zIw2HU8YQtXWU0R6QPMAFq66iilVKk0bt6b7SOsP17i5qxk6bwEW+NRSqnKzu2tegCMMW+IyBTgYv49DWYj1hY9Hi/3Nsb8JCJ3Af/DOhsb4FvXrznAf4wxf3jarlJK5XfpAxP5YWFn2m1ysu2FO8jtudzukJRSqqI7dfdyF4+SRwBXkjjutMI5ub03RGQyMAqIw+oN3QRMMsaUaqd8pZTKz88vgOaPPk3GTY/RZEsuvz5zBUH9byv5QaW8LzUnRw9eVxVfTk5OJkWsOyn1Qd7eZIzZY4x53RhzuzHmVmPMOE0clVLe1LnHSFae3RSAsF9WkrVntc0RqWpq8+HDh3c6nc4ie3WUspvT6ZTDhw/vBDYXdt+jnkcRqQncAJyJtS9jweTTGGMGliZQpZQqaxeP/YY/F/WgfpKTA1Pfhctvh0LOlVWqrHTp0sW5dOnSm3Jycp4MCwvrEBgYGOzj4+NP4dvVKVWeJDc3NysjIyPt2LFjK44fP/5kly5dCl1x7snxhE2B+Vj7Lh4BwoFk/k0iD2GdFFNcG7PdfV8+mpAqpbwiOKgG/g/+l9z7/0fLFbnMePNehtw53u6wVDXTuXPn/cCtS5YsiQDqACH2RqTUCanAgS5duhwprpInPY/PYf0G7weswzoN5lLgL+A+rB7J/iW00RT915VSykb9zr+er76fQKe/kgj8egZJl9xH7ehYu8NS1ZDrL+gjNoehlMc8mfM4AHjPGDOPfxNAMcZkGGOeBRZQwrY6xpjGxpgmnl6l+9bKj4g8IiIbRMQpIiM8va+UKl/nj5vM/poQnQy/PzDK7nCUUqpS8SR5DAPyDlPOWykWmu/+HKwEszr6HWuz87mlvK+UKkdhEbXZNawfTqDtoiNM+9JrG0gopVSV50nyuA+IBjDGHAdSgNb57kcDPqUJQkSiReRaEXlKRJ50fR1dyrbqi8gbIrJARNJExIhI4yLqNhCRSSJyVESOicj3ItLQ03caY/42xmwp7X2lVPmr3+My1ncKwdcJfh98SNKRQ3aHpJRSlYInyeM/QO98n38D/isiV4vIaOA/wGJPAxCRB4DtwEfA48ATwMfAdtc9TzUHLgEOA/OKeW8wMBtoBYwGrubf4xd18rJS1cDZ477jSA1otM8w+eEL7Q5HKaUqBU+Sxw+BwyIS6Pr8INYpMJ8CnwC5WAtn3CYiVwEvAKuAq7COPuwEXAmsBJ4XkSs9aROYa4yJNsacC0wspt5NWAt4RhhjphhjpgLDgEbAmHwxLhWRg0VcDTyMTSlVgYTFNMV59XkAdJ+fxDffv2lzREopVfF5crb1r8aYq4wxGa7Pm7B66kYAFwBxxpjlHr7/bqwezV7GmK+NMStc19dYvZyLgXs8adAYU+ieRIUYBiw0xpzYANMYsw34Exier6yzMaZWEZfHRzKeDhFZkneV53uVqsp6/+dldsYFEpgN/u+9zZ6jOnytlFLF8WSfx77AOmNMUl6ZMSYF+NF1v5aI9DXGeLIopA3wkDEmu+ANY0y2iHwFPO9Be55oC0wtpHwN1tndFVp2djYJCQl2h1GixMREjdOLNE7vyR+j/1X3kPrc87Tebvj80WF0HzXW3uDyqQw/S6g8cSqlTp8n+zz+gTUv8Ksi7g903fNk0Uwm1mbjRQl31SkLNbHmRRaUt/G520TkMeAWoDZwhoi8CXQ1xuxz5767jDFd8r6Oi4sz8fHxnjxui4SEBDRO79E4vadgjEu2LoJPfmPQvGRWnr2M64Z7NOhRZirDzxIqT5xKqdPnyZzHks7w8gPcHTLOswC4Q0SanfIykUbArVjDyGWlsA3LPT6rzBjzrDGmvjEmwDWcXT9/YljSfaWU/Trf/xoHmgYQnAlB733AriP6v6hSShXGk+QRijgdRkTCgSHAfg/bewKoAawWkc9E5GEReUhEPgPWYu0t+X8etumuw1i9jwVFUniPpFKqChOHgy6vfUZGgKHDVsNnz19md0hKKVUhFZs8isj/iUiuiORiJY5f5H3Of2EN9V4OfOvJy40xi7GGu1dirbYei3UM4lVYK7AHGmPKanHIGqx5jwW1wUpclVLVTGiL9uQOPwuAgb/uZ+KcD2yOSCmlKp6S5jwuBz7DGsq9BmvfxK0F6hisDcP/Br72NABjzAKgu4jUAfKOItxmjDngaVse+hF4WUSaGmO2Arg2E+8NPFTG71ZKVVBdnnyfP/9qT9SuXI6/9irJ3UdSM7CwQQqllKqeik0eXXsfToUTcxCfNcb8XhaBuJJFrySMIpJ3WG3eApOhIpIEJBlj5rjKPgDuAKa6FrQY4BlgJ/CeN+JQSlU+4nDQ5JnXOHTT7fRc6+SNly7l8cdn4hBPZ/kopVTV5PZqa2NM/7IKQkR8gPpYcxBPWbBijFnqYZMFNwd/2/XrHCDe1WaqiAwAxgOfu977O3C3awsipVQ1FdtzINv6tSLq9w0M+WEX73d6glsueNbusJRSqkLwZKse4MSxfo2BKApP9Nze59F1DOCLwHVAYDFVPToz2xjj1oppY8wOYKQnbSulqoczx33D0vO6Eb4rh5jxk5nb6iz6thhid1hKKWU7TzYJrwGMw5r7WNhzgjX060mi9y7WUYQJWFvyHPHgWaWUKjP+AYHUHvcVR6+7mJZ7hJlP3Uezd84gtkZ9u0NTSilbedLz+AZW4vgT1obhyV54/3Dgc2PMaC+0pZRSXtWsfTtm3HAn9d98g3MW5/LZS1fw4NMJOv9RKVWteZI8DsP7iV4W8JcX21NKKa8afMtt/LBsHm3mrWDIlCQmtXuYSy550e6wlFLKNp7889kX75/2Mh3o4+U2lVLKaxwO4axXPmFH8xACs6HOuB/ZsrksD75SSqmKzZPkcR7Q3svvvxtoIyIviEhjEfH4aECllCpr0WFBhI/9lgO1IfoIrLxrDKmZuimDUqp68iR5vAsYLiJXeuvlxphk4AvgfmALkFPICTY53nqfUkqVVo8Ozdh6w6OkBkKrLblMePgcnMZpd1hKKVXuPJnz+BWQA3wmIq8B24HcAnWMMaa7uw2KyBNYZ1cfBpahq62VUhXYNddcyeerEuj+85/0/jWZVz+9kXuv/djusJRSqlx5kjzWwdqKZ4frszfO67oVa5uec40xmV5oTymlyoyPQ7j8xfeYt6kPsRsP0/zTBXzT6mMu63G93aEppVS5cXvY2hjT2BjTpKTLw/eHAt9p4qiUqiwCfH3o+dGPpIcKLfbCoddf5vixfXaHpZRS5cbuzcoWAi1tjkEppTwSUrsWsS+OJ8cHBiw1/HT/uZCr07OVUtWDx8mjiESLyLUi8pSIPOn6OrqU778buERERpXyeaWUskX0wHPYfZ11umn7OemsfFL/GFNKVQ8enW0tIg8ATwN+nHyudZaIPGGMecnD93+CtQjnWxFJxppPeVqLcJRSqrwMue9Z3ti8kEEJu3F+v56jXV8jfPhddoellFJlyu2eRxG5CngBWAVcBXRyXVcCK4HnS7GNTx3XrzuAFKxFOLULXHUKf1Qppex30YtfMe8MH3xzhZUvv0PWntV2h6SUUmXKk2Hru4F/gF7GmK+NMStc19dAb2AxcI8nLy+jRThKKVVuYsPrUPvBlzkQDrWShK8fuYyszON2h6WUUmXGk+SxDfCVMSa74A1X2VeuOkopVa1c2G0I26+/GSfQ9e9cXnn1fLtDUkqpMuNJ8pgJhBdzP9xVRymlqp2rb76b9d074DDQd+IBpv/0rN0hKaVUmfAkeVwA3CEizQreEJFGWBt+/+mtwJRSqjIREYa89TF76wVSMwUCn/uSvTvW2B2WUkp5nSfJ4xNADWC1iHwmIg+LyEMi8hmwFgjDOmpQKaWqpZDQYBq8M4kDURCTDKuuu5zc9HS7w1JKKa/y5ISZxcBArJXVVwFjgedcX68CBhpjlpRFkEopVVm0iGtG2l13cqgGNNidzazrzsUYY3dYSinlNR5tEm6MWeDac7Eu0NN11TXG9DDGLCyLAJVSqrIZesltbBvelHR/aLR8H9MeutzukJRSymtKdTyhMeaAMeZv13XA20EppVRld9kD37NxQA2cQIupK5j6zr12h6SUUl7hySbhw0TkzWLuvyki57nRTh0RWS8iL5RQ7wURWSsiUe7GqJRSFYWffwBDn/yVLWdaB3k1fPsXvpn0uM1RKaXU6fOk5/FerEUxRQkF/utGO7dhDXsXmzwCLwIxWKu4lVKq0gmPiKDd0z+ytwUEZkPsi5N4f/ojOgdSKVWpeZI8ngEUtyBmiatOSc4DJhljjhRXyRhzGPgOGOZugEopVdE0adyEui9N5Ui0UOs4RL/8A+/OftTusJRSqtQ8SR5DAGcJdWq40U4c1lGG7ljmqq+UUpVWm9YtCX11IumhQss9UOvFKUyaqZuIK6UqJ0+Sxy1AfDH344HtbrTjD5xyxGERsl31lVKqUmvXqS2+r3xCepBwxg5D5FNfMuuHsXaHpZRSHvMkefwWGCEi94nIiedExCEi9wIjgG/caGc/7vcmxgEVfjW3iDwiIhtExCkiIwrcCxSRKSKyTkSWi8hMEWlqU6hKKRu179edyM+ncDDKh3rJEPHUF8z6SIewlVKViyfJ40vAQtevu0RklojMAnYCLwP/UPIiGID5wBUiElRcJREJBq4A5nkQo11+B84F5hZx/x1jTGtjTEdgGvBheQWmlKpYmpzRktaTZ7OliR+hGVBn3Pf89NKddoellFJu8+SEmUygP/AokAT0dl1JwCNAvDEmw42m3gTqAZNEJKKwCq7yyVirrd9yN0bXs/VF5A0RWSAiaSJiRKRxEXUbiMgkETkqIsdE5HsRaejJ+wBc+11uKeJehjFmZr6ihYD2PCpVjdWqW4f+kxawqn0A/rnQ7OPfmHz3xTidJU0rV0op+3l6wkyWMeZ5Y0wHY0yw6+pojHnBlVy608YCrKMNhwLbROQjEblLRK5z/foJsA04B3jRVd8TzYFLgMMU02vp6tmcDbQCRgNXAy2AP0QkxMN3euJOYGoZtq+UqgRCQkK48Iu/WXJWMABtZqxm6rD2rP17ir2BKaVUCXzteKkx5nER2QE8A1yXVwyI6+sDwK3GmPdK0fxcY0w0gIjcCAwuot5NWD2AccaYza76K4FNwBhgnKtsKVBUb2QnY8xOdwMTkYeBllhnhCulqjk//wCufPcvJv3fCJr+lEirzbnsvedhFl7wNVfd/zX+vqU6BEwppcqULckjgDHmAxH5FOiFtT9kGHAcWAPMN8ZklbJdd8d9hgEL8xJH17PbRORPYDiu5NEY07k0cRQkIvcBI4FBxpg0b7SplKr8xDeAi8f+wrpzf2H/g/cTczCXmE9X8u3ibgTf8S6BObqhuFKqYrEteQRrGBxIcF3lrS2FDx+vAS725otcq9Evx0ocj5xGOyc2aW/ZsqUXIlNKVRStew+l5a/9+PWei6g/bztd16SRe9s1bKsTzPjPOxN39a0MHdQJESm5MaWUKkNSkY7JEpEw4FXgJWPMei+0dyPwAdDEGJNY4F4WMM4Y81CB8meBh4wxbifWIvIYcAtQG6v3NAPoaozZJyL1sVakb3XdA8gxxnQtxfdzInls0qRJ548//tjTJspdYmIijRs3tjuMEmmc3lUZ4qzIMZqVX5Pyyxwabxd8XWMpOQ44GOdDk861yajfleTaXckKjbY30Hwq8s8zv/79+y8pzZ+/Sql/VbTkMRrYA5xtjJnthfZKSh5fMcY8XKB8LPCgJ8mjHeLi4syGDRvsDqNECQkJxMfH2x1GiTRO76oMcVb4GHf+w/o/32HB4gXIFqHbulNXOO6N9aHNc69St/sgW0LMr8L/PF1ERJNHpU5TRUyQymtM5jBQs5DySNc9pZSyT4MzaXXZmeyL/oPubevy/e+f4Px6Bq12ZOPjBL8ciNmdy4Hr72T3eR3pPPYzxM/P7qiVUtVARVzKV15doWuw5j0W1AZYW04xKKVU8UQIqtOaKy9/iSumLKP+/NmEJ8wi8Z1n+PsMH/xyIfjH5fwd35FdUz61O1qlVDVQEZPH8up5/BHokf+oQNdm4r1d95RSqkLxcfgQExpDs5r1uaDfKM6bsICvRjZkfwSEH3Jy/KEX+O3CXuSk6YYOSqmyU6GSR2PMfmOM43TnO4rIKBEZBXRxFQ11lfXLV+0DIBGYKiLDRWQY1urrnUBp9pdUSqlyVTu0Bk8/O4NdLz3HjLP8yfCD2HWH+W1UT7JSjtkdnlKqiqpQyaMXTXRdt7g+v+36/FReBWNMKjAA2Ah8DnyJdbLNAGNMSrlGq5RSpSQiXNX3Qu56fxnLbh/A8UBotDWLXy7vRerhvXaHp5Sqgsp1wYyIPIE1p3GsMcbp+lwSY4x5xpP3GGPcGvo2xuzA2rhbKaUqNYfDwfW3vMUPAc/Q8NWvaLkpl+nXDeK8L+YSHBpld3hKqSqkvFdbP4mVPL4IZLk+l8RgHWOolFKqBBde9zi/+kXgePFtzljvZPrVAxj29QL8A4PtDk0pVUWUd/LYBE6cLHPis1JKKe8ZfNWdTE9PIeb1z2i7LotpV/Zh2Dd/4ecXYHdoSqkqoFznPBpjthtjthf8XNJVnjEqpVRVcO5ND7PtuqFk+EGbNWn88N8L7Q5JKVVFVNUFM0opVe1ddO84No44A4DWv21j3pTXbY5IKVUVlPsJM24uksnP4wUzSimlLKOe/JYpG7rQZmUG2f97h+Se51EzupndYSmlKjE7jid8spAyQ9Gbg+uCGaWUKiUfHwc9X5nC5kuGEHMIZv7nQkZ9sUjnPyqlSs2OYet2Ba6+WInjjYXcawe0tyFGpZSqMuo1aITz7rvJcUDHFdl8f0VvsjIy7A5LKVVJlXvPozFmTf7PIpK3AVliwXtKKaW8I/7SMfyUuIr6n/9O+1WpzBhxFgO+/o3QyAi7Q1NKVTK6YEYppaqJ8x98k4M3dedYMLRITOWnMRfZHZJSqhLS5FEppaqRQf/5hNSrm5LtAx1W7mXaN2/bHZJSqpLR5FEppaoTEQbcPpGtHX0A8H33TQ6lHLI5KKVUZaLJo1JKVTf+wQx45kuOhkLjfYYvHr/A7oiUUpWIHfs83lagKARrO57hItKqsGeMMTquopRSXhTWtAPZI8+FT6fTI+EwsxLe5uz4gn88K6XUqezY5/HNIsrvLKLcAJo8KqWUl5310MskzPqdunsyWTbhLQb1GYP4+NgdllKqgrMjeexvwzuVUkoVICLU+u+z8N/7OXOpk1lTHmbwyJfsDkspVcHZsc/jnPJ+p1JKqcK1O+98Zrz5LI22HWXn99MwQx9GgiPtDkspVYHpghmllKrmGj/8MgBdl8OvX+q8R6VU8TR5VEqpaq5V37PY2Kou/rlwYNYyyDhmd0hKqQpMk0ellFK0fWwcAO3XCIumPW9zNEqpikyTR6WUUjTv2olNzWvgnwtbpv0IxtgdklKqgtLkUSmlFABh198NQLOVTvYtnWpvMEqpCkuTR6WUUgD0u/BydtT1JTQD/vroBbvDUUpVUJo8KqWUAqx9H49cMASAOkuOkJ6UaG9ASqkKSZNHpZRSJ4y442mSwiHqqDB3/D12h6OUqoA0eVRKKXVCQEAQm/vEWV/PXY/JybY5IqVURaPJo1JKqZMMffBtjoRA9EFIeOO/doejlKpgNHlUSil1kpja9Vh3ZjQAuVN/w+i2PUqpfDR59AIReURENoiIU0RGFHL/dxFZISLLRWSeiHQs/yiVUsp93e9+leNBELvP8PfXr9gdjlKqAtHk0Tt+B84F5hZx/yJjTAdjTEdgHDChnOJSSqlSaRvXkQ0dQwE4POEzm6NRSlUkVS55FJH6IvKGiCwQkTQRMSLSuIi6DURkkogcFZFjIvK9iDT09J3GmL+NMVuKuX8038cwT9tXSik7NLjsAdL9ofGObLavmGd3OEqpCqLKJY9Ac+AS4DBQ5J92IhIMzAZaAaOBq4EWwB8iEuLtoETkSxHZBTwDXOXt9pVSytv6nj2KbU0EgEXv6XnXSimLr90BlIG5xphoABG5ERhcRL2bgKZAnDFms6v+SmATMAZreBkRWQoU1RvZyRiz052gjDFX5ovpReA8t74bpZSyicMhZHduBxtWErUykVynwcchdoellLJZlet5NMY43aw6DFiYlzi6nt0G/AkMz1fW2RhTq4jLrcSxgI+As0UkqhTPKqVUuTrnthdJDYC6Bw0zJn5udzhKqQqgyiWPHmgLrC6kfA3QxlsvEZFIEYnJVzQSOAAkl6KtJXmXt+JTSqniRNZuzNaW/gAcmfYeTqdu26NUdVcVh63dVRNrXmRByUCkJw2JyGPALUBt4AwReRPoaozZ52rrWxEJBJxYieP55jQ3TsvOziYhIeF0migXiYmJGqcXaZzeUxlihIoRZ2bHNrBqOQ23JPPqtzPpHBN4Sp2KEKdSqnxU5+QRoLAEzuMJPcaYZ4Fni7i3FejmaZtFtNUl7+u4uDgTHx/vjWbLVEJCAhqn92ic3lMZYoSKEeeRLu3YOOksah2GjJWz6XvpizgKzH2sCHEqpcpHdR62PozV+1hQJIX3SCqlVLUUUSOKbW2sPR87bfyZn1eUZrq3UqqqqM7J4xqseY8FtQHWlnMsSilVodW49BKcQIN1Tg58dT/Zue6uTVRKVTXVOXn8EeghIk3zClybifd23VNKKeVy9vl3s7xHBD5OaLRoBTN/m253SEopm1TJ5FFERonIKCBvjuBQV1m/fNU+ABKBqSIyXESGAVOBncB75RqwUkpVcH4OP855+TsO1xBi9wn7Jj1IelqK3WEppWxQJZNHYKLrusX1+W3X56fyKhhjUoEBwEbgc+BLYBswwBijfyIqpVQBtWo1IPyBuwHostDJu+PPg9PbOEIpVQlVyeTRGCNFXPEF6u0wxow0xoQZY2oYY0YYYxLtiVoppSq+thffzKFuzQnMhh7fH+DDd0bbHZJSqpxVyeRRKaVU2en14ST2N40kIhVafbKIaVMK3alMKVVFafKolFLKI46AAPpMnMW+egFEHQffV7/EOHPtDkspVU40eVRKKeUxn5AQ2n8xg5RAaLwPDiyeaHdISqlyosmjUkqpUomqV5dNbcIBCFj0l83RKKXKiyaPSimlSi3skqsAaLAxiyNbV9gcjVKqPGjyqJRSqtQGX3AzidFCcKaw9u3H7A5HKVUONHlUSilVav4+/mzqVh8AWb6B3IzjNkeklCprmjwqpZQ6LU2uvJ5sHwjf5WDO+2PJytFzr5WqyjR5VEopdVr6tB7CohaCINSZO4XzX5vDku3JdoellCojmjwqpZQ6LRGBEaztbg1dm62GeknzufS9hfy2dj9Gjy9UqsrR5FEppdRpC2/bm521wDfNwUPHZ5LjNLzx+iTWdevKobdetTs8pZQXafKolFLqtHUP7cGcM4MByF21j0fbHOfpxW8jKWns/uJjm6NTSnmTJo9KKaVOW4AjgHqjriAtABwH/Bj8yaP4p1gLZ/wOZ5O9b5/NESqlvEWTR6WUUl5xaafRzGnvA0DaXn9yHLCjlnVv3+9TbYxMKeVNmjwqpZTyilpBtXBeeM6JzxP7OFjS1vprZsfsaXaFpZTyMk0elVJKec1FA27nq34OZnYW6tx0M/61rK5H39XbbY5MKeUtmjwqpZTymqYRTWl8x72k3XUVt3S+ncC63UgJhLCjOaRt32Z3eEopL9DkUSmllFfd0O4GHun+CL4OX0Kje7K9vrXX47pZE22OTCnlDZo8KqWUKjMhDdtD3WwAkv9MsDcYpZRXaPKolFKqzDSpG0VgzUAAwlZv1xNnlKoCNHlUSilVZprVDiXNvyFHgyHsuJO/F35vd0hKqdOkyaNSSqkyExnizw6/FhyNzQHg+y+f4NH5j5KckWxzZEqp0tLkUSmlVJk6HtGGLlHHAeiyFX7c8iMX/HABSWlJNkemlCoNX7sDUEopVbWZumcQUTeTJAztd/nQp2Y3gmpEUDu4tt2hKaVKQZNHpZRSZSq2bgx7/KMIjMom45DwQvAV+J3Vy+6wlFKlpMPWSimlylTT2qGsM40IjckAIHXuPIJ8g2yOSilVWpo8KqWUKlPNaoewxdQjtF4mAClz5uiWPUpVYpo8eoGIPCIiG0TEKSIjiql3nYiY4uoopVRV06BmMNuJITAyG59QP3L27SNz4ya7w1JKlZImj97xO3AuMLeoCiLSCLgJWFheQSmlVEXg5+MgvUYTRCCogfXXTsqcOTZHpZQqrSqXPIpIfRF5Q0QWiEiaq6evcRF1G4jIJBE5KiLHROR7EWno6TuNMX8bY7YUE5MD+Ai4E8j0tH2llKrsfOu0ACC0lrW/oyaPSlVeVS55BJoDlwCHgXlFVRKRYGA20AoYDVwNtAD+EJEQL8d0L/CnMWaJl9tVSqlK4bJ+ncj2Dyes9jHw8SFj1Sqcqal2h6WUKoWquFXPXGNMNICI3AgMLqLeTUBTIM4Ys9lVfyWwCRgDjHOVLQWK6o3sZIzZWVwwItIWGAX08fD7KFZWVhavvPJKifUiIiK44YYbTir76aef2LBhQ4nPNmvWjBEjRpxU9tlnn5GUVPLGvt26daNv374nlY0fPx6n01nis+eccw5nnHHGic+HDx/m448/LvE5gMsvv5x69eqd+LxlyxamTJlS4nNZWVn07NmTgICAE2X//PMP8+YV+e+PE0JDQxkzZsxJZTNmzGDNmjUlPtuwYUMuvvjik8q++uor9u7dW2ScS5ZY/wbp2LEjAwcOPOn+m2++SWZmyZ3bAwYMoFOnTic+p6Sk8N5775X4HMCoUaNo1KjRic/bt29n0qRJRcaZ35gxYwgNDT3xedmyZcyePbvEdwYEBHDHHXecVPb777+zfPnyEp+NiYnhiiuuOKls4sSJbN68udAY82vbti1Dhgw5qey9994jJSWlxPf26dOHM88888TnzMxM3nzzzRKfAxgxYgTNmjU78XnPnj18/fXXbj17/fXXExkZeeLz6tWrmTlzZonPORwO7rnnnpPK5s6dy6JFi0p8tnbt2jRsePIfk1OmTGHLlpMHZOblXgX+2ZgrwpCAIH5+913i4uI4//zzT6r30UcfceTIkRLf27NnT3r1+nfLn9zcXF599dUSn1NKnZ4qlzwaY0rOTizDgIV5iaPr2W0i8icwHFfyaIzpfJoh9QUaAZtEBKAu8L6IxBhj3jmdht35C8zPz++UsoyMDLeeTU9PP6UsNTXVrWcLS2BSUlLcSh6zs7NP+myMceudwCnt5+TkuP1swdWf2dnZbj9bUGZmZql/xmlpacU+m5WVdeIdBaWkpLiVPJ7Ozzg3N/eUz4U9mxdnwfcUjMOd9xaMF9z/GaelpZ1Slp6eTlZWVqExFnxHQSkpKaWK2ZOfcU5OzkmfnU5nmf8+djhOHYhy92ccHBx8Sll6enohzwaABECOE3KsXseMjIxTnnX3z5nC/vuV9v9ZpZT7qlzy6IG2wNRCytcAFxdSXiquBPFEkigiCcCrxpgpnrYlIie6SRo3bnxSD05RQkJOHYEPDAx069mgoFP3YQsJCXHr2fw9eHlCQ0PdSh4LJrwi4tY74dS/AH19fd16NisrC1dyf1Ic7jxbWJ2AgIBS/4yDg4OLfDYrKwt/f/8T7ygslsL+wVDQ6fyMfXx8Tvlc8Nn8cRZ8T8E4Svv7yd2fcWGJTVBQEP7+/oXGWNJ73f05nc7P2Nf35D+aHQ6H28+W9mdcWPLo7s+4sD9ngoKCTn02KxUyj4N/CATUAKw/jwprr7B/MBRU2H8/d39OSqnSk6q815Zr2PoDoIkxJrHAvSxgnDHmoQLlzwIPGWPcTqxF5DHgFqA2cBzIALoaY/YVUjcBLySPTZo06ezuUK6dEhMTady4sd1hlEjj9K7KEGdliBGqVpy1D/xJ27UvcTDqTFa3e7R8Aiugf//+S4wxXW15uVJVRHXueQQoLHOWQsqKb8SYZ4Fn3awb72n7+Z7tkvd1XFyciY8vdVPlJiEhAY3TezRO76kMMUIVi3NfFKx9iVpypFJ8T0qpwlXF1dbuOgzULKQ80nVPKaWUN9Vsav2avA1yc4qvq5SqsKpz8rgGa95jQW2AteUci1JKVX3+IRAWC85sOLLd7miUUqVUnZPHH4EeIv/f3p2Hx1VWDxz/nlmytmmS7ntLN9oCLZRNECggCKiAbMqioAiyKiKiKD9BBAQ3UFGURUWQguw7IktYy1YohVJauqQtbdM1SZNmm+X8/rh3Mncmk2SSmWTS9nyeZ57M3Pveec9MJsnJu8ousQPuYuIHuueMMcZk20B3CaLN7e6rYIzp43bI5FFEThKRk4DYGMGj3WOHeIrdDlQCj4nIcSJyLM7s69VAegveGWOM6ZqBzk4zbF7acTljTJ+1o06YeSDp8V/cry8DswFUdZuIHAbcBNyNM1HmBeASVbWFwowxpicMnOh8teTRmO3WDpk8qmpaM6ZVdRVwYg+HY4wxJqY1efw0t3EYY7pth+y2NsYY00fZmEdjtns7ZMujMcaYPqp0LAyeCuXjIRoBn7/za4wxfYolj8YYY3qPPwAXvpnrKIwxGbBua2OMMcYYkzZLHo0xxhhjTNoseTTGGGOMMWmz5NEYY4wxxqTNkkdjjDHGGJM2Sx6NMcYYY0zaLHk0xhhjjDFps+TRGGOMMcakzZJHY4wxxhiTNksejTHGGGNM2ix5NMYYY4wxabPk0RhjjDHGpM2SR2OMMcYYkzZLHo0xxhhjTNoseTTGGGOMMWmz5NEYY4wxxqQtkOsATNeJyDwgLCIf5DqWTkx1vy7KaRSdsziza3uIc3uIESzObJsKzMh1EMZs7yx53H4tUNW9cx1ER9wkF4szOyzO7NkeYgSLM9ticRpjMmPd1sYYY4wxJm2WPBpjjDHGmLSJquY6BmOMMcYYs52wlkdjjDHGGJM2Sx6NMcYYY0zaLHk0xhhjjDFps+TRGGOMMcakzZJHY4wxxhiTNksejTHGGGNM2ix5NMYYY4wxabPk0RhjjDHGpM2SR2OMMcYYkzZLHo0xxhhjTNoseTTGGGOMMWmz5HEHJSI/FZHFIhIVkeNzHU8qIlIgIo+KyCIRmS8i/xWRXXIdVyoi8oKIfODG+aqIzMx1TO0RkW+JiPbh73ul+9mc796+k+uYUhGRPBG5WUQ+FZGFIvJ0rmNKJiIjPO/jfDfWsIiU5zq2ZCJyjIjME5H3ReRDEflmrmNKRUSOEpF3RWSBiLwpIjNyHZMxfU0g1wGYHvMCcD9wZ64D6cStqvpfABG5CLgDOCy3IaV0gqrWAojIV4F/AjNzGVAqIjIWOAd4M9exdOJrqjo/10F04nogD5iiqlERGZ7rgJKp6lo8n0MR+QlwgKpuyVlQKYiID7gXJ7aP3c/pEhF5WFXrcxxeKxEpA/4NfF5VF4nIAe7j3XIbmTF9i7U89hEiMkpE/iQic0WkwW05GtdO2dEi8qCI1IrIVhF5WETGeMuo6luquqwvx6mqTbHE0fUmkJWWxx54P2s9D0v6YozuH+g7gYuB5mzE2BNx9pRsxikiRcC5wE9UNQqgquv6WpwpfJss/cOY5TjF/RprES0FNgMtfSzOCcBmVV0EoKpvAGNEZK9M4zRmR2LJY98xETgFqAZeba+Q+0ftRWBX4EzgG8Ak4CURKd7O47wYeKyvxiki/xaRz4BfAmf0wRgvBV5X1XlZiK0n4wT4lzhdl/8SkZF9MM6J7vP8RETeEZE3ROS4Phint/zBQH/gqb4Wp6pGgJOBR0Vkpft831TVjJPHbMYJfAqUi8iB7jXH4ryn47IQpzE7DlW1Wx+4AT7P/e8ACoxLUe77QASY6Dk2HggDl6YoXwEcvx3EeQUwFyjqy3F6nu+pvhQjMB2n5TaY7e97tt9LYKz7NQD8HJjb1+IEZrnXn+0+3hXYCEzoS3Emlb8LuCEb72UPvJ8B9zN5sPt4H2AtMKgvxekeO9iNdR7wB2Ah8JVsva92s9uOcLOWxz5C3a6xNBwLvKmqSz3XrgBeB7LVMtKunohTRC4DTgSOVtWGvhqnx53AESIysA/FeDAwFvhURCqB/YHbROT8TGLsgThR1ZXu1zBwE7CfiAT7WJwrcZKQu93znwDzgT37WJwAiEgJzs9Q1sY4ZznOmcAIVX3FPf8OsIY++H6q6iuqOltVZwGXAyOARZnGacyOxJLH7c904KMUxxcC03o5lo6kFaeIXAqcChyhqjW9E1qCTuMUkTJJnCxxIrAB6K1JCZ3GqKq3qupwVR2nquNwWiHPVdVbeylGSO+9LBaRUs+504GPVDXU8+G1Suf93AT8FzgKwP3+7wZ82EsxQtd+1k8F5qnqpz0eVVvpxLkaGCEisc/BRJzu5sW9EqEj3d9J3p/1/wNe9Cacxhibbb09KscZ25NsC1AWeyAiVwLnAYOB3UTkFmBvVa3qlSjTiFNERgG/A5bjjDsCCKvq3r0UI6T3fpYB94tIARDFSRy/rKraOyGm9z3vA9KJcyjwkIj4cSZRrMYZC9eb0n0/zwfuFJHrcL7vl6lqbyY7Xfm+nw38qccjSq3TOFV1vYicg/NzFMVpuLhQVVf1Xphpv5/XiMhBOH8f5+K8t8YYD0set0+pkhZJKKB6LXBt74TTrg7jVNXPSIo7RzqLcznOGK1c6vR7nlBYdXbPhdKhdN7LjLsqsyCdn6FK4PBeiaZ9aX3fVXXfXoilI+m8n3OAOb0TTrvSifOcXorFmO2WdVtvf6qJL3fhVUbq/6pzxeLMnu0hRrA4s83izK7tJU5j+jxLHrc/C3HG7iSbBnzcy7F0xOLMnu0hRrA4s83izK7tJU5j+jxLHrc/jwP7i2cbP3dB3APdc32FxZk920OMYHFmm8WZXdtLnMb0edJ7Y/5NZ0TkJPfu4TiTXS7AWVtuo6q+7JYpBj4AGoErccbw/BJnIds9tBe2+rI4d64YLU6L0+I0xiTI9UKTdovfcH6ZpbpVJJUbAzwEbAXqgEdJsSiuxdn349weYrQ4LU6L0252s5v3Zi2PxhhjjDEmbTbm0RhjjDHGpM2SR2OMMcYYkzZLHo0xxhhjTNoseTTGGGOMMWmz5NEYY4wxxqTNkkdjjDHGGJM2Sx6NMcYYY0zaLHk0po8SERWRf3oej3OPXZ27qLYPInK1+17tlutYjDFmR2PJozE7OBEpdZOp2bmOxRhjzPYvkOsAjDFpWwkUAuEuXlcKXOXer8hiPMYYY3ZCljxmiduqcwQwBPidqn4iIv2APYCFqlqbw/DMDkCdvUSbch2HMcaYnZt1W2dIRIIi8gjwAnAF8G1ghHs6DDwBXJij8Mx2QETGisgjIlInItUiMkdEhqYo12bMo4j4ReRyEVkoIttEpEZEPhSR693zs4EVbvGr3OtVRCrc8/1F5DoReVdEtohIk3v9BSnqj40j3EtErhWRNW75t0XkwBTlfSJysYi8JyINbmxvici3k8oNFJGbRWSliLSIyGci8icRGdD9d7VVkYjcIiLr3RheFJEZSfXPdl/XRSLyPRFZ6nkfTs5CDMYYs0OxlsfM/R9wLPAz4L/AvNgJVW0SkYeArwDX5yY805eJSBnwKjAU+DOwDPgS8EyaT/F/OF3S/wL+iPMzPQmY7Z5fBPwAuAl4BHjYPb7e/ToS+BbwIPAPIAicAPxZRMpV9doUdf4VaAZ+DfQDLgOeEJFxqrrVfV0C3A+chNNVfhXQCMzA+Xn5u+f1zwUGAbcBy4HpwHnA/iJyoKq2pPlepHIbTmvt9W4dFwMvi8gsVV2WVPY7bpm/utecDdwvIqqqD2YQgzHG7FAseczc6cA/VPUGERmY4vwnwHG9HJPZfvwYGA2coqoPAIjIX4AHgD3TuP444BlVPTPVSVVdLyKP4iSPC1T1nqQiy4Exqto6jlJE/gA8D/xIRG5U1VDSNbXAF1U16pb/BCf5PA0n8QL4Ok7ieCtwodvlHnt+8TzXtcAwYC9VXeop8yZwL3AGbqLZTVHgEFVtdp/3CeAtt95Tk8pOBnZV1VVu2TuAhcBNIvKIqkYyiMMYY3YY1m2duVHAmx2crwey0f1mdkzHAatwki+gdWzjb9O8vgaYJiJTu1O5qrbEEkcRyRORcmAgTvJYAuya4rJbYomj6yX360TPsVOBCPBTb+Lo1qlufQJ8DXgRqBGRQbGb+5xhnHHEmbgllji6db+N09L7ZRFJ/v33YCxxdMvWAHfi/IzPyjAOY4zZYVjymLnNxMc4prI7sKaXYjHbn/HA4uQEC6e7OR1XAsXAxyKyWERuFZEvJbXutUscl7ith004n+eNxIdZlKW4rNL7QFW3uHe9Le+TgJVuAtaewe41x7l1em/rcHpGhqTzOjrwSYpji3G62wenWRac75Mxxhis2zobngW+IyJ/TD4hItNxJtDc2etRmZ2Cqr4uIrsARwOHAUfijBd8QUSO8nZHt+MynLGLTwE34IyFDAHH4IyVTPUPZnvdt2klrB6x534ap1s9leouPqcxxpgeZslj5q7CmeDwAfAooMCpInI6TtddNXBdzqIzfd0KYIq4szI8x9PuhlbVOuA/7g0RuRG4HCehfALnM9me09wYvpI0LvGwtF9BakuAY0RkQAfLVG3EGT9ZpKrPZ1hfe3YF3kg6NgVnOMnGFGWTTXG/rkhxzhhjdkrWbZ0hVV0N7A98hLMkj+DM0jwLeAX4vKqub/cJzM7ucWAMzuQSoHUs4A/TudgdH5jsffdrrBu53v2aqgs6gpNctv4ucCd+fTtF2a64D+ef0zaztWNd6u4ElPuB2SJyZIpyAXc2diYuEpF8z3PuCxwEPJU0bhPgJBEZ4yk7AOdneQ2eVRSMMWZnZy2PWaCqK4AvuX9sJuP8IV6mqptyG5nZDvwap/XvHhH5HPGleoanef0iEXkDeBtnnOBY4AJgC053MKq6WUSWAV8XkaU4LW4bVPVFnOV7rgWedGdlDwHOxUmY2qw12QX3ASfjJG/TcJYeasAZAzwM+Kpb7grgYOBpEbkbeBfn99JE4EScFtR7AETkLJzlhH6hqlenGYcPZ2meOcSX6tmKs8RRsiXAGyJyK85SRGfjjGf+us20NsaYOEses8jtnnsnV/WLyGicsWNH4LSAPg9c4p1B2sG17XVt7qmq87MWpEngJnYHAzfjJG0hnHG03wKq0niK3wFfBi7BmR1dBTwJXKeqGzzlvgH8HrgRZ4vDl3FmOd8I5AFnAofidM/eiNNa+Y8MXpe6C2x/330t1+JMyFmMs3xPrNwWEdkfZ8miE3ES6W04WzHeReJ2iv3dr12ZgHYu8E2cdVj746yMcKmqfpqi7B04yeb3cWZYL8VJHO/vQn3GGLPDk7aTPE13iMgROLNGY7MyVwCPq+pzvVR/Ec64y2acGbiK8we7CNhDVbd1cr0C/wT+lnRqgao2ZD1gY7rIXXB/D2BairUnM3ne2ThLA12sqrdk63mNMWZHZS2PGRKRQmAOzi4yAsR2w8gDzheRp3EWgG7s4VDOAXYBpsQWWxaRBcCnwHdxWp06s0ZVO1qz0piccNdkPBQ4J5uJozHGmK6zCTOZ+xXOdmu3AhNUtUBVC4AJOLttfMkt09OOBd707tLhjsV8HdvhxmznVDWqquWq+lCuYzHGmJ2dJY+ZOxW4X1UvcpM1wEncVPVCnG3mkrdB6wnTcWZ8J1sITEvzOc4XkWYRaRCRF0XkoO4GIyLzYrfuPocxxhhj+h7rts5cMc7kg/a8hLPgck8rJ/WCyltIvURLsntwJlqsxZmx+yPgRRE5QlUrMglsQHGxjo4kr4riaCyAtWUwbj34oxD2w8ohUBAVGlpGAs5YgLElqf/PEZR+dcsAiPgLaCgalXA+FAoRDAYTjmk0Qt5qZ85FS55SWFbA6ugQ+oc3UxStw1/rd2LrF6CgPowAoSBE86Lkb4vH0RIUZMTodl93qrp7Sy7rznX9Xa178uTJsbt/mjJlyp96s+5sitWt61aR5w6eCftBR43p+MIsWLJkySZVTd6xxxizg7LkMXPvAjM7OD/TLdMbUs1+SmvXD1X9hufhqyLyGE5L5rXA57sciGrrXsBTR4/WB4r7pSz34WT45YkB7rg5TEkjbCyBCy8MMK4hnw9X/gKAkoIAC67+YvuV3TAWmmqg/wj4YeKufhUVFcyePTvhWHNDPcv32geA1cOVIy/5Aj9qOYcxH/yefeqfZ8CzJQAsP3ISY57/lEAUqgZC05gWxr2f1/o8G4bmc8jL89sNK1XdvSWXdee6/p297ucP34ORa5xhodX94YB30t3psvtEZGWPV2KM6TOs2zpzlwAnisilIlIQOygiBSJyGXACzjZvPa0ap/UxWRnd2OLN3bXkKWCfDOPqkLgNkj437VU31W0h3noT8HfyMR3gtjbWV0Gks934IJhf2HrfFwV8AQrz/ETwEfU0kPp8fsL+eLnkzNzXTmuqMbkk0fgn1WcfUWNMD7CWx8zdhrMm3m+Aa0UktqbiaKAAWAXc5m6qEaOqul+W41iIM+4x2TTg424+p9Dx1nYZE3epqFjyGHXfpmbiLXx+XyeNpyUjYf1HoFGoWwel7XclA/j8fsI+CETBH8FJHv1+QhogqvG6xO8j4uat/iht3glfxJa5Mn2Pz5M8trt6qzHGZMBaHjM3xP26ClgP5Lu3De4xgMFJtyFk3+PA/iKyS+yAiIwDDnTPdYmIlODMFH8r89DaT/5aWx7dr7HksUU9LY+dJY8DRsbvb01v/ejWFkU3eSwIOi2P6k0effHk0Rch4ZxzzP4ym77HWh6NMT3NWh4zpKrjch2D63bgIuAxEYktEv5LYDWehb9FZCzOFnjXqOo17rHLgCk4k3tiE2Yuw9lG7vRMA9MOcj9xT8ZaSKJustbs6bau2trUcQUDPJNkaj9LK6aIXyCk+CMCfqfbehv+hJZH/ELU022d3IrjbeExpq/weTZS9NlH1BjTAyx53EGo6jYROQxne8K7cZr7XsDZnrDeU1QAP4mtzotx9hr+KjAAZ+/f14GzVfXtXgi/zZjHZo13W3e6CVJJ15PHsPvJb+22DvoJ48ebD4rfT8SNx69t47CWR9MXWbe1MaanWfKYJSIyFDgaZ3tCBSqBZ1R1fW/F4O5hfWInZSpJ6kdW1SeAJ3ousvbFuq0lacxjpCsjKrrRbR3xO8M5A0nJY2K3taCxbusULY/+CMb0OeKd9GXd1saYHmDJYxaIyOXANUCQxMSsRUR+rqq/zk1kfUXnqwXF/sjFc7f4NYdM7mT5uBJP8libXvIYDTjP73dnWxe4s63V88dW/L7WbnSJth3z6Ldua9MHeRNG67Y2xvQESx4zJCJnADcA83D2j47NbJ6Gs0TPr0Rkjar+O0ch5l5HuaMCqq3tjFFPg+OBEwey15gyTtm749nTlIyI369dnVZITssjBMOg4ot3W3vDFmlNZv1Km9nW1vJo+iJf0oQZVSVptQdjjMmIzbbO3CXA28ABqjpHVT9wb3NwZjq/S++s84iIjBaRB0WkVkS2isjDIpLW9hLuupS/EZF1ItIoInNF5OCejhlN7A6OJ2/CnqPL+OGRUxhdXtTxcwTyodidwJ5mt3U04Hz0A1EIxZJH9aPR+B9Zn99H1G268aVYqscZB2lNO6Zv8bY8+hWian3XxpjssuQxc9OAe1U1lHzCPXYv6e8t3W0iUgS8COwKnAl8A5gEvCQixWk8xZ3AOcDPgS8D64D/isjMHgk4RhO71rwtj/mBrox7dCfNNGyGUGOnxWPd1gAtEaUwz0cEf+KkGJ+0jsFsb+yYhtp8243JKX/SZzWSxsL5xhjTFZY8Zq4ZZ4Zyewa4ZXraOcAuwPGq+qiqPgYci7Psznc7ulBEZgCnAT9Q1dtV9QXgFJx1Kq/pyaB9Scmjd1hhXpeSR++kmbWdFlfPrjXNkSgFQT+h5Akzfl98wgwg0bZdf6GWTpYRMqaXJf+jEw73xq8fY8zOxJLHzM0FLhKRCckn3DUVz8dZ9qanHQu8qapLYwdUdYVb93FpXBsC7vdcGwbuA74oIvnZD9fhS+629kyY6VLymLBcT+fjHhNaHsNRivIC7iLhnth8/oRkVlK0PoZa3FbOaATqN6YfrzE9JLnlMWotj8aYLLPkMXM/B/oDH4nIv0TkChH5iYj8C2fyTAlwVS/EMR34KMXxhXTebT4dWKGqDSmuzQMmZhRZB4P1fZrYUuJN1vID/vTrGNC1Gdfq93ZbR+JL9US9S/UkdqP7UkyQCYWaIRqF2w+D302GBQ+kH7PZYYWiIe5aeBePLn201+tu2/JoQyuMMdlls60zpKrvisjhwM3AGUmn38ZZpHteL4RSDlSnOL4FKMvg2tj5LhGR1tc8ZezY9ssltzx6tiLsWre1p+WxZlX75VzqSUzDkSilres8xsv4fJIwU1xSJI/h+f+BWcfDuvnOgUWPwR4npx+32fFUV/L0oqfwXf9n1hbCh38az+7DZvRK1ZFIuE2LQMSSR2NMllnymAWqOhfYT0SG4CwSDk5L3obeDiXFsXTW6JAMru1UONx+t5kkT5iJ1ajCsiWfUFG3NOV1yYrra9jHvb9+0esskgoAKisrqaioaFM+FI3HtKJyFcvffI0w/oSmzy1btpCQv6YY8xh+6QbmNZcwy328ef0aPqzouO7ekMu6c11/LuuuX/wyWnE8TSsHsfdSZ4vNuXffxuZ9ev4fisrKSsItjYxMOj537mv06z+sx+s3xuw8LHnMIjdZ7O2EMaaa1C2EZaRuVfTaAqRa0qfMc75LVDWWT7HruHHtrmfji7aTPAIz99iN2dPT/KMX2g/e/QGgDJUahs6eDUBFRQWz3fteT9+WBzi99MOHj2TaobO58/l5CS2PQ4YMZrMosRw61YzriAqzpk2A95zHA/sXtdbXXt29IZd157r+XNb92ae3Iyi+rfGW7dKw9ko8FRUV7LPXHiS3u++9114MGzm5x+s3xuw8LHnsonTXTUzmbh3YkxbijF1MNo34wuUdXftVESlKGvc4DWgB0mv+a1cnYx6zMds6WAilY6BmJWz+1BmH6Ovges+Yx3A0gojgDwTb7DCjnqeQSIqWx6iw4rO1rc3NhDtfJsjsuAbULgQgvy7+Wdm6pqrX6g+H2s6stm5rY0y22YSZrqsEVnTj1tMeB/YXkV1iB0RkHM5C5Y+ncW0QaO1bE5EA8DXgOVXNbK2PDjq/O5pt3aV1HgEGua0r4Sao7SRX9ySPkbATQCAYTGj69PkSk8dULY9hhdv+9378QMiW7tlpNdbQr76SCNB/a/xzFKiu7bUQIqGWtsciljwaY7LLWh677hpSjw/MtduBi4DHRORKnBh/CawG/hYr5C4ftAy4RlWvAVDV+SJyP3CziARxkt3zccZvnp55aO2/XckTZmItj0oXFwkHGDwFlv7Pub/pUygb1369nok5kaiTFfoDwYRIfZLYEppqtnVYfQzGkxxYy+POa/XbCMp6n59BW+OHC2vrey2EVGs62lI9xphss+Sxi1T16lzHkIqqbhORw4CbgLtx2vtewJnt7f3rJYCftq3O3wKuA64FSoEPgKNU9b1MY5MOtvDL2lI9AIMmxe9vXAyTjmi/rLflMRJLHvO8+yPi9/sSWk1TJY8RhVHiWd/RWh53Xiud5VzXhvIo9nyO+tX13mfCuq2NMb3BksceJCKivbj5sTuu8sROylSSoiNZVRuBS91btiNr90yb2datKW0XFwmHeLc1wKYlHRaVhG5rJysMBoMJ2atPBPUE50sx2zqikpg8WsvjTiu0/DWCwKbGIN79QEvqey95C7ekaHnsYLUDY4zpDhvzmCER+YKIXJF07GwR2Qg0i8hdblfwTktoZ2No2k6Y8eZnef6uJo9T4vc3fdpxTJ6njrotj4FgYsujz09Cmh1I1fIYFWt5NFQuXsaqv69k2dODaazpn3CupEF7LYFL1cpoYx6NMdlmyWPmrgD2jD0QkcnArcBmnG7jM3DGIu68Ouq2jrY3YQbyg138eBYPhEJ3taJNizsu6xnzGEseg8G8hEZSvyQuEu5P2W0tDBfPSkbhxg5fr9kxVd7+J1pqg7RsDTLuncRzPoW69Z/1ShyRFN3WNubRGJNtljxmbhrOTjIxJwONwL6qejRwL3BmLgLrK6QL3datvcYqXW95BGfSDEDDZti2ud1ivhTd1nl5eYnd1j5J+AlJlTxGVQgmbz2TYtKC2bEFl8f/WSlobvt53/LZsl6JI5xitrUlj8aYbLPkMXNlwCbP4yOA51U1Nt/yFeK7zvQYEfG5+2pXikiTiHwgIh2Of/Rc+08R0RS3m7MTXcfd1u23PHZxwgwkTprpYNxjYre1mzwGg4i329onCcH5Uy0Snuql2bjHnU5+1cYOz69f1RurdaVuebQJM8aYbLMJM5nbAIwFEJFiYH/gcs/5QrK0zV8nfglcBvwMmAd8HXhARL6sqk+ncf1G4NikY+uyEVhHs62l3dnW3Wx5TBj3uAT3W9OGd/1wdZPHQF5+Qrd1QEj49yrYTstjG9byuFOpq2+koGZbh2Vq1vT0HgGOaHNjmxYBa3k0xmSbJY+Zexk4T0Q+Ar6I854+5Tk/BejRAU/untqXATeo6m/dwy+JyETgBiCd5LFFVd/smQg7Waon5WxrCPq7kXMPGBW/X9+a17fhXecx6nZb5wfzUrQ8dlxdJMUMbELW8rgzWfLuQorab1wHoLGqd3aZiYQa2/xSt+TRGJNt1m2duSuBOuAB4DvAr1V1GbTu0nIiToLZk74I5AH3JB2/B9hdRHq827wjeaH2d9hob7a1XwSRbiSPhaXx+0017dfrqVTDzl/+/Ly8hH5zv4/EPvUUokmn3y3I595lj9IQakh9gdnhrJu3IOXxxrz4fd2wnnkrq1lX27P/WERa2s72t+TRGJNt1vKYIVVdKSLTcCbO1KrqSs/pIuC7OAtu96TpQDNt96Be6H6dRudbJA4RkU04C4QvB+4EfquqKTpru0Y6eIrkHWZiuZuvO4kjQMGA+P2mGshPXcyXasxjfmJhP9BZGN5u6yq/n7OHDSH68d/ZmlfIruzahcDNdkUVKm6ArWto+Sj1/+DrhgTY5TMncYus38CJt75Bv/wAr15+KGXFeSmvyVTE1nk0xvQCa3nMAlUNq+qCpMQRVd2qqo+5C3P3pHKgJsWC5Fs85zsyH/ghcArOuMeXgV/h2dawq0RkXuzWUTlfNPWYR5+vu8ljafx+Y0379Yq35TE+29rbbe33ScLe1qmop/xj/YuJutnmn+f/Od2IzfZo1Zvw8g3w/t0MWRVfbGHlsHiRmgFDWu/3r28AaaG+uYX5q2t6LKyoLdVjjOkF1vLYB4nIF4D/pVH0ZVWdjTMyL1X/aloZmKrenHToaRGpBy4RkRtVteMVtztRkz+y3XPttTwSVSoqKrpcVyBUz+fd+9VVK6lsqkz5PNHmeLdyzZZqKioqWL06xHBPMrhh3drOWx493dyrAok/TpWVqevuDbmsO9f190bdw9c+xxScBsj+m5yFFeoLYNWUIGOrnNnNn5RPZNf8tRQ1Q2FjC7sOvIotwYH8763LkKriDp69eyorKylav5zdk44v+/RTmnP4WTDG7Hgseeyb3gCmplEulgFtAcpSbIdY5jnfVXOAS4C9gS4nj6o6K3Z/14kT2x04mDzmMdbyGAwEmD17dlerhWgEnC2GKSuAcePGpXyet1/IB5wtv0uK+zF79myq3/8sYZ3HUaNGsKKTMY/qKV8ZjG8kNKxgEHsGa5hx8MGJfeS9pKKionvv3w5Qf6/U/eJrsATCTT7y3HUdK4cIW3Yp5R8b9yYifjbtcTDVC1+hqBmGbIWb7ghRU1TFAz+qYvbss7MeUkVFBYFo2/Uky4YNIH9yPkFfkNH9RzO0eGjW6zbG7FwseeyDVLUB+KQLlyzEGd03gcRxj9Pcrx93I4zW5bq7cW3a2ptt3e1ua58f8gdAcy00tT9RJ+BNCt1u68KgP6EbOiDaadttrLwCazTA2f+NMHqj8vzhVcxougrGDYS9vtG912L6rEj1avxA0+b42MWVQ2AQg/nr5MMB+OaYsdQVk/CvW2kD+D55C8h+8giwYNVGDk06tmjTQu76370AXLb3ZZw5fafes8AYkwU25nHH8CzQApyedPwM4CNV7c4Kxafh5ETvdFYwE07yGE/kMp4wA1DoTpppbD959HvHPLoTZgqC/oQu9IBIYmabQmzCzKpQkP/7l/LF95Rpq2HW++51nz7XjRdg+rraqhW8UljAR1X9Wo8tHwkD/PFxjmPKiwgF236O+2/IaBRIu1bURli6rrrN8bBnHGTAZ+0FxpjM2W+SHYCqbhCRm4ArRKQOeA/4GnAYcJy3rIi8AIxV1Ynu47HA3cB9OK2W+cBXgbOAv8WWHcoovk7OeyfMeJfq6bbYjOvmWmhnprffu6Wgp+Wx2btUjyidNYBq1Bn3VlNRxghPC1P/OvfCDna5MduvZQ1r+MHAwdy+yvnsNObBtjFh+gUGtu43tceoUt4tz4PliZNYymrb3zYzE1XbFH+Kz7t3y8KgL9jmvDHGdJUljzuOn+EM4vs+MAxYDJyiqk8klfOT+H2vw+lY+zEwFCfXWwR8D/hLViLrJBEMeP7eZTzbGhJmXAfa2SrQ790y0W15LMoLUJsw25pO13nUqNCyNUDe5sQfpWBsR7jNSyESAr/90d5hRKO8F6hnr6X9KHTzsncmCROjLQwfVM7N+84k6Pex7/hyrt9jMNOWfoY/CoPcDUvLa8NsrN/K4H4lWQ2rMACBaNuZ1ZGIJY/GmOyy5DFDIvLzTooo0AisBipUdX1PxOGux3ite+uo3Oykx1uA43sipnR594xuHfMoGYyo8Kz1GAjXpywS8EWI/ZmVkNvymOdL6qWOdjrbGoVQQ9s9uAubIQQEo2HYsgIGT047/L4sHA3zyNJHmDBgAnsN3QvWvAdP/wgmHAaH/rTzhTF3AJH6DbxfEOTAj+MfltenCWc1NhHKL+P4PeOrCywrEy4+z49P4Z7fRAhEYWiNMnf1hxw79cCsxhWKQqCTlkfrtjbGZIP9Jsnc1cR7ZpP/ciYfD4nITar6k94IbHvhTR5jb1hG3daeXWYC4dR7Dvs1njziroPnHfMYERCN0lkOq1Eh1Ni2UHETNPh8DIhGYeMn223yuLUpxPVPLWLYgAK+f/gkbnz7Ru5bfB95vjweOe4Rxrz4S1jzrnMbOp0NY45izlurKW3IeG35Pqty+SKWkMf5y5wPi+ZHOa9gC59raOKNvLKEsqUth1OTdw8RfNT1j1JWqwypgWeWv5T15LEloimTx0gk1Ho/aC3gxpgssOQxc7sDd+Esm/NHIDbIbQpwMVDgfh2Js/TNj0Rklapmp0t4B+BPMeYxe93W7bQ8SoTWkWieMY+xRcIjPkAjSCfd1kSF6ua2f5CLm2GbTxgQBTYu7lL4fcndc1dy3zurARgxqIEHlzyARJUWbeaJZY9z4bIXW8vq//6P7/r68/7aJoqDcOIXw/TLd37FLN6ymOdWPsdxE45jTMmYnLyWbHl72VxOegny3DytbFQj00JNID5Cwf4JZa/5wpmc8yAU+sqQ8n9CbTV5EdhSmf1t5FsiEEzV8hj2JI/WbW2MyQJLHjN3HrANOFTVu9ALC0TkYeBF4HRV/Z6IPIYze/lcsjWecHvQSSui3/P3LuomjZlNmCltvRsMtZM8ev7ISix5zPO3Tt6J+oBotNMJMyjUNAcoTDpc1Ax16gMisGn7TR4/WF3DMDbTQpB/LniSr7wW4ri3oqwphzlf/w8XAJv9Pp4pLmZ+cBtHb7qMH9YVcH+/Q3nkvemcsfdIGj76iEs/+TGrWtbxbtW73HX0Xbl+WV2mqsw7+wJk8SJKypuY+anzT0UkoJRPcT9jxYNBEocwHDplGC+edzElhQGWr3wDVrwFQGjDmjZ1RLdtw1fc/cXDW6JQ0FnLoyWPxpgssOQxc6cAv0xKHAFnHKKIPIgzmeV77uP7gauyHYSIXAocirOo9zDgF6p6dReuP96NayqwHrgd+FU29rbuTCCb2xNCWt3WAWdEIgASdgIoCCQljxpJ2MYwpSg0Nfpbk8f1pTC0xrnfGHG6s3XDovS2+umDita8zuv5V/FRuIRVf+/HxCrn/Zi0Di66fSMPTRlCqDpA+TY4YRuU1zcBTVxQ8gA3FCxj1i83I8vX8PWJwq9P9rNg4wKaI83k+9vZdLwvqqtixdNPUPxGBQC7eCZL6z715Je4PyL9hrS9FhgzsMg5PX1fIhVO8uirbSYSCeP3O7+CV//jX9T9+kZ8h32BXf/8h26FGYoo/mibX0NEPS2PNubRGJMNts5j5voDgzo4P8gtE1ODM5ci284BhgCPdvVCEfki8BBOq+jRwB+AK4Hrsxhfu1J1W/szmjBT2nq33W5rjX8LxJ1t7fNJ64SZqADRSOfzP6KCeibM1JXFX0xDs59XXxnK2//YzIaF73bpJeRKpH4bq8+/gM8uvpit1Vv5UsOj+EXZsCC/NXGMKa+H6fMCzFwOu6x3HrfaGuAn9y9AljstbHsvVcZVKWENs7R6KduN5jq47VDKnmg7L+7dyTBlT0/C2K/jnVsGTomPex1YCx+viO9AuuKuexGNoi88R7gu9We2My1RUi7VE/HsbW0tj8aYbLDkMXNvAxeJyB7JJ0RkBnCRWyZmOs7M62ybrqr74Yyv7KobgNdU9VxVfUlVf4+TOP5ARIZlNcoU/CmW6vFnNObRO9s6dctjMD5dprXlEWgd8xj1AZHmNMY8Qt42J9baIsgriD9X1doiBq31U7JVmH/HDV18EblR+/DD1L/0EnX/e55//uIEnhi+mrptAUYsdRLkbfmQd0gNK1LkSXUFsHgkbGpnBZqj5znvzf0L5lLX1BP/P2Xm1c9e5YpXr2DR5kXxg8te4uloDa81xxcDf2+CcN/BPl4/Ikze+IPiZTtJHvuNH9t6f2gNPLTo3tbHBdWbWu9vqdrYrfhbIoqvbQdIwgoCljwaY7LB+jAy90PgJeA9EXkZZx9oBSYDh+As03MZgIgUAF8GHsl2EKm6zdMhIqOBmTjjML3uBn6B0xL5j4yC60TqpXp6tts6z9Py6IvEA/DHWh59QLgl5ZjHiMTL+SJCUYNTaGs/yA9GaP2xqon/eIXXrevyy+hVzfXwzOU0Pvpe66HJ89Zw+56FzF0Go92s/t2ZynnDG7ht10KeryykKQgzSxqpnDiHhzbcTl7ZW5TWKz+7L8LYjU43fkkDFLbAgQuVew5VFn44h9+vHcNVZxyZoxfblqrys9d+RnVzNVXbqvjHUc5H/q1FD/DjIYO4uib+z8atx/io7SecV+eDwZ4t6IsHd1hHcPTo1vtDq5X7Vy6gblsNhAP0b45/TqurNjFk0vguvwan5TFF8ug5ZMmjMSYbrOUxQ6o6D2ec4SPAvjhJ2HeB/dxj+7hlUNUmVd1FVX+Yq3hTmO5+/ch70N3SsIH4/thdIiLzYrdOJ8yk6rb29ew6j0Fvt3U43vTZOuZRFMJNKVseQ55/ufLrpfWHqKUoii8YL9+vJv4aAlu61xXZI+b+BR67ELZ5Bu9V/IoPP36ATavi29uN3QgzlkcZtthJOJqCEJrayBb/IC6rr6ZkYgOHD6vmnCEjuP60/ZjztcsRhJp+wk++5eeq0/1c+h0/Fbs739S8CBw+XykoWM0Fn55DZH1Xtm/vWXWhOqqbnde+tMbpVg+FW7iu5n1QZYzbGLitUKl157Qcmj8YRu8bf5IRe3ZYh6+ggIb+pQBMqII/3NLCpyd9lZWLlieUq+1my2MoQsoxj96WRxvzaIzJBvtNkgWqugQ4WUR8wGCcdR03dLc1sJeVu1/bborrHCtPcbxLQqEQ5LU/QSKQInncVl9PRUVFt+rLa67mgFjddZvaPo9GOUQ8lYbCrWX6uYfVBzWb1+NLsbd1KAAFbu7Zb2s8MZaiKMFg/HkHed7RwtpQt19Pd1RWVqasr7i+kn3evQKANes3sXjSebz2cSWH1P+dKwcM4bb6xI/sDx+OEnRz6+dnCmMp4eNxX+Pzy37D1Zud/RjX9RvCYreu/fvtz9z6uYygmGnlW1gULODZWT6Onuc8yfFzo/xiUoAyWU/L7Ufw4Z7X01A8mmxq77Une6cqzLMrQhw5Lsj4QfG9JWuaa3j2xWd5c/MTrAgIZXVKvybn3IohPhBhSDjM4KZ8Kj7dysDdriQQ3sb6Df2pXNlx3YGygRTV1bQ+LlxRxYI5/8E75uWT996nYXBRWq+16NlnyV+0iLqTT6Z6a2HqbmvPoffnvc+6YB9vBTfG9HmWPGaRmyxmvIOMiHwB+F+nBeHl5B1julOd+zXV4L5u9x2r6qzY/SlTpnQ4cDDVmMeyASXMnj27e5WHmmCuc7ckEGn7POFmeBnCPidxDai0lnnfM+axpLggZdN8xLMaS4ln98O8gsTksTC+sQcD6pXpBx+E39d2N5qeUFFRkfr9m/fP1rsja97l7cJRHPHiZcwvKGXqqLbFY0lyfQE8+7l87jq1glFFPrjh9637hg+feSTD93fq+nz08yzcvJCqD6sYPWM0Dz35NdYNFF6dJhz0sVLUAt97WFlxRB6TwlvZt+5Z+NK/idTVEVq7lvzJk5EMd6lp97V7qCo/uv4FNtZFeWAZ3HbYRFgbPz9qj1E887TzIRq7If7xXen2TM9uaGTwtNluPU5dU9Ooe+3Lr1C7KnG7+PJ1iS2PRYFQWp/95hUrWP7oYwAMn3MfwcMvwqdtf9S8//8cuN+BjC7JbrJujNn5WLd1FohInoj8QEQqRGSliFS69y8Rke6sSfIGzt+izm7fzEL4sSaXVC2MpZ7zGdEO8lB/NP7XLSuLhAcLIFAAtNNt7a57F4mNr4zE64/9oVUBws0pWx7D7eR/xQVKXl7qlY2CEdiclCTkRNWHrXcj1ZsZ/ZNvULqwgdnz4LvPxhPfqOc1hn3wmxP9TJi4D6PKBkB+fxjuaSsbtnvr3YAvwIzBM8j35TO1fCp7DHbKzZsdYps7E33kFljw7kAuHzSQ5VXvEW1oYPlxx7HiuOOpnjOnh154os+qG9lY5ywTv6m+mVW1G1rPldUpHz92F81hJ/ufvSY+xGHVEOdzeciw/WH/87tc7+DvnkvDjAlsK4m/12WffpxQpmFLevPpti5c0Hq/ZdkyWtpZqidhwoztMGOMyQJLHjMkIgOAN4HfAXviJFvV7v3fA2+ISDvzT1NT1QZV/SSN26osvISF7tfp3oMiMg4oAj5OvqA7tINcMNU6jxkt1QOty/WknDATdZKB2OQcvzvbWlUT13kMN6VueQykbkgdkAcFgbZ/vGPWL3oDlvwXPn4cUrQQZWzLcnj7dqhr2/it0Sjrb7qZlX96kZY6P5GQUPnCIIqralvLFDXHy/9j2jGt9289xseiMcIBIw6IF5hxqvN1wGgYuVfKcESEPx76R3418TRuqNlE46F1NOQ556YtEwo+LOSifkrtay8QXut0pdY9+99uvviueX91Tev9w1e9y9Dv3cg+S6JIVPn5vRF2/82TXPEf5/HY9fEP76rBQmGgkP1OuAuKO1qhK7XgsGGMv/5qag6Ofy6LG5sTykS2bki+LKU3Pn424XEoSuqWR89H0sY8GmOywX6TZO4XwAycGdW3qGoLOK2RwIXAb90yP8hZhB1Q1VUi8gFwOnCH59QZOOtRPpOVesTX2s2ZLHGHGfdYJi2P4My4rq9ykkfVxF1u3HXvYi2IPrflMxKNtCay6gPCzfhTtTwGoX5AlH61iallUZ6PvGCEre2EVDPvcXjteefBaQ/A5CzONlaFf58Mm5fCkmdhVOKKTev/8U+q//Y3ANbWlVE4oomWralboarz+/HOPl9iUel4QiWrWLf7M+T78/nC2C/EC+17Low9AErHQDB5f524gYUD+fKsC+H53zCpsImffqWMHz3kvMlfeznKsmF+3lv4T0a45Zs++QRVzbjrujPzV9WAr4G8wiV8f8EDBMMRzqyGteV+Rrpt7XtUKie/FqXf5iAQIQp8NggOHP65jBY5Lx83k+GF7f/zEKhPNfy4rU8r5+HdMb0lAr7OWh5ttrUxJgus5TFzXwXuVNXfxxJHAFVtUdWbgDuBE3s6CBHZW0ROAk5wD00TkZPcW5Gn3AsikrxK80+BQ0TkbyIyW0R+gLNI+B9UtSob8WkHyUDqRcIzTB7cGdc+DUOoMfFccsuj220d9SymHHW7rVOFERUYM6Ztd3hLYZCiQPsb8tQt+4A/lg3gt+WltFS+3IUXk4aNnxBatYLqZUWEP34FX8RpzVJV7njoZ2z83W9aizZuzmPTQmfd+ihw3Sk+Qv74C60aMYF/n7M/kel70G/Ccdz1xTk8dvxjjOrvGRQp4nRXe2a2t6ugBA64iKESpHn3oTx0gFOXDzjt5SgNC+KzrqNbtxJe03brvmybv7qawpFzmFgwh6A7235ILey5LDGpO+F1paTaOb9tSD/GDd2VC2ZekFnl/gCDhk1tbYVNlt+Qenkpr4WbFpKXNIPfWeex45ZHSx6NMdlgLY+ZGwa818H598jO2MTOXASc6Xl8snsDGA9Uuvf9JH3fVfVpN/G8CjgLZ9LP9cB1WYuug2Qw1Wxrvz873dYANNVAnmf2auuYRwWkteUzHPZ0H7rd1v5Ui4QLlI9vYMuH/YnNKQqLoHlBijvYzXFxKMjfS51Wuikb5vGVLr+o9umyV1hVMZCWugD1a5p4ZfAnlE/Zj6r//ZFd//Iwyb3pPveNnjtV+FKpj+ojvsKQZ53lR4tnzmRUWRHPXnJw9gI84hrk8Ku4I9rC3WNfZ+NHP2Pw1q3sUgVRSQyu6Yk/EDz/N+08UYYaa2j2FVP3yQfk7/EpE5OSxS/MT4zF+ykcMevzPHjsTVkJY+Dnvs1H919D0Ya2Pxf9GpsJR8MddjE/sOQBpsRHHBDxues8RlMkj56E0pJHY0w2WMtj5tbhrOnYnn2BrLTedURVz1JVaedW6Sk3W1XHpbj+YVWdoar5qjpGVa/J5r7WHbY8ptphJuMxj54WscaaxHNRp4UxNikk1vIYDsUnRqiARJrxpZiErgLBoijFw+LJZkCVJskn6IdQOxNq8uvj78Gyhuwul9L4ytO01DnJRv26fFY2PMdb3/0aI2+cw8A6p0zlEOcWEwU+26uFAw++kQOuupwtU2ZQPW4Kh/zg7KzG1srnpzBQyAm7H8Sro2fGDye9xU0v/QddtwDN8rjQD1+4kh/9ZRYfHb0nf3zuT/z4oQgT1iXWMcIzPWz+eKEhX9GyARTOmsWg87s+QaY9gT1PZVtp6qbH/k3KZ//7WbvXhqIhnlnxDIO2xmNvzhdaIiA25tEY0wsseczcw8A3ReTKpO7hQhH5MU5r4IM5i66P6Hi2dfx+fJHwDCv07DJDU23iuUhSt7VbfyQcX1sn6lMk0pJyzCNua+SAsYnd4U2ahwg0tjMcbuRm5co5EX5xd5jqunrw1JeJ2m3NVL+xMH5AheErKzlgWXw+VdWIKMMP2sLDB8W/D29N9XHSWQ8zZu9jCJaVcuBj93HAs49SMKTjnVIyNahfPqNO+0a755urhV89cCKf/+tXeG3FsnbLddUtHzzKUQ/lUbTW+W9l5gpl38WpE9SaIrj+az7uPC/MtJf+y7h/30PB5Mkpy3aLCJHxqdff798Ayxbc0/o5TVbbXEtDaBuDPINrAyElFNWEn6WY2Ec4IIEeH0tqjNk5WPKYuauAecA1wGYRWSwinwCbgV8B7wJX5y68viHdMY/Znm0NON3WXkljHgMRiGo0IXmM5bqp5u3EYuw/ppF1A5z9jP8x7WiacVqSmgpSJyST1zqTMKZ+BsMW+aF6RVdeUbuuv/N+tlUmvl8nvBF/U5/ZH/Y8ZAMzg018rWQLdxzp4797CbXf/zq7jW6zJXuvOPPEz5M/PLGJNhbxlto85gwoYGvRSm56+fr0njDFRBGv6poVHPRCNKFlEaC0IXX5yqECIozVQHrjOrth5G4zUh7PD8NK9UFN6sUUmsJN9GuMr8EJkBeGlrCmbnl0D9kyPcaYbLHkMUOqWgcciDOz+iWcv4EKVAAXAJ9X1R7fm05ELhWRJ0RknYioiFzdhWv/6V6TfLs5W/FpB8lgqr2tM9qeEBL/4HfS8uhTZyu6SCiePGosjhRPHUsefX74wwk/oeSe+/jPpMNowvnj3NzORAivQVU+2LQknVfSoQ11TQz/+DEizYmR5oc9ZcYcQj5Oc+gXGhs5dUqQMb+4losPviLj+jNRts/Y1vvbipVVbpe6f6uf/BYn49kcep9IVFm5dSVLqtt5v6o+hN9NhjuOcBaAT+HtBQ+yR6XznPUFnce2YpjzdUJhz7XCjtx173bPrYkGYUvqfy5aIi0JrY4x/kg49ZhH9+fLuqyNMdliv02yQFVDwK3uLVfOAbYCjwLndeP6jcCxSceyNjCvo5ZH7wTleLd1FpbqiUke8xhLHr0LYbc0JbQ8tiaIKbutnS8h9RMsKWHk3jM4f1M+Ta85WWMoX/FuzhOVtuP6Rq8Vohs+wTe1G9NmGmtg/r3oitfgnfcZ71l7PCLg99RVODyPG675K1R+A+76CmiEvad/nb0nndDmaXtb/0P2Z8MzS4mGfIRGt7AyUMC4DYoPGLMBNg1QjnqniVc+PIefzphHfSDMHUfewX7Dk4YYv307bNvo3Ja+gLM8aaLlc19gjPs5e2eSMGqTMsnz6d6WD8WevHP5MOf7N75kLD1l8OQ9EpZ1Cgf8BNyZ3xvDQdiyDPhCm+uaIk0J4x1j8iMtHbc82mQZY0yWWPK445iuqlERCdC95LFFVd/MdlAxHU19SNVtHcg0eUyj21o9jZstLY2EPS2PsTb5AEryyMRYjGH8FOc7P0I/PmpXttaPg49eIZw05nFNuY/RmxO7VQc0wMZP3mPoIWm/ovjz/f3rVNfOY8DLRdSvLGpd6y/kh/fHj2bfpfEdSvof6SYf4w6Ecytg/UcwPfeJI0Bg/AzGHPoHGjcHGTAhzGObCznkI+eT8q3/RRi1OdY1+zqnbRBuO9rPQ58+1DZ5XPt+/P76hcA+LN6ymK0tWwn6gkwfOJ3oovjegx+NE1YPFiati39PXt5dOObd+Kd0xVA3eRyUsHZ+VgWHDCGU5yPY4sSxbeRYBqx0/hPYGvKjm5amHCncHGlO2fJYEG5JmBwTYy2Pxphss98mXSQiP+/GZaqqv8x6MIkVdDzoK9c66rZO2fLY893W6ou3EIabm4iG43296k6KaW+pHoAQfvrlx3+ESvq5ayfmJV6zbFB/Rm9OigHY/MlShgK0NMDKN2DASBgyNV4gGoV170P5hNaWVF35Jn9gCR8HhvKblYmT4d+ZNpwX+h/Kvkv/FY/pjEviBYbvkbitYK4NnkJheYjC8hAMn0FjPz+xhQkmJq1PcOgHymP7Ka8GXyUUCRH0B6lrCnH7Sx9zyfqP4+Nv1n/IE8EqnnviuYTrb6iMf28/HOcsz/TNF53HUYHnZ/o45l13Pcd82FAKAyIRygbvlv3X7RIR/KNHgTuxSXeZAm7ymNck1G5ZSmmK65rCTQyuTd3ymKqh3FoejTHZZslj113djWsU6NHkMQuGiMgmnP2sl+Msbv7bbC3XE+3ihJlApsljR93W7lI93pbHUEtj23Ue6XjCTAQ/xfmevu+gM5hO86LERktGBGoKy4G2yWPDik28/+DpFC1/hSkNW8EXgNMfgAmHOQXe+CM8fxUUlsM3HoERM3m84uc806+YS5+Lf1uemSU8NnMoKzdfSl4kTEvAT144QuG0XQiOHt3OG9QHDJoM4w+Gytdhv/Mp37qIJc8+wGS3kTAqsGowjNvgdMWf/FqUW46t552qd9hn2P5c8O/32Lr0TS71DPB8YMsCnitM/Mj2a1DGuclobRlUF5QggTrmTfYza0mE9ycInw1yljEatwHmT3Amy0xqCSGDJvXoWzDwwEOoXnY3gWHDCOw6FV5yNnQqaYT1tStSJo8tzXUpWx5LIvWtuyV5WfJojMk2Sx67bnyuA+gB83FmjC8ECnB2zfkVMAn4TneeUETmxe5Pnjy5k9nW8T940daxhtnZYQbooOUxfijc0kw07Jm+GktipW2DrqTotnYKu9v05cdfz9YiyB9/IMx3Jj9UjSpl2Gc1AGzbnM9F2xYQGDKA+9Y2MqUlBA9+2+leLhkFc//sPEnjFvQfx7LG9wVq31zNuYXC/u4SM1sL4d7ZPoKNRwNCiz/IVft9h8tlEROuzO2EmE6JwDcfh5Z6yO/P3suf4ifffJjSbbBb0QTyaj7mrcJ8brk1QnEzfH6h8vyeygurXuDJt/vz6qebOMO/glqfcFNZGUs1j93ebOHLRcJLewgnvxdk748aGbIl/lnaMqQfkwPfJFD+IgXXHc8DbzzBI4EPQYTrvu7nqnWDKS1awr6NRVxcXQvlPfvjPuSSSyiaOZOCPfYg9Hp8r4H+DbC+YT1TIiFImiXd1LCJgSnGPJZGaq3b2hjTK+y3SRep6sqerkNEvgD8L42iL6vq7EzrU9Wbkw49LSL1wCUicqOqfprJ84dCISIdLPicap3HdWvXUlFR0e06/eEGDnLv11RVMt/zXIM2zmc3SJjFMu+dt4g0NxAb4RZfMqjtc8e6tEP42VS1hoqKjQCMWr2GiYAvGH9BtcVCdNpM3nvtLYpDjVy3z0Fc3ziHUZth0CZhzAZlbTnMKRvK1es/g8Zq6u84nspxp7Dbtg0ANFYHWPpaIYFtc9nHiaD1+Z/c10ejDuaEQTO4c12YiMLq0ZNZMq6UlspKqKzs3huYocrKyq5//yJQ7O9HTb9tjC7fj/71q3ixMMzj+/k49ZUoPuDK+yLcWf8IV+TfwTl5+azdOpDb+pfycP9ifnZf1J1RrZzxkuLTCCSNGqwsn8BUncAR/XeFzbBuUClhd/H22mJh7bRpnLn4PU6qqqexYCgVr83t+dddVARLl9K8qYox7qH+jUqV38db/32QxqLhCcUXbZ7PPilaHgfo1tTJo/txaW5ozuhnyhhjYix5zDIRKQBOAf6rquu7+TRvAFM7LQXtrFKXFXOAS4C9gS4nj6o6K3Z/ypQp6vO1s+0KSdsTuq2Bo0aOYvZ+s7tarTcAeN0HGqU0H2bP9jzXh5tgYWLL4/SpUwg1evYU9nU+5jGsfqZPnsDsQyY4B97+FJaBPxi/Zlv/IJeefgzfD4zgiQ/W4surYslIYdRmxafw2zsj1BfAY4cW0TJ6NHlbV9Nv2wp2W3JL68tY+M4QilNsd1ybV8hjo46g5bM9+P7PDmfgyJXc89ZKLjtyCgNqPk18zb2soqKiW/Xv37g/VQ1VTCufxrpnq7m76mme3Fc4aXGI4PogeWE4/9FGNo0KUNISpnxDDUf5Chm+S7R1KR4An6bI+v3KKwP35JdH78+koc741GUfLuO1915rLbLn7LPgs+dg2wYKJx/a5dfQ3dcNsG34CFb9ydn+sH8jVAX8nDJpEExKfL5Nr86lPMXiX/0j9R3ubV1WUpbTz4QxZsdhyWP2DQD+ARyBs0d0l6lqA/BJNoPqhthf36zsEdfhmMcU2xNmTMTpum6sbttt7Y559K5yGgk53dath2Itj+1sTwgQIpDYbR10uq2DnpbH5pICfD7hj1+fydjyIm55uZEPdhEOWxB/3n5NcPozDSyaPILdZlTxfP8AN5eXMLWlkO8uhWJ3Yeu1ZfDI7P4E1s9iUF0Bg4/+InWfRvjWAeMpzg/w3UMm8F03ka2oyKixOGcGFg5kYOFAAEZMPZ6n37mDbT4foaN2Y+Nrayhd5nThBj7La/3PKRCFWUs97+eIJurX5ZNX6uOuGcdwdvgR8taFYISwpnQ3Jg7p11p2ZL+RCfWX9xsOZz0Jla/2+qz0/EEDW+/3a4RKvx+2LG9TLly9pc0xgP7RbR22PFq3tTEmW+y3Sc/YEfYAOw0ncXwnG0/W1e0Js7KNWkGpmzzWJB6Pbfvm6bYONzcTCYfiPxCxpXpShdE6YcZHP++EmYAzYcZfGibsc5KaLePLnUtEuOQLk/j32yuZOzKffl9sZtx6ZXCts00eQN6Stbw6fAbXDa3iS68q68oKmLcU9nT3Xln05X15su5kGCIcetBgrvzWvpwZilAQbL9Vd7s27kAGfelmBtWv560RZ1DWOJsnx0X53Fu+1pa32mIY4GmVLZtUz7BZW4lGQL78GyJrP8fJb83klKEVvBGdzj6TRiZ8tkb0G5FQZXlBOfQfBYOn9MYrTOAfEB+nW9KorA8EYHPb7RnD22pSXl8UaUy9PaF7zHaYMcZkiyWPOwgR2RsYR7w9bZqInOTef9ptzUREXgDGqupE9/FY4G7gPmApkI8zYeYs4G+qmpXNhdNdJDxWTrKRfxeWQjXOhIxIGPzuxz0aSx7jRSPhFqIh74SZNLqtCVCc17blsaAwwi9O8zO8Wsk/NL4fcsDv4+jdhvPoxlL+t9fG1uO7r4hyxX+iBKIw8NW1XPMBDK0Bb6NvTbHwh61Htc7WmTm6zKlrR00cY2adCcA+UeWu4EGcNfRhvnX2MMYt9RHyw5u7CtNWKae+EmB63jaGzHAGA/oK+8HMUzlpeJh/v7WKWyJfBeD0iYMSnt6bPBb4CyiMTXrKAQkEaCoooqCpgX6NsN7vdxcKTxStj2fL3gXoi6ONpJjfZbOtjTFZZ9sT7jguAh4A7ncfn+w+fgAY4innJ/GfhjpgC/Bj4HHgP8BM4Hs4Wy5mRdotj9n8RLY34zoS67aOJ2eRlmaikXjyGMt1AxLfczl+Mj5hpl/CbGun5bE0EmXxaKFiDx8DS4YlXPrl3YejodLWx6rCe+V78dS+ToWBaCxxTPT05MmEpKT18cwxpW0L7cB8PqF2j++wJjyOCzfl8cGMUbw+3UfELywZKwR+dTUjTp5Ka8/sjK9Dfn9mji5N6KY+MCl5HFgwsDVhHFQ4KDst3hnQklLAaU3d4POhm5e2KRNujA91rvPkugWRptQtj9ZtbYzJMvttkn1bgEOBD3qzUlU9C6e1sLNys5MebwGO74mYEupJc53HrK50nrzLTLE7pixVy2NLszM7Jcb9i+vDSWgTxpK1t1SP2/I4vaWF2RTzUaCQEyefmBDSvuPLyaOs9XVGm4fTvP7LPDCjicM+Xkz/rU5sGwsHEPWHGFrfQEOe8OSw+PP4BGaOKmVnc9qhe3L6sptR4D/H7YcvuJXFix5mVOl4xk/4IjQvg9WvEBU/vn3PBZzhAtccN53rnlrE0bsNY9iAxI2tRYRz9ziXfy78J9/a7Vs5eFWJguPHw4a15Idh+AYfWyNVDFCN/zcDaEM8eawvEgY0OJ/VgkjHO8xYy6MxJlssecwyd5/rl3MdR1+T9t7WbkKXnTGP3pbHmvh9t4VRvC2PoaRNCD3VR30kZrWe5HFAipZHH/Cnol2pGHwWk8sm4xXw+5g0cBSLm9926m0Yj0b6sXn9WSw4aTOfu+s3rM8fwM8OOIeG4hL2/uw9lg8YzS/OOpxtzWHueXMlx80cwYCinS8RGFJSwP8u9e7nWMCQWZ6dOD93IRSV88FnDezpGbN4wIRBPPW9g2jPd3b/DmfvdnbOWx0Bhhw+my1vvQ7AzOXK+nERBjTXQUG81Vkb44vZ1xf6AaclPS9qO8wYY3qHJY8ZEpGDOymiQCOwOoOle7Z76bY8xmYyZ23MY4x3l5l2Wh59/vj4Qe9uipHkrnTPUj0J3dZl48CfD5FmGDKt3XnqJ+9+ANe++zAAF+9/LH98UmiJRPlt3WAGn3ID67aFCfsCPP29g3hj2QzOH13K3uOciTen7jsm9ZMap+V3729TW1/R5Uv7QuIIUHbIQWy53rk/Y3mUqol+Jm/bmJg8NsX/0akvCBJLHvPDodZWxrBfCUTc8cO2SLgxJsvst0nmKkhzORsR+Qj4qao+1aMR9UHRLs62zoqEbuu2Yx6TWx4l6mmZ8UyUabN8UEK3tWfCSlE5nPEQrP8I9vwGzH03ZVinTDuSwvwbCEiQYyYcSdX6D7nnzVU0haKsDgG+APuMK2PaiBKmjShJ+Rxmx5Q3dixbyvpTXl3HpLWwOOKH+g0wcEK8UFN8bG5tQT7O/6YQiERa10yN+OMt+tbyaIzJNpswk7lvA+8DW4FbgR+4t7+6x+YB3wf+DIwGHhWRw7MZgIhMFpE/iMgCEakXkXUi8riIzOjCcxwvIu+LSJOIrBSRK0Uke1N5c9Hy2F63tdvy6N0BMRpqIZJiwgy03/IYwp842xpg/EGw//mQ34/2iAjHTvwSx0w4EoDLj9qVfd2WxZhjZ45MdanZCVTvtivg7OcdrsqHbRsTzktL/HO6paC49X4gEvG0PMbLW/JojMk2Sx4zNwAoAyap6kWq+kf3diEwBRgEiKp+D2fXmE1AtjcdPhJnks5dwFeAC4DBwFsiMqujCwFE5IvAQzhrOh4N/AG4Erg+WwF22PLYU2Me2+u2TjHmUcMhNBxufezttm4zAzzWKukLZL4HN1BSEOTec/bjuwfvggiMLC3k2BkjOr/Q7JD6HXRg6/2izwLgblMZ42uO/7e12fMPUiAcaf1HLOJNHq3b2hiTZfbbJHMXA7er6qbkE6q6QURux1n25k+qul5E7nCvyab7gD+rxqcLi8iLQCVOq+c3O7n+BuA1VT3XffySiPQDrhSRm1S1KtMAOxrz6M3NeqXb2t1hxpewVE8L4t1CsYNu69atd7L4xzjg93HFMVM55+Bd6F8QID+wg6/faNo19aij2XDDzQSiMGS1H63fmPCvl7TEk8fwgPjSQ76ItiaP0YSWR+ezbIuEG2OyxVoeMzcSaOngfAswyvN4JZCXzQBUdZM3cXSP1QJL3PjaJSKjcdZ1vCfp1N1AEKclMvMY02xJjGa127o0fj/VbGtPFW1aHpNnW3vFYuyBP8aD+uVb4riTGzx4FMuGOx+ykjqhdsWKhPM+T/I4dPTw1vv+sLZ2UadqebRua2NMtljymLllwJkiUpR8QkSKcdZe9G4TMZZu7nndFSJSDuwGLOqk6HT360feg6q6AmgApnWz/nmxG3TcbZ1Qb6xYNlogO5lt7fOr51By8ug51163tbXkmB7gEx+Vo+Krf9cuWsGzK57l3OfOpWLlGwQ8/6rOmDqacGwrzRZPS3qKMY/WbW2MyRZJarAyXSQipwL/xuki/jvOFn8KTMaZTDMG+Iaq3ivOQL4lwLuqemoPx/VvnG0G91DVtttUxMud5sY/VVU/STr3GfBfVT27G/XPc+/uitPS2quLprumul87S6Ct7h2nfqs7N3Xnqar9N2XMTsL+Fc2Qqs4RER/wW+Aa4sv2CFAFnKWq97rHAsBJwLqOnlNEvgD8L43qX07eMca9/grgNODsjhJHT5yQermhbrf/qeosN5Z57uO9u/tc3WV1937dua7f6s5d3caYnYclj1mgqv8WkfuAvYFxOEnXCpwWxoinXIj0WuDeIN6S0JGG5AMich7OLOkrVfXvaTzHFvdreYpzpZ7zxhhjjDGWPGaLmyS+5d4yfa4G4JNOCyYRkW8AfwF+p6rXpXnZQvfrdGCu57nGAUXAx12NwxhjjDE7LhvzmCUisidwHDAepwu4EnhMVd/vpfq/CjwA/N2z5E66184HqlX1UM+xK4GfA2OysVSPMcYYY3YMljxmgYj8BfgubccIKvA3Vb2gh+s/GHgOp5XwIsCzZwvN3gRWRF4AxqrqRM+xY4AngduBOcCewK9w1qb8UU/Gbowxxpjti3VbZ0hELgHOAx4HbsRJ4BSnG/hy4Lsi8omq/rEHwzgMyMdJ+l5POrcSZxxmjJ+k77uqPi0iJwFX4SwttB5n3GS6Xd/GGGOM2UlYy2OGROQjYI2qfrGd888BI1R1t96NzBhjjDEm+2yR8MxNAB7r4PxjbhljjDHGmO2eJY+Zqydx+8FkI90yxhhjjDHbPUseM/cicLGIfD75hIjsjzOB5YVej8oYY4wxpgfYmMcMichEnLUdS3EW945NmJkGHAjUAPulsdOLMcYYY0yfZ8ljFojILjhL2xwDFLuHtwFPAT9V1eW5is0YY4wxJpssecwid4/rwe7Djaoa7ai8McYYY8z2xpJHY4wxxhiTNlskvIvc3Vy6TFVfyXYsxhhjjDG9zVoeu0hEojgTYtK+BFBV9fdQSNs1EfkpcCYwCThBVR/txboLgPuAKUAzzs465/fWGFV3q8hBOJ+nOuBiVZ3fG3V7YvgW8Hfgq7313otIJc773egeukVV7+iluvOAXwNfAlqAlap6TC/VPQJ42nOoGBgPDFHVLb1Q/zHAL3FW2QgAv1HVf/V0vW7dRwHXAnlAA/BdVf2gN+o2xmSftTx23bdyHcAO5gXgfuDOHNV/q6r+F0BELgLuwNnusTecoKq1bt1fBf4JzOyluhGRscA5wJu9VafH13o7UXZdj5PATFHVqIgM762KVXUtnu+viPwEOKCXEkcfcK9b38fu936JiDysqj26Dq2IlAH/Bj6vqotE5AD3se26Zcz2SlXtZre0bzgLov8JmIvTgqDAuHbKjgYeBGqBrcDDwJh2ylYAx+eqfrf83kBljuo+E5jfW3XjtD49D8zq7L3vgborgZm9/XkDitzjJbn+vLvllwDH9dJr9+MsG/Z59/EMYC2Q1wt17w0sSbpmK7BXut8Hu9nNbn3rZouEm66aCJwCVAOvtldIRIpwFlDfFScx+gZO1/RLIlLc3nU5rv9iOt5qMut1i8i/ReQznO7EM3qx7kuB11V1Xgd19lTdAP8SkQ9F5F8iMrKX6p7oPs9PROQdEXlDRI7roO5s1+8tfzDQH2c5rx6vW1UjwMnAoyKy0n2+b6pqS0/XDXwKlIvIge41x7qvfVwHr90Y05flOnu12/Z1A3ye+9+hnRYJ4PtABJjoOTYeCAOXpihfQXotjz1V/xU4rSxFvV235/me6o26gek4XdXBdN77bL9uYKz7NQD8HJjbS697lnv92e7jXYGNwIQcfN7uAm7orc+6+15XAAe7j/fBaXkc1Evf84Pd+ucBfwAWAl/p6PXbzW5267s3a3k0XaLpr115LPCmenbWUdUVwOtAZ609vVq/iFwGnAgcraoNvVm3x53AESIysBfqPhgYC3zqTl7ZH7hNRM7vhbpR1ZXu1zBwE7CfiAR7oe6VOEnQ3e75T4D5wJ7tPWkPfd5KcD5vHY7zzXLdM4ER6q76oKrvAGto57X3wPf8FVWdraqzgMuBEcCiNOswxvQxljyanjId+CjF8YU4Wzf2ifpF5FLgVOAIVa3prbpFpCxpssaJwAYg08kTndatqreq6nBVHaeq43BaIc9V1Vt7um4RKRaRUs+504GPVDXU03Wr6ibgv8BRbizDcSZtfJhh3WnV73EqME9VP81CvenWvRoYISKx78NEnK7pxb1QN0mf9f8DXlTbstWY7ZbNtjY9pRxnvFSyLUBZ7IGIXAmch7Mzz24icguwt6pW9XT9IjIK+B2wHGeMFkBYVffu6brdr/e7ywVFcRLHL6uq9kLdPSWduocCD4mIH2cZq9U4Y/F6o26A84E7ReQ6nPf9MlXNNIHqSv0AZ+NMRsmWTutW1fUicg7OZy6K03Bwoaqu6um6XdeIyEE4f3Pm4rwHxpjtlCWPpielSoQkoYDqtTjrv/V6/ar6WXI8vVj3cpxxZ71ed5vCqrN7q273dbfbTdyTdbv1VwKH56p+N4Z9c1G3qs4B5uSo7nN6oF5jTI5Yt7XpKdU4rRLJykjdUrEj1W9171x157r+nbVuY0yOWPJoespCnPFQyaYBH+/g9VvdO1fdua5/Z63bGJMjljyanvI4sL+I7BI7ICLjgAPdczty/Vb3zlV3ruvfWes2xuSI7W1tukxETnLvHo4z2eUCnPXyNqrqy26ZYuADnP2Lr8QZF/VLnMWB99AMtkTLZf1W985Vd67r31nrNsb0cbleaNJu298N5w9EqltFUrkxwEM4W5HVAY/SzhZn20v9VvfOVXeu699Z67ab3ezWt2/W8miMMcYYY9JmYx6NMcYYY0zaLHk0xhhjjDFps+TRGGOMMcakzZJHY4wxxhiTNksejTHGGGNM2ix5NMYYY4wxabPk0RhjjDHGpM2SR2P6KBFREfmn5/E499jVuYtq+yAiV7vv1W65jsUYY3Y0ljwas4MTkVI3mZqd61iMMcZs/wK5DsAYk7aVQCEQ7uJ1pcBV7v2KLMZjjDFmJ2TJozHbCXX2Em3KdRzGGGN2btZtbUyOichYEXlEROpEpFpE5ojI0BTl2ox5FBG/iFwuIgtFZJuI1IjIhyJyvXt+NrDCLX6Ve72KSIV7vr+IXCci74rIFhFpcq+/IEX9sXGEe4nItSKyxi3/togcmKK8T0QuFpH3RKTBje0tEfl2UrmBInKziKwUkRYR+UxE/iQiA7r/rrYqEpFbRGS9G8OLIjIjqf7Z7uu6SES+JyJLPe/DyVmIwRhjdijW8mhMDolIGfAqMBT4M7AM+BLwTJpP8X84XdL/Av6I8zM9CZjtnl8E/AC4CXgEeNg9vt79OhL4FvAg8A8gCJwA/FlEylX12hR1/hVoBn4N9AMuA54QkXGqutV9XQLcD5yE01V+FdAIzACOBf7uef1zgUHAbcByYDpwHrC/iByoqi1pvhep3IbTWnu9W8fFwMsiMktVlyWV/Y5b5q/uNWcD94uIquqDGcRgjDE7FEsejcmtHwOjgVNU9QEAEfkL8ACwZxrXHwc8o6pnpjqpqutF5FGc5HGBqt6TVGQ5MEZVW8dRisgfgOeBH4nIjaoaSrqmFviiqkbd8p/gJJ+n4SReAF/HSRxvBS50u9xjzy+e57oWGAbspapLPWXeBO4FzsBNNLspChyiqs3u8z4BvOXWe2pS2cnArqq6yi17B7AQuElEHlHVSAZxGGPMDsO6rY3JreOAVTjJF9A6tvG3aV5fA0wTkandqVxVW2KJo4jkiUg5MBAneSwBdk1x2S2xxNH1kvt1oufYqUAE+Kk3cXTrVLc+Ab4GvAjUiMig2M19zjBwRHdeV1KszZ6638Zp6f2yiCT//nswlji6ZWuAO4FRwKwM4zDGmB2GJY/G5NZ4YHFygoXT3ZyOK4Fi4GMRWSwit4rIl5Ja99oljkvc1sMmYDOwEaebF6AsxWWV3gequsW9O9BzeBKw0k3A2jPYveY4t07vbR1Oz8iQdF5HBz5JcWwxTnf74DTLgvN9MsYYg3VbG7NdU9XXRWQX4GjgMOBInPGCL4jIUd7u6HZchjN28SngBpyxkCHgGJyxkqn+wWyv+zathNUj9txP43Srp1Ldxec0xhjTwyx5NCa3VgBTxJ2V4Tmedje0qtYB/3FviMiNwOU4CeUTQHKrptdpbgxfSRqXeFjaryC1JcAxIjJAVWvbKbMRZ/xkkao+n2F97dkVeCPp2BSg3q0/uWyyKe7XFSnOGWPMTsm6rY3JrceBMTiTS4DWsYA/TOdid3xgsvfdr7Fu5Hr3a6ou6AhOctn6u0BEBgLfTlG2K+7D+ee0zWztWJe6OwHlfmC2iByZolzAnY2diYtEJN/znPsCBwFPJY3bBDhJRMZ4yg7AmXG9BpiXYRzGGLPDsJZHY3Lr1zitf/eIyOeIL9UzPM3rF4nIG8DbOOMExwIXAFtwuoNR1c0isgz4uogsxWlx26CqL+Is33Mt8KQ7K3sIcC5OwtRmrckuuA84GSd5m4az9FADsDvO7OqvuuWuAA4GnhaRu4F3cX4vTQROxGlBvQdARM7CWU7oF6p6dZpx+HCW5plDfKmerThLHCVbArwhIrfiLEV0NjAC+LrNtDbGmDhLHo3JITexOxi4GSdpCwHP4qy9WJXGU/wO+DJwCc7s6CrgSeA6Vd3gKfcN4PfAjThbHL6MM8v5RiAPOBM4FKd79kac1sp/ZPC61F1g+/vua7kWZ0LOYpzle2LltojI/jhLFp2Ik0hvw9mK8S4St1Ps735d04VQzgW+CfzMvf5N4FJV/TRF2Ttwks3v48ywXoqTON7fhfqMMWaHJ20neRpjTN8jIg8BewDTUqw9mcnzzsZZGuhiVb0lW89rjDE7Kmt5NMb0ee6ajIcC52QzcTTGGNN1ljwaY/o8d3JLea7jMMYYY7OtjTHGGGNMF9iYR2OMMcYYkzZreTTGGGOMMWmz5NEYY4wxxqTNkkdjjDHGGJM2Sx6NMcYYY0zaLHk0xhhjjDFps+TRGGOMMcak7f8BPJaIVJsAeiQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(6,10))\n", "gs = matplotlib.gridspec.GridSpec(2,1, height_ratios=[8, 1.5])\n", "ax1 = fig.add_subplot(gs[0,0])\n", "ax2 = fig.add_subplot(gs[1,0])\n", "\n", "strand_gb = cis_scalings.groupby(['strand1', 'strand2'])\n", "for strands in ['+-', '-+', '++', '--']:\n", " sc_strand = strand_gb.get_group(tuple(strands))\n", " sc_agg = (sc_strand\n", " .groupby(['min_dist','max_dist'])\n", " .agg({'n_pairs':'sum', 'n_bp2':'sum'})\n", " .reset_index())\n", "\n", " dist_bin_mids = np.sqrt(sc_agg.min_dist * sc_agg.max_dist)\n", " pair_frequencies = sc_agg.n_pairs / sc_agg.n_bp2\n", " mask = pair_frequencies>0\n", " label = f'{strands[0]}{strands[1]}'\n", "\n", " ax1.loglog(\n", " dist_bin_mids[mask],\n", " pair_frequencies[mask],\n", " label=label,\n", " lw=2\n", " )\n", "\n", " ax2.semilogx(\n", " np.sqrt(dist_bin_mids.values[1:]*dist_bin_mids.values[:-1]),\n", " np.diff(np.log10(pair_frequencies.values)) / np.diff(np.log10(dist_bin_mids.values)),\n", " label=label\n", " )\n", " \n", "ax1.axhline(avg_trans, ls='--', c='gray', label='average trans')\n", "\n", "plt.sca(ax1)\n", "plt.gca().set_aspect(1.0)\n", "plt.gca().xaxis.set_major_locator(matplotlib.ticker.LogLocator(base=10.0,numticks=20))\n", "plt.gca().yaxis.set_major_locator(matplotlib.ticker.LogLocator(base=10.0,numticks=20))\n", "plt.xlim(1e1,1e9)\n", "# plt.ylim(avg_trans / 3, plt.ylim()[1])\n", "\n", "plt.grid(lw=0.5,color='gray')\n", "plt.legend(loc=(1.1,0.4))\n", "plt.ylabel('contact frequency, \\nHi-C molecule per bp pair')\n", "plt.xlabel('distance, bp')\n", "\n", "plt.sca(ax2)\n", "plt.xlim(1e1,1e9)\n", "plt.ylim(-2,0.5)\n", "plt.gca().set_aspect(1.0)\n", "plt.ylabel('log-log slope') \n", "plt.xlabel('distance, bp')\n", "\n", "plt.yticks(np.arange(-2,0.6,0.5))\n", "plt.gca().xaxis.set_major_locator(matplotlib.ticker.LogLocator(base=10.0,numticks=20))\n", "plt.grid(lw=0.5,color='gray')\n", "\n", "# fig.tight_layout()\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10", "language": "python", "name": "python310" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 4 } pairtools-1.0.3/doc/formats.rst000066400000000000000000000336201452673171500165200ustar00rootroot00000000000000Formats for storing Hi-C pairs ============================== .pairs ------ `.pairs` is a simple tabular format for storing DNA contacts detected in a Hi-C experiment. The detailed `.pairs specification `_ is defined by the 4DN Consortium. The body of a .pairs contains a table with a variable number of fields separated by a "\\t" character (a horizontal tab). The .pairs specification fixes the content and the order of the first seven columns: ======== =========== =============================================================================== index name description ======== =========== =============================================================================== 1 read_id the ID of the read as defined in fastq files 2 chrom1 the chromosome of the alignment on side 1 3 pos1 the 1-based genomic position of the outer-most (5') mapped bp on side 1 4 chrom2 the chromosome of the alignment on side 2 5 pos2 the 1-based genomic position of the outer-most (5') mapped bp on side 2 6 strand1 the strand of the alignment on side 1 7 strand2 the strand of the alignment on side 2 ======== =========== =============================================================================== A .pairs file starts with a header, an arbitrary number of lines starting with a "#" character. By convention, the header lines have a format of "#field_name: field_value". The `.pairs specification `_ mandates a few standard header lines (e.g., column names, chromosome order, sorting order, etc), all of which are automatically filled in by `pairtools`. The entries of a .pairs file can be flipped and sorted. "Flipping" means that *the sides 1 and 2 do not correspond to side1 and side2 in sequencing data.* Instead, side1 is defined as the side with the alignment with a lower sorting index (using the lexographic order for chromosome names, followed by the numeric order for positions and the lexicographic order for pair types). This particular order of "flipping" is defined as "upper-triangular flipping", or "triu-flipping". Finally, pairs are *typically* block-sorted: i.e. first lexicographically by chrom1 and chrom2, then numerically by pos1 and pos2. Pairtools' flavor of .pairs --------------------------- .pairs files produced by `pairtools` extend .pairs format in a few ways. 1. `pairtools` store null, unmapped, ambiguous (multiply mapped) and chimeric (if not parsed by `parse2` or `--walks-policy all` of `parse`) alignments as chrom='!', pos=0, strand='-'. #. `pairtools` store the header of the source .sam files in the '#samheader:' fields of the pairs header. When multiple .pairs files are merged, the respective '#samheader:' fields are checked for consistency and merged. #. Each pairtool applied to .pairs leaves a record in the '#samheader' fields (using a @PG sam tag), thus preserving the full history of data processing. #. `pairtools` append an extra column describing the type of a Hi-C pair: ======== =========== =============================================================================== index name description ======== =========== =============================================================================== 8 pair_type the type of a Hi-C pair ======== =========== =============================================================================== .. _section-pair-types: Pair types ---------- `pairtools` use a simple two-character notation to define all possible pair types, according to the quality of alignment of the two sides. The type of a pair can be defined unambiguously using the table below. To use this table, identify which side has an alignment of a "poorer" quality (unmapped < multimapped < unique alignment) and which side has a "better" alignment and find the corresponding row in the table. ======================== ====== =============== ========= ================== ========= ================== =========== . . . Less informative alignment More informative alignment . ------------------------ ------ --------------- ---------------------------- ---------------------------- ----------- Pair type Code >2 alignments Mapped Unique Mapped Unique Sidedness walk-walk WW |check| |cross| |cross| |cross| |cross| 0 [1]_ null NN |cross| |cross| |cross| 0 corrupt XX |cross| |cross| |cross| 0 [2]_ null-multi NM |cross| |cross| |check| |cross| 0 null-rescued NR |check| |cross| |check| |check| 1 [3]_ null-unique NU |cross| |cross| |check| |check| 1 multi-multi MM |cross| |check| |cross| |check| |cross| 0 multi-rescued MR |check| |check| |cross| |check| |check| 1 [3]_ multi-unique MU |cross| |check| |cross| |check| |check| 1 rescued-unique RU |check| |check| |check| |check| |check| 2 [3]_ unique-rescued UR |check| |check| |check| |check| |check| 2 [3]_ unique-unique UU |cross| |check| |check| |check| |check| 2 duplicate DD |cross| |check| |check| |check| |check| 2 [4]_ ======================== ====== =============== ========= ================== ========= ================== =========== .. [1] "walks", or, `C-walks `_ are Hi-C molecules formed via multiple ligation events which cannot be reported as a single pair. .. [2] "corrupt" pairs are those with technical issues - e.g. missing a FASTQ sequence/SAM entry from one side of the molecule. .. [2] "rescued" pairs have two non-overlapping alignments on one of the sides (referred below as the chimeric side/read), but the inner (3'-) one extends the only alignment on the other side (referred as the non-chimeric side/read). Such pairs form when one of the two ligated DNA fragments is shorter than the read length. In this case, one of the reads contains this short fragment entirely, together with the ligation junction and a chunk of the other DNA fragment (thus, this read ends up having two non-overlapping alignments). Following the procedure introduced in `HiC-Pro `_ and `Juicer `_, `pairtools parse` rescues such Hi-C molecules, reports the position of the 5' alignment on the chimeric side, and tags them as "NU", "MU", "UR" or "RU" pair type, depending on the type of the 5' alignment on the chimeric side. Such molecules can and should be used in downstream analysis. Read more on the rescue procedure in :doc:`the section on parsing `. .. [3] `pairtools dedup` detects molecules that could be formed via PCR duplication and tags them as "DD" pair type. These pairs should be excluded from downstream analyses. .pairsam -------- `pairtools` also define .pairsam, a valid extension of the .pairs format. On top of the pairtools' flavor of .pairs, .pairsam format adds two extra columns containing the alignments from which the Hi-C pair was extracted: ======== =========== =============================================================================== index name description ======== =========== =============================================================================== 9 sam1 the sam alignment(s) on side 1; separate supplemental alignments by NEXT_SAM 10 sam2 the sam alignment(s) on side 2; separate supplemental alignments by NEXT_SAM ======== =========== =============================================================================== Note that, normally, the fields of a sam alignment are separated by a horizontal tab character (\\t), which we already use to separate .pairs columns. To avoid confusion, we replace the tab character in sam entries stored in sam1 and sam2 columns with a UNIT SEPARATOR character (\\031). Finally, sam1 and sam2 can store multiple .sam alignments, separated by a string '\\031NEXT_SAM\\031' .. |check| unicode:: U+2714 .. check .. |cross| unicode:: U+274C .. cross Extra columns ---------------- `pairtools` can operate on `.pairs/.pairsam` with extra columns. Extra columns are specified in the order defined by the order their addition by various tools. Column names can be checked in the header of `.pairs/.pairsam` file. We provide `pairtools header` utilities for manipulating and verifying compatibility of headers and their columns. The list of additional columns used throughout `pairtools` modules: =================================== =================== ====================== ================================================== ================= extra column generating module format how to add it description =================================== =================== ====================== ================================================== ================= mapq1, mapq2 `parse/parse2` number from 0 to 255 `pairtools parse --add-columns mapq` `Mapping quality `_, as reported in .sam/.bam, $-10 log_{10}(P_{error})$ pos51, pos52 `parse/parse2` genomic coordinate `pairtools parse --add-columns pos5` 5' position of alignment (closer to read start) pos31, pos32 `parse/parse2` genomic coordinate `pairtools parse --add-columns pos3` 3' position of alignment (further from read start) cigar1, cigar2 `parse/parse2` string `pairtools parse --add-columns cigar` `CIGAR, or Compact Idiosyncratic Gapped Alignment Report `_ of alignment, as reported in .sam/.bam read_len1, read_len2 `parse/parse2` number `pairtools parse --add-columns read_len` read length matched_bp1, matched_bp2 `parse/parse2` number `pairtools parse --add-columns matched_bp` number of matched alignment basepairs to the reference algn_ref_span1, algn_ref_span2 `parse/parse2` number `pairtools parse --add-columns algn_ref_span` basepairs of reference covered by alignment algn_read_span1, algn_read_span2 `parse/parse2` number `pairtools parse --add-columns algn_read_span` basepairs of read covered by alignment dist_to_51, dist_to_52 `parse/parse2` number `pairtools parse --add-columns dist_to_5` distance to 5'-end of read dist_to_31, dist_to_32 `parse/parse2` number `pairtools parse --add-columns dist_to_3` distance to 3'-end of read seq1, seq2 `parse/parse2` string `pairtools parse --add-columns seq` sequence of alignment mismatches1, mismatches2 `parse/parse2` string `pairtools parse --add-columns mismatches` comma-separated list of mismatches relative to the reference, "{ref_letter}:{mut_letter}:{phred}:{ref_position}:{read_position}" XB1/2,AS1/2,XS1/2 or any sam tag `parse/parse2` `pairtools parse --add-columns XA,XB,NM` format depends on `tag specification `_ walk_pair_type `parse/parse2` string `pairtools parse2 --add-pair-index` Type of the pair relative to R1 and R2 reads of paired-end sequencing, see `pasring docs `_ walk_pair_index `parse/parse2` number `pairtools parse2 --add-pair-index` Order of the pair in the complex walk, starting from 5'-end of left read, see `pasring docs `_ phase `phase` 0, 1 or "." `pairtools phase` Phase of alignment (haplotype 1, 2, on unphased), see `phasing walkthrough `_ rfrag1, rfrag2 `restrict` number `pairtools restrict` Unique index of the restriction fragment after annotating pairs positions, see `restriction walkthrough `_ rfrag_start1, rfrag_start2 `restrict` number `pairtools restrict` Coordinate of the start of restriction fragment rfrag_end1, rfrag_end2 `restrict` number `pairtools restrict` Coordinate of the end of restriction fragment =================================== =================== ====================== ================================================== ================= pairtools-1.0.3/doc/index.rst000066400000000000000000000054331452673171500161550ustar00rootroot00000000000000.. pairtools documentation master file, created by sphinx-quickstart on Wed Dec 6 12:32:49 2017. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Overview ======== `pairtools` is a simple and fast command-line framework to process sequencing data from a Hi-C experiment. `pairtools` perform various operations on Hi-C pairs and occupy the middle position in a typical Hi-C data processing pipeline: .. figure:: _static/hic-processing-pipeline.png :width: 100% :alt: The diagram of a typical processing pipeline for Hi-C data :align: center In a typical Hi-C pipeline, DNA sequences (reads) are aligned to the reference genome, converted into ligation junctions and binned, thus producing a Hi-C contact map. `pairtools` aim to be an all-in-one tool for processing Hi-C pairs, and can perform following operations: - detect ligation junctions (a.k.a. Hi-C pairs) in aligned paired-end sequences of Hi-C DNA molecules - sort .pairs files for downstream analyses - detect, tag and remove PCR/optical duplicates - generate extensive statistics of Hi-C datasets - select Hi-C pairs given flexibly defined criteria - restore .sam alignments from Hi-C pairs `pairtools` produce .pairs files compliant with the `4DN standard `_. `pairtools` uses a two-character notation to define pair types (see table :ref:`_section-pair-types`) The full list of available pairtools: ============ ============================================== Pairtool Description ============ ============================================== dedup Find and remove PCR/optical duplicates. filterbycov Remove pairs from regions of high coverage. flip Flip pairs to get an upper-triangular matrix. markasdup Tag pairs as duplicates. merge Merge sorted .pairs/.pairsam files. parse Find ligation junctions in .sam, make .pairs. phase Phase pairs mapped to a diploid genome. restrict Assign restriction fragments to pairs. select Select pairs according to some condition. sort Sort a .pairs/.pairsam file. split Split a .pairsam file into .pairs and .sam. stats Calculate pairs statistics. ============ ============================================== Contents: .. toctree:: :hidden: self .. toctree:: :maxdepth: 3 quickstart installation parsing sorting formats stats technotes cli_tools .. toctree:: :maxdepth: 3 :caption: Tutorials :titlesonly: ./examples/pairtools_walkthrough.ipynb ./examples/scaling_example.ipynb ./examples/pairtools_restrict_walkthrough.ipynb ./examples/pairtools_phase_walkthrough.ipynb ./examples/benchmark/benchmark.ipynb * :ref:`genindex` pairtools-1.0.3/doc/installation.rst000066400000000000000000000033571452673171500175520ustar00rootroot00000000000000Installation ============ Requirements ------------ - Python 3.x - Python packages `numpy` and `click` - Command-line utilities `sort` (the Unix version), `bgzip` (shipped with `samtools`) and `samtools`. If available, `pairtools` can compress outputs with `bgzip`, `pbgzip` and `lz4`. Install using conda ------------------- We highly recommend using the `conda` package manager to install pre-compiled `pairtools` together with all its dependencies. To get it, you can either install the full `Anaconda `_ Python distribution or just the standalone `conda `_ package manager. With `conda`, you can install pre-compiled `pairtools` and all of its dependencies from the `bioconda `_ channel: .. code-block:: bash $ conda install -c conda-forge -c bioconda pairtools Install using pip ----------------- Alternatively, compile and install `pairtools` and its Python dependencies from PyPI using pip: .. code-block:: bash $ pip install pairtools Install the development version ------------------------------- Finally, you can install the latest development version of `pairtools` from github. First, make a local clone of the github repository: .. code-block:: bash $ git clone https://github.com/open2c/pairtools Then, you can compile and install `pairtools` in `the development mode `_, which installs the package without moving it to a system folder and thus allows immediate live-testing any changes in the python code. Please, make sure that you have `cython` installed! .. code-block:: bash $ cd pairtools $ pip install -e ./ pairtools-1.0.3/doc/parsing.rst000066400000000000000000000350171452673171500165120ustar00rootroot00000000000000Parsing sequence alignments into Hi-C pairs =========================================== Overview -------- Hi-C experiments aim to measure the frequencies of contacts between all pairs of loci in the genome. In these experiments, the spacial structure of chromosomes is first fixed with formaldehyde crosslinks, after which DNA is partially digested with restriction enzymes and then re-ligated back. Then, DNA is shredded into smaller pieces, released from the nucleus, sequenced and aligned to the reference genome. The resulting sequence alignments reveal if DNA molecules were formed through ligations between DNA from different locations in the genome. These ligation events imply that ligated loci were close to each other when the ligation enzyme was active, i.e. they formed "a contact". ``pairtools parse`` detects ligation events in the aligned sequences of DNA molecules formed in Hi-C experiments and reports them in the .pairs/.pairsam format. Terminology ----------- Throughout this document we will be using the same visual language to describe how DNA sequences (in the .fastq format) are transformed into sequence alignments (.sam/.bam) and into ligation events (.pairs). .. figure:: _static/terminology.png :scale: 50 % :alt: The visual language to describe transformation of Hi-C data :align: center DNA sequences (reads) are aligned to the reference genome and converted into ligation events Short-read sequencing determines the sequences of the both ends (or, **sides**) of DNA molecules (typically 50-300 bp), producing **read pairs** in .fastq format (shown in the first row on the figure above). In such reads, base pairs are reported from the tips inwards, which is also defined as the **5'->3'** direction (in accordance of the 5'->3' direction of the DNA strand that sequence of the corresponding side of the read). Alignment software maps both reads of a pair to the reference genome, producing **alignments**, i.e. segments of the reference genome with matching sequences. Typically, if the read length is not very large (< 150 bp), there will be only two alignments per read pair, one on each side. But, sometimes, the parts of one or both sides may map to different locations on the genome, producing more than two alignments per DNA molecule (see :ref:`section-walks`). ``pairtools parse`` converts alignments into **ligation events** (aka **Hi-C pairs** aka **pairs**). In the simplest case, when each side has only one unique alignment (i.e. the whole side maps to a single unique segment of the genome), for each side, we report the chromosome, the genomic position of the outer-most (5') aligned base pair and the strand of the reference genome that the read aligns to. ``pairtools parse`` assigns to such pairs the type ``UU`` (unique-unique). Unmapped/multimapped reads -------------------------- Sometimes, one side or both sides of a read pair may not align to the reference genome: .. figure:: _static/read_pair_NU_NN.png :scale: 50 % :alt: Read pairs missing an alignment on one or both sides :align: center Read pairs missing an alignment on one or both sides In this case, ``pairtools parse`` fills in the chromosome of the corresponding side of Hi-C pair with ``!``, the position with ``0`` and the strand with ``-``. Such pairs are reported as type ``NU`` (null-unique, when the other side has a unique alignment) or ``NN`` (null-null, when both sides lack any alignment). Similarly, when one or both sides map to many genome locations equally well (i.e. have non-unique, or, multi-mapping alignments), ``pairtools parse`` reports the corresponding sides as (chromosome= ``!``, position= ``0``, strand= ``-``) and type ``MU`` (multi-unique) or ``MM`` (multi-multi) or ``NM`` (null-multi), depending on the type of the alignment on the other side. .. figure:: _static/read_pair_MU_MM_NM.png :scale: 50 % :alt: Read pairs with a non-unique alignment on one or both sides :align: center Read pairs with a non-unique (multi-) alignment on one side ``pairtools parse`` calls an alignment to be multi-mapping when its `MAPQ score `_ (which depends on the scoring gap between the two best candidate alignments for a segment) is equal or greater than the value specied with the ``--min-mapq`` flag (by default, 1). .. _section-walks: Multiple ligations (walks) -------------------------- If the read is long enough (e.g. larger than 150 bp), it may contain more than two alignments: .. figure:: _static/read_pair_WW.png :scale: 50 % :alt: A sequenced Hi-C molecule that was formed via multiple ligations :align: center A sequenced Hi-C molecule that was formed via multiple ligations Molecules like these typically form via multiple ligation events and we call them walks [1]_. The mode of walks reporting is controlled by ``--walks-policy`` parameter of ``pairtools parse``. You can report all the alignments in the reads by using ``pairtools parse2`` (see :ref:`parse2`). A pair of sequential alignments on a single read is **ligation junction**. Ligation junctions are the Hi-C contacts that have been directly observed in the experiment. However, traditional Hi-C pairs do not have direct evidence of ligation because they arise from read pairs that do not necessarily contain ligation junction. To filter out the molecules with complex walks, ``--walks-policy`` can be set to: - ``mask`` to tag these molecules as type ``WW`` (single ligations are rescued, see :ref:`Rescuing single ligations`), - ``5any`` to report the 5'-most alignment on each side, - ``5unique`` to report the 5'-most unique alignment on each side, - ``3any`` to report the 3'-most alignment on each side, - ``3unique`` to report the 3'-most unique alignment on each side, - ``all`` to report all sequential alignments (complex ligations are rescued, see :ref:`Rescuing complex walks`). Parse modes for walks: .. figure:: _static/rescue_modes.svg :width: 60 % :alt: Parse modes for walks :align: center Rescuing single ligations ------------------------- Importantly, some of DNA molecules containing only one ligation junction may still end up with three alignments: .. figure:: _static/read_pair_UR.png :scale: 50 % :alt: Not all read pairs with three alignments come from "walks" :align: center Not all read pairs with three alignments come from "walks" A molecule formed via a single ligation gets three alignments when one of the two ligated DNA pieces is shorter than the read length, such that that read on the corresponding side sequences through the ligation junction and into the other piece [2]_. The amount of such molecules depends on the type of the restriction enzyme, the typical size of DNA molecules in the Hi-C library and the read length, and sometimes can be considerable. ``pairtools parse`` detects such molecules and **rescues** them (i.e. changes their type from a *walk* to a single-ligation molecule). It tests walks with three aligments using three criteria: .. figure:: _static/read_pair_UR_criteria.png :scale: 50 % :alt: The three criteria used for "rescue" :align: center The three criteria used to "rescue" three-alignment walks: cis, point towards each other, short distance 1. On the side with two alignments (the **chimeric** side), the "inner" (or, 3') alignment must be on the same chromosome as the alignment on the non-chimeric side. 2. The "inner" alignment on the chimeric side and the alignment on the non-chimeric side must point toward each other. 3. These two alignments must be within the distance specified with the ``--max-molecule-size`` flag (by default, 2000bp). Sometimes, the "inner" alignment on the chimeric side can be non-unique or "null" (i.e. when the unmapped segment is longer than ``--max-inter-align-gap``, as described in :ref:`Interpreting gaps between alignments`). ``pairtools parse`` ignores such alignments altogether and thus rescues such *walks* as well. .. figure:: _static/read_pair_UR_MorN.png :scale: 50 % :alt: A walk with three alignments get rescued, when the middle alignment is multi- or null :align: center A walk with three alignments get rescued, when the middle alignment is multi- or null. Interpreting gaps between alignments ------------------------------------ Reads that are only partially aligned to the genome can be interpreted in two different ways. One possibility is to assume that this molecule was formed via at least two ligations (i.e. it's a *walk*) but the non-aligned part (a **gap**) was missing from the reference genome for one reason or another. Another possibility is to simply ignore this gap (for example, because it could be an insertion or a technical artifact), thus assuming that our molecule was formed via a single ligation and has to be reported: .. figure:: _static/read_pair_gaps_vs_null_alignment.png :scale: 50 % :alt: A gap between alignments can be ignored or interpeted as a "null" alignment :align: center A gap between alignments can interpeted as a legitimate segment without an alignment or simply ignored Both options have their merits, depending on a dataset, quality of the reference genome and sequencing. ``pairtools parse`` ignores shorter *gaps* and keeps longer ones as "null" alignments. The maximal size of ignored *gaps* is set by the ``--max-inter-align-gap`` flag (by default, 20bp). Rescuing complex walks ------------------------- We call the multi-fragment DNA molecule that is formed during Hi-C (or any other chromosome capture with sequencing) a walk. If the reads are long enough, the right (reverse) read might read through the left (forward) read. Thus, left read might span multiple ligation junctions of the right read. The pairs of contacts that overlap between left and right reads are intermolecular duplicates that should be removed. If the walk has no more than two different fragments at one side of the read, this can be rescued with simple ``pairtools parse --walks-policy mask``. However, in complex walks (two fragments on both reads or more than two fragments on any side) you need specialized functionality that will report all the deduplicated pairs in the complex walks. This is especially relevant if you have the reads length > 100 bp, since more than 20% or all restriction fragments in the genome are then shorter than the read length. We put together some statistics about number of short restriction fragments for DpnII enzyme: ======== ================= ================== ================== ================== ================== Genome #rfrags <50 bp <100 bp <150 bp <175 bp <200 bp -------- ----------------- ------------------ ------------------ ------------------ ------------------ hg38 828538 (11.5%) 1452918 (20.2%) 2121479 (29.5%) 2587250 (35.9%) 2992757 (41.6%) mm10 863614 (12.9%) 1554461 (23.3%) 2236609 (33.5%) 2526150 (37.9%) 2780769 (41.7%) dm3 65327 (19.6%) 108370 (32.5%) 142662 (42.8%) 156886 (47.1%) 169339 (50.9%) ======== ================= ================== ================== ================== ================== Consider the read with overlapping left and right sides: .. figure:: _static/rescue_modes_readthrough.svg :width: 60 % :alt: Complex walk with overlap :align: center ``pairtools`` can detect such molecules and parse them. Briefly, we detects all the unique ligation junctions, and do not report the same junction as a pair multiple times. To parse complex walks, you may use ``pairtools parse --walks-policy all`` and ``parse2``, which have slightly different functionalities. ``pairtools parse --walks-policy all`` is used with regular paired-end Hi-C, when you want all pairs in the walk to be reported as if they appeared in the sequencing data independently. ``parse2`` is used with single-end data or when you want to customize your reporting (orientation, position of alignments, or perform combinatorial expansion). For example, ``parse2`` defaults to reporting ligation junctions instead of outer ends of the alignments. The complete guide through the reporting options of ``parse2``, orientation: .. figure:: _static/report-orientation.svg :width: 60 % :alt: parse2 --report-orientation :align: center position: .. figure:: _static/report-positions.svg :width: 60 % :alt: parse2 --report-position :align: center Sometimes it is important to restore the sequence of ligation events (e.g., for MC-3C data). For that, you can add special columns ``walk_pair_index`` and ``walk_pair_type`` by setting ``--add-pair-index`` option of ``parse2``, that will keep the order and type of pair in the whole walk in the output .pairs file. - ``walk_pair_index`` contains information on the order of the pair in the complex walk, starting from 5'-end of left read - ``walk_pair_type`` describes the type of the pair relative to R1 and R2 reads of paired-end sequencing: - "R1-2" - unconfirmed pair, right and left alignments in the pair originate from different reads (left or right). This might be indirect ligation (mediated by other DNA fragments). - "R1" - pair originates from the left read. This is direct ligation. - "R2" - pair originated from the right read. Direct ligation. - "R1&2" - pair was sequenced at both left and right read. Direct ligation. With this information, the whole sequence of ligation events can be restored from the .pair file. Combinatorial expansion is a way to increase the number of contacts in you data, which assumes that all DNA fragments in the same molecule (read) are in contact. Use ``--expand`` parameter for combinatorial expansion. Note that expanded pairs have modified pair type, "E{separation}_{pair type}", e.g.: - "E1_R1" is a pair obtained by combining left alignment of some pair in R1 read and right alignment of the next pair in R1 sequence of the same read. - "E2_R1" is a pair obtained by combining left alignment of some pair in R1 read and right alignment of the pair separated by 2 alignments in R1 sequence of the same read. - "E2_R1&2" as above, both source pairs were sequenced on both R1 and R2. - "E4_R1-2" is a pair obtained by combining left alignment of some pair in R1 read and right alignment of some pair in R1 sequence, separated by at least 4 alignments in between. Note that "-" in the pair type means that pair is separated by unsequenced gap, which may contain other pairs. .. [1] Following the lead of `C-walks `_ .. [2] This procedure was first introduced in `HiC-Pro `_ and the in `Juicer `_ . pairtools-1.0.3/doc/quickstart.rst000066400000000000000000000024131452673171500172330ustar00rootroot00000000000000Quickstart ========== Install `pairtools` and all of its dependencies using the `conda `_ package manager and the `bioconda `_ channel for bioinformatics software. .. code-block:: bash $ conda install -c conda-forge -c bioconda pairtools Setup a new test folder and download a small Hi-C dataset mapped to sacCer3 genome: .. code-block:: bash $ mkdir /tmp/test-pairtools $ cd /tmp/test-pairtools $ wget https://github.com/open2c/distiller-test-data/raw/master/bam/MATalpha_R1.bam Additionally, we will need a .chromsizes file, a TAB-separated plain text table describing the names, sizes and the order of chromosomes in the genome assembly used during mapping: .. code-block:: bash $ wget https://raw.githubusercontent.com/open2c/distiller-test-data/master/genome/sacCer3.reduced.chrom.sizes With `pairtools parse`, we can convert paired-end sequence alignments stored in .sam/.bam format into .pairs, a TAB-separated table of Hi-C ligation junctions: .. code-block:: bash $ pairtools parse -c sacCer3.reduced.chrom.sizes -o MATalpha_R1.pairs.gz --drop-sam MATalpha_R1.bam Inspect the resulting table: .. code-block:: bash $ less MATalpha_R1.pairs.gz pairtools-1.0.3/doc/sorting.rst000066400000000000000000000076131452673171500165350ustar00rootroot00000000000000Sorting pairs ============= In order to enable efficient random access to Hi-C pairs, we **flip** and **sort** pairs. After sorting, interactions become arranged in the order of their genomic position, such that, for any given pair of regions, we easily find and extract all of their interactions. And, after flipping, all artificially duplicated molecules (either during PCR or in optical sequencing) end up in adjacent rows in sorted lists of interactions, such that we can easily identify and remove them. Sorting ------- ``pairtools sort`` arrange pairs in the order of (chrom1, chrom2, pos1, pos2). This order is also known as *block sorting*, because all pairs between any given pair of chromosomes become grouped into one continuous block. Additionally, ``pairtools sort`` also sorts pairs with identical positions by `pair_type`. This does not really do much for mapped reads, but it nicely splits unmapped reads into blocks of null-mapped and multi-mapped reads. We note that there is an alternative to block sorting, called *row sorting*, where pairs are sorted by (chrom1, pos1, chrom2, pos2). In `pairtools sort`, we prefer block-sorting since it cleanly separates cis interactions from trans ones and thus is a more optimal solution for typical use cases. Flipping -------- In a typical paired-end experiment, *side1* and *side2* of a DNA molecule are defined by the order in which they got sequenced. Since this order is essentially random, any given Hi-C pair, e.g. (chr1, 1.1Mb; chr2, 2.1Mb), may appear in a reversed orientation, i.e. (chr2, 2.1Mb; chr1, 1.1Mb). If we were to preserve this order of sides, interactions between same loci would appear in two different locations of the sorted pair list, which would complicate finding PCR/optical duplicates. To ensure that Hi-C pairs with similar coordinates end up in the same location of the sorted list, we **flip** pairs, i.e. we choose *side1* as the side with the lowest genomic coordinate. Thus, after flipping, for *trans* pairs (chrom1!=chrom2), order(chrom1)`_), - number of contacts between all chromosome pairs - **Summary statistics** include: - fraction of duplicates - fraction of cis interactions (at different minimal distance cutoffs) out of total - estimation of library complexity Summary statistics can inform you about the quality of the data. For example, more trans interactions can be a sign of problems with the 3C+ procedure and lower signal-to-noise ratio. Substantial mapping to mitochondrial chromosome (chrM) might be a sign of random ligation. - **P(s), or scaling.** The dependence of contact frequency on the genomic distance referred to as the P(s) curve or scaling, which is a rich source of both biologically relevant information and technical quality of 3C+ experiments. The shape of P(s) is often used to characterize mechanisms of genome folding and reveal issues with QC. Interactive visualization of stats with MultiQC --------- Install `multiqc`: .. code-block:: bash pip install --upgrade --force-reinstall git+https://github.com/open2c/MultiQC.git Note that (for now) the pairtools module for MultiQC is only available in the open2C fork and not in the main MultiQC repository. Run MultiQC in a folder with one or multiple .stats files: .. code-block:: bash multiqc . This will produce a nice .html file with interactive graphical summaries of the stats. Estimating library complexity ---------------------------- Pairtools assumes that each sequencing read is randomly chosen with replacement from a finite pool of fragments in DNA library [1]_ [2]_. With each new sequenced molecule, the expected number of observed unique molecules increases according to a simple equation: $$ U(N+1) = U(N) + (1 - {U(N) \\over C}), $$ where $N$ is the number of sequenced molecules, $U(N)$ is the expected number of observed unique molecules after sequencing $N$ molecules, and C is the library complexity. This differential equation yields [1, 2]: $$ {U(N) \\over C} = 1 - exp( - {N \\over C}), $$ which can be solved as $$ C = \Re(lambert W( - { \exp( - {1 \\over u} ) \\over u} ) ) + {1 \\over u} $$ Library complexity can guide in the choice of sequencing depth of the library and provide an estimate of library quality. Illumina sequencing duplicates ----------------- Importantly, you can estimate the complexity of Hi-C libraries using only small QC samples to decide if their quality permits deeper sequencing [3]_. These estimates, however, can be significantly biased by the presence of “optical” or “clustering” duplicates. Such duplicates occur as artefacts of the sequencing procedure. Optical duplicates appear in data generated on sequencers with non-patterned flowcells in cases the instrument either erroneously splits a signal from a single sequenced molecule into two. On the other hand, clustering duplicates appear on patterned flowcells, when during cluster generation a cluster occupies adjacent nanowells. [4]_. The rate of optical and clustering duplication depends on the technology and the operating conditions (e.g. molarity of the library loaded onto the flowcell), but not on the library complexity or sequencing depth. Thus, in small sequencing samples in particular the clustering duplication on recent Illumina instruments can severely inflate the observed levels of duplication [5]_, resulting in underestimation of the library complexity. While the frequency of PCR duplicates increases with sequencing depth, optical or clustering duplication levels may stay constant for a particular sequencer, provided the library is loaded at the same molarity. This means that the high frequency of clustering duplicates on the NovaSeq leads to severe underestimation of library complexity in the pilot runs. In particular, the recent models of Illumina sequencers with patterned flowcells (such as NovaSeq) suffer from increased clustering duplication rate, which may far exceed the level of PCR duplication. Luckily, optical and clustering duplicates can be distinguished from the PCR ones, as the former are located next to each other on the sequencing flow cell. In case of Illumina sequencers, pairtools dedup can infer the positions of sequencing reads from their IDs and focuses on geometrically distant duplicates to produce unbiased estimates of PCR duplication and library complexity. Although SRA does not store original read IDs from the sequencer, this analysis is possible when pairtools is run on a dataset with original Illumina-generated read IDs. Note that in our experience even when accounting for optical/clustering duplicates, the complexity can be greatly underestimated, but is still a useful measurement to choose the most complex libraries. .. [1] Picard. http://broadinstitute.github.io/picard/ .. [2] Thread: [Samtools-help] Pickard estimate for the size of a library - wrong or non-transparent? https://sourceforge.net/p/samtools/mailman/samtools-help/thread/DUB405-EAS154589A1ACEF2BE4C573D4592180@phx.gbl/ .. [3] Rao, S. S. P. et al. A 3D map of the human genome at kilobase resolution reveals principles of chromatin looping. Cell 159, 1665–1680 (2014). .. [4] Duplicates on Illumina. BioStars. https://www.biostars.org/p/229842/ .. [5] Illumina Patterned Flow Cells Generate Duplicated Sequences. https://sequencing.qcfail.com/articles/illumina-patterned-flow-cells-generate-duplicated-sequences/pairtools-1.0.3/doc/technotes.rst000066400000000000000000000110761452673171500170420ustar00rootroot00000000000000Technical notes =============== Designing scientific software and formats requires making a multitude of tantalizing technical decisions and compromises. Often, the reasons behind a certain decision are non-trivial and convoluted, involving many factors. Here, we collect the notes and observations made during the desing stage of `pairtools` and provide a justification for most non-trivial decisions. We hope that this document will elucidate the design of `pairtools` and may prove useful to developers in their future projects. .pairs format ------------- The motivation behind some of the technical decisions in the pairtools' flavor of .pairs/.pairsam: - `pairtools` can store SAM entries together with the Hi-C pair information in .pairsam files. Storing pairs and alignments in the same row enables easy tagging and filtering of paired-end alignments based on their Hi-C information. - `pairtools` use the exclamation mark "!" instead of '.' as 'chrom' of unmapped reads because it has the lowest lexicographic sorting order among all characters. The use of '0' and '-' in the 'pos' and 'strand' fields of unmapped reads allows us to keep the types of these fields as 'unsigned int' and enum{'+','-'}, respectively. - "rescued" pairs have two types "UR" and "RU" instead of just "RU". We chose this design because rescued pairs are two-sided and thus are flipped based on (chrom, pos), and not based on the side types. With two pair types "RU" and "UR", `pairtools` can keep track of which side of the pair was rescued. - in "rescued" pairs, the type "R" is assigned to the non-chimeric side. This may seem counter-intuitive at first, since it is the chimeric side that gets rescued, but this way `pairtools` can keep track of the type of the 5' alignment on the chimeric side (the alignment on the non-chimeric side has to be unique for the pair to be rescued). - `pairtools` rely on a text format, .pairs, instead of hdf5/parquet-based tables or custom binaries. We went with a text format for a few reasons: - text tables enable easy access to data from any language and any tool. This is especially important at the level of Hi-C pairs, the "rawest" format of information from a Hi-C experiment. - hdf5 and parquet have a few shortcomings that hinder their immediate use in `pairtools`. Specifically, hdf5 cannot compress variable-length strings (which are, in turn, required to store sam alignments and some optional information on pairs) and parquet cannot append columns to existing files, modify datasets in place or store multiple tables in one file (which is required to keep table indices in the same file with pairs). - text tables have a set of well-developed and highly-optimized tools for sorting (Unix sort), compression (bgzip/lz4) and random access (tabix). - text formats enable easy streaming between individual command-line tools. Having said that, text formats have many downsides - they are bulky when not compressed, compression and parsing requires extra computational resources, they cannot be modified in place and random access requires extra tools. In the future, we plan to develop a binary format based on existing container formats, which would mitigate these downsides. CLI --- - many `pairtools` perform multiple actions at once, which contradicts the "do one thing" philosophy of Unix command line. We packed multiple (albeit, related) functions into one tool to improve the performance of `pairtools`. Specifically, given the large size of Hi-C data, a significant fraction of time is spent on compression/decompression, parsing, loading data into memory and sending it over network (for cloud/clusters). Packing multiple functions into one tool cuts down the amount of such time consuming operations. - ``pairtools parse`` requires a .chromsizes file to know the order of chromosomes and perform pair flipping. - `pairtools` use `bgzip `_ compression by default instead of gzip. Using `bgzip` allows us to create an index with `pairix `_ and get random access to data. - `paritools` have an option to compress outputs with `lz4 `_. `Lz4 is much faster and only slighly less efficient than gzip `_. This makes lz4 a better choice for passing data between individual pairtools before producing final result (which, in turn, requires bgzip compression). pairtools-1.0.3/pairtools/000077500000000000000000000000001452673171500155565ustar00rootroot00000000000000pairtools-1.0.3/pairtools/__init__.py000066400000000000000000000002601452673171500176650ustar00rootroot00000000000000""" pairtools ~~~~~~~~~ CLI tools to process mapped Hi-C data :copyright: (c) 2017-2023 Open2C :author: Open2C :license: MIT """ __version__ = "1.0.3" # from . import lib pairtools-1.0.3/pairtools/__main__.py000066400000000000000000000000731452673171500176500ustar00rootroot00000000000000from .cli import cli if __name__ == "__main__": cli() pairtools-1.0.3/pairtools/_logging.py000066400000000000000000000006221452673171500177150ustar00rootroot00000000000000import logging _loggers = {} def get_logger(name="pairtools"): # Based on ipython traitlets global _loggers if name not in _loggers: _loggers[name] = logging.getLogger(name) # Add a NullHandler to silence warnings about not being # initialized, per best practice for libraries. _loggers[name].addHandler(logging.NullHandler()) return _loggers[name] pairtools-1.0.3/pairtools/cli/000077500000000000000000000000001452673171500163255ustar00rootroot00000000000000pairtools-1.0.3/pairtools/cli/__init__.py000066400000000000000000000125201452673171500204360ustar00rootroot00000000000000# -*- coding: utf-8 -*- import click import functools import sys from .. import __version__ import logging from .._logging import get_logger CONTEXT_SETTINGS = { "help_option_names": ["-h", "--help"], } @click.version_option(version=__version__) @click.group(context_settings=CONTEXT_SETTINGS) @click.option( "--post-mortem", help="Post mortem debugging", is_flag=True, default=False ) @click.option( "--output-profile", help="Profile performance with Python cProfile and dump the statistics " "into a binary file", type=str, default="", ) @click.option("-v", "--verbose", help="Verbose logging.", count=True) @click.option( "-d", "--debug", help="On error, drop into the post-mortem debugger shell.", is_flag=True, default=False, ) def cli(post_mortem, output_profile, verbose, debug): """Flexible tools for Hi-C data processing. All pairtools have a few common options, which should be typed _before_ the command name. """ if post_mortem: import traceback try: import ipdb as pdb except ImportError: import pdb def _excepthook(exc_type, value, tb): traceback.print_exception(exc_type, value, tb) print() pdb.pm() sys.excepthook = _excepthook if output_profile: import cProfile import atexit pr = cProfile.Profile() pr.enable() def _atexit_profile_hook(): pr.disable() pr.dump_stats(output_profile) atexit.register(_atexit_profile_hook) # Initialize logging to stderr logging.basicConfig(stream=sys.stderr) logging.captureWarnings(True) root_logger = get_logger() # Set verbosity level if verbose > 0: root_logger.setLevel(logging.DEBUG) if verbose > 1: # pragma: no cover try: import psutil import atexit @atexit.register def process_dump_at_exit(): process_attrs = [ "cmdline", # 'connections', "cpu_affinity", "cpu_num", "cpu_percent", "cpu_times", "create_time", "cwd", # 'environ', "exe", # 'gids', "io_counters", "ionice", "memory_full_info", # 'memory_info', # 'memory_maps', "memory_percent", "name", "nice", "num_ctx_switches", "num_fds", "num_threads", "open_files", "pid", "ppid", "status", "terminal", "threads", # 'uids', "username", ] p = psutil.Process() info_ = p.as_dict(process_attrs, ad_value="") for key in process_attrs: root_logger.debug("PSINFO:'{}': {}".format(key, info_[key])) except ImportError: root_logger.warning("Install psutil to see process information.") else: root_logger.setLevel(logging.INFO) # Set hook for postmortem debugging if debug: # pragma: no cover import traceback try: import ipdb as pdb except ImportError: import pdb def _excepthook(exc_type, value, tb): traceback.print_exception(exc_type, value, tb) print() pdb.pm() sys.excepthook = _excepthook def common_io_options(func): @click.option( "--nproc-in", type=int, default=3, show_default=True, help="Number of processes used by the auto-guessed input decompressing command.", ) @click.option( "--nproc-out", type=int, default=8, show_default=True, help="Number of processes used by the auto-guessed output compressing command.", ) @click.option( "--cmd-in", type=str, default=None, help="A command to decompress the input file. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdin and pairtools parse. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -dc -n 3", ) @click.option( "--cmd-out", type=str, default=None, help="A command to compress the output file. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdout. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -c -n 8", ) @functools.wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper from . import ( dedup, sort, flip, merge, markasdup, select, split, restrict, phase, parse, parse2, stats, sample, filterbycov, header, scaling, ) pairtools-1.0.3/pairtools/cli/dedup.py000066400000000000000000000441011452673171500200000ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import ast import pathlib from .._logging import get_logger logger = get_logger() from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options import click from ..lib.dedup import streaming_dedup, streaming_dedup_cython from ..lib.stats import PairCounter UTIL_NAME = "pairtools_dedup" @cli.command() @click.argument("pairs_path", type=str, required=False) ### Output files: @click.option( "-o", "--output", type=str, default="", help="output file for pairs after duplicate removal." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @click.option( "--output-dups", type=str, default="", help="output file for duplicated pairs. " " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " If the path is the same as in --output or -, output duplicates together " " with deduped pairs. By default, duplicates are dropped.", ) @click.option( "--output-unmapped", type=str, default="", help="output file for unmapped pairs. " "If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed. " "If the path is the same as in --output or -, output unmapped pairs together " "with deduped pairs. If the path is the same as --output-dups, output " "unmapped reads together with dups. By default, unmapped pairs are dropped.", ) @click.option( "--output-stats", type=str, default="", help="output file for duplicate statistics." " If file exists, it will be open in the append mode." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, statistics are not printed.", ) @click.option( "--output-bytile-stats", type=str, default="", help="output file for duplicate statistics." " Note that the readID should be provided and contain tile information for this option. " " This analysis is possible when pairtools is run on a dataset with original Illumina-generated read IDs, " " because SRA does not store original read IDs from the sequencer. " " By default, by-tile duplicate statistics are not printed. " " If file exists, it will be open in the append mode. " " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed.", ) ### Set the dedup method: @click.option( "--max-mismatch", type=int, default=3, show_default=True, help="Pairs with both sides mapped within this distance (bp) from each " "other are considered duplicates. [dedup option]", ) @click.option( "--method", type=click.Choice(["max", "sum"]), default="max", help="define the mismatch as either the max or the sum of the mismatches of" "the genomic locations of the both sides of the two compared molecules. [dedup option]", show_default=True, ) @click.option( "--backend", type=click.Choice(["scipy", "sklearn", "cython"]), default="scipy", help="What backend to use: scipy and sklearn are based on KD-trees," " cython is online indexed list-based algorithm." " With cython backend, duplication is not transitive with non-zero max mismatch " " (e.g. pairs A and B are duplicates, and B and C are duplicates, then A and C are " " not necessary duplicates of each other), while with scipy and sklearn it's " " transitive (i.e. A and C are necessarily duplicates)." " Cython is the original version used in pairtools since its beginning." " It is available for backwards compatibility and to allow specification of the" " column order." " Now the default scipy backend is generally the fastest, and with chunksize below" " 1 mln has the lowest memory requirements. [dedup option]" # " 'cython' is deprecated and provided for backwards compatibility", ) ### Scipy and sklearn-specific options: @click.option( "--chunksize", type=int, default=10_000, show_default=True, help="Number of pairs in each chunk. Reduce for lower memory footprint." " Below 10,000 performance starts suffering significantly and the algorithm might" " miss a few duplicates with non-zero --max-mismatch." " Only works with '--backend scipy or sklearn'. [dedup option]", ) @click.option( "--carryover", type=int, default=100, show_default=True, help="Number of deduped pairs to carry over from previous chunk to the new chunk" " to avoid breaking duplicate clusters." " Only works with '--backend scipy or sklearn'. [dedup option]", ) @click.option( "-p", "--n-proc", type=int, default=1, help="Number of cores to use. Only applies with sklearn backend." "Still needs testing whether it is ever useful. [dedup option]", ) ### Output options: @click.option( "--mark-dups", is_flag=True, help='If specified, duplicate pairs are marked as DD in "pair_type" and ' "as a duplicate in the sam entries. [output format option]", ) @click.option( "--keep-parent-id", is_flag=True, help="If specified, duplicate pairs are marked with the readID of the retained" " deduped read in the 'parent_readID' field. [output format option]", ) @click.option( "--extra-col-pair", nargs=2, # type=click.Tuple([str, str]), multiple=True, help="Extra columns that also must match for two pairs to be marked as " "duplicates. Can be either provided as 0-based column indices or as column " 'names (requires the "#columns" header field). The option can be provided ' "multiple times if multiple column pairs must match. " 'Example: --extra-col-pair "phase1" "phase2". [output format option]', ) ### Input options: @click.option( "--sep", type=str, default=pairsam_format.PAIRSAM_SEP_ESCAPE, help=r"Separator (\t, \v, etc. characters are " "supported, pass them in quotes). [input format option]", ) @click.option( "--send-header-to", type=click.Choice(["dups", "dedup", "both", "none"]), default="both", help="Which of the outputs should receive header and comment lines. [input format option]", ) @click.option( "--c1", type=int, default=pairsam_format.COL_C1, help=f"Chrom 1 column; default {pairsam_format.COL_C1}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--c2", type=int, default=pairsam_format.COL_C2, help=f"Chrom 2 column; default {pairsam_format.COL_C2}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--p1", type=int, default=pairsam_format.COL_P1, help=f"Position 1 column; default {pairsam_format.COL_P1}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--p2", type=int, default=pairsam_format.COL_P2, help=f"Position 2 column; default {pairsam_format.COL_P2}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--s1", type=int, default=pairsam_format.COL_S1, help=f"Strand 1 column; default {pairsam_format.COL_S1}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--s2", type=int, default=pairsam_format.COL_S2, help=f"Strand 2 column; default {pairsam_format.COL_S2}" " Only works with '--backend cython'. [input format option]", ) @click.option( "--unmapped-chrom", type=str, default=pairsam_format.UNMAPPED_CHROM, help="Placeholder for a chromosome on an unmapped side; default {}".format( pairsam_format.UNMAPPED_CHROM ), ) # Output stats option @click.option( "--yaml/--no-yaml", is_flag=True, default=False, help="Output stats in yaml format instead of table. [output stats format option]", ) # Filtering options for reporting stats: @click.option( "--filter", default=None, required=False, multiple=True, help="Filter stats with condition to apply to the data (similar to `pairtools select` or `pairtools stats`). " "For non-YAML output only the first filter will be reported. [output stats filtering option] " "Note that this will not change the deduplicated output pairs. " """Example: pairtools dedup --yaml --filter 'unique:(pair_type=="UU")' --filter 'close:(pair_type=="UU") and (abs(pos1-pos2)<10)' --output-stats - test.pairs """, ) @click.option( "--engine", default="pandas", required=False, help="Engine for regular expression parsing for stats filtering. " "Python will provide you regex functionality, while pandas does not accept " "custom funtctions and works faster. [output stats filtering option]", ) @click.option( "--chrom-subset", type=str, default=None, required=False, help="A path to a chromosomes file (tab-separated, 1st column contains " "chromosome names) containing a chromosome subset of interest for stats filter. " "If provided, additionally filter pairs with both sides originating from " "the provided subset of chromosomes. This operation modifies the #chromosomes: " "and #chromsize: header fields accordingly. " "Note that this will not change the deduplicated output pairs. [output stats filtering option]", ) @click.option( "--startup-code", type=str, default=None, required=False, help="An auxiliary code to execute before filteringfor stats. " "Use to define functions that can be evaluated in the CONDITION statement. [output stats filtering option]", ) @click.option( "-t", "--type-cast", type=(str, str), default=(), multiple=True, help="Cast a given column to a given type for stats filtering. By default, only pos and mapq " "are cast to int, other columns are kept as str. Provide as " "-t , e.g. -t read_len1 int. Multiple entries are allowed. [output stats filtering option]", ) @common_io_options def dedup( pairs_path, output, output_dups, output_unmapped, output_stats, output_bytile_stats, chunksize, carryover, max_mismatch, method, sep, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_dups, extra_col_pair, keep_parent_id, backend, n_proc, **kwargs, ): """Find and remove PCR/optical duplicates. Find PCR/optical duplicates in an upper-triangular flipped sorted pairs/pairsam file. Allow for a +/-N bp mismatch at each side of duplicated molecules. PAIRS_PATH : input triu-flipped sorted .pairs or .pairsam file. If the path ends with .gz/.lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ dedup_py( pairs_path, output, output_dups, output_unmapped, output_stats, output_bytile_stats, chunksize, carryover, max_mismatch, method, sep, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_dups, extra_col_pair, keep_parent_id, backend, n_proc, **kwargs, ) if __name__ == "__main__": dedup() def dedup_py( pairs_path, output, output_dups, output_unmapped, output_stats, output_bytile_stats, chunksize, carryover, max_mismatch, method, sep, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_dups, extra_col_pair, keep_parent_id, backend, n_proc, **kwargs, ): sep = ast.literal_eval('"""' + sep + '"""') send_header_to_dedup = send_header_to in ["both", "dedup"] send_header_to_dup = send_header_to in ["both", "dups"] instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) out_stats_stream = fileio.auto_open( output_stats, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) bytile_dups = False if output_bytile_stats: out_bytile_stats_stream = fileio.auto_open( output_bytile_stats, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) bytile_dups = True if not keep_parent_id: logger.warning( "Force output --parent-readID because --output-bytile-stats provided." ) keep_parent_id = True # generate empty PairCounter if stats output is requested: if output_stats: filter = kwargs.get("filter", None) # Define filters and their properties first_filter_name = "no_filter" # default filter name for full output if filter is not None and len(filter) > 0: first_filter_name = filter[0].split(":", 1)[0] if len(filter) > 1 and not kwargs.get("yaml", False): logger.warn( f"Output the first filter only in non-YAML output: {first_filter_name}" ) filter = dict([f.split(":", 1) for f in filter]) else: filter = None out_stat = PairCounter( bytile_dups=bytile_dups, filters=filter, startup_code=kwargs.get("startup_code", ""), # for evaluation of filters type_cast=kwargs.get("type_cast", ()), # for evaluation of filters engine=kwargs.get("engine", "pandas"), ) else: out_stat = None if not output_dups: outstream_dups = None elif output_dups == "-" or ( pathlib.Path(output_dups).absolute() == pathlib.Path(output).absolute() ): outstream_dups = outstream else: outstream_dups = fileio.auto_open( output_dups, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if not output_unmapped: outstream_unmapped = None elif output_unmapped == "-" or ( pathlib.Path(output_unmapped).absolute() == pathlib.Path(output).absolute() ): outstream_unmapped = outstream elif ( pathlib.Path(output_unmapped).absolute() == pathlib.Path(output_dups).absolute() ): outstream_unmapped = outstream_dups else: outstream_unmapped = fileio.auto_open( output_unmapped, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) if not any([l.startswith("#sorted") for l in header]): logger.warning( "Pairs file appears not to be sorted, dedup might produce wrong results." ) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) if send_header_to_dedup: outstream.writelines((l + "\n" for l in header)) if send_header_to_dup and outstream_dups and (outstream_dups != outstream): dups_header = header if keep_parent_id and len(dups_header) > 0: dups_header = headerops.append_columns(dups_header, ["parent_readID"]) outstream_dups.writelines((l + "\n" for l in dups_header)) if ( outstream_unmapped and (outstream_unmapped != outstream) and (outstream_unmapped != outstream_dups) ): outstream_unmapped.writelines((l + "\n" for l in header)) column_names = headerops.extract_column_names(header) extra_cols1 = [] extra_cols2 = [] if extra_col_pair is not None: for col1, col2 in extra_col_pair: extra_cols1.append(column_names[col1] if col1.isdigit() else col1) extra_cols2.append(column_names[col2] if col2.isdigit() else col2) if backend == "cython": # warnings.warn( # "'cython' backend is deprecated and provided only" # " for backwards compatibility", # DeprecationWarning, # ) extra_cols1 = [column_names.index(col) for col in extra_cols1] extra_cols2 = [column_names.index(col) for col in extra_cols2] streaming_dedup_cython( method, max_mismatch, sep, c1, c2, p1, p2, s1, s2, extra_cols1, extra_cols2, unmapped_chrom, body_stream, outstream, outstream_dups, outstream_unmapped, out_stat, mark_dups, keep_parent_id, ) elif backend in ("scipy", "sklearn"): streaming_dedup( in_stream=body_stream, colnames=column_names, chunksize=chunksize, carryover=carryover, method=method, mark_dups=mark_dups, max_mismatch=max_mismatch, extra_col_pairs=list(extra_col_pair), keep_parent_id=keep_parent_id, unmapped_chrom=unmapped_chrom, outstream=outstream, outstream_dups=outstream_dups, outstream_unmapped=outstream_unmapped, out_stat=out_stat, backend=backend, n_proc=n_proc, ) else: raise ValueError("Unknown backend") # save statistics to a file if it was requested: if out_stat: out_stat.save( out_stats_stream, yaml=kwargs.get("yaml", False), # format as yaml filter=first_filter_name if not kwargs.get("yaml", False) else None, # output only the first filter if non-YAML output ) if bytile_dups: out_stat.save_bytile_dups(out_bytile_stats_stream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if outstream_dups and (outstream_dups != outstream): outstream_dups.close() if ( outstream_unmapped and (outstream_unmapped != outstream) and (outstream_unmapped != outstream_dups) ): outstream_unmapped.close() if out_stats_stream: out_stats_stream.close() pairtools-1.0.3/pairtools/cli/filterbycov.py000066400000000000000000000231021452673171500212250ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import ast import warnings import pathlib import click from ..lib import fileio, pairsam_format, headerops, dedup from . import cli, common_io_options from ..lib.filterbycov import streaming_filterbycov from ..lib.stats import PairCounter UTIL_NAME = "pairtools_filterbycov" ###################################### ## TODO: - output stats after filtering ## edit/update mark as dup to mark as multi ################################### @cli.command() @click.argument("pairs_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output file for pairs from low coverage regions." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @click.option( "--output-highcov", type=str, default="", help="output file for pairs from high coverage regions." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " If the path is the same as in --output or -, output duplicates together " " with deduped pairs. By default, duplicates are dropped.", ) @click.option( "--output-unmapped", type=str, default="", help="output file for unmapped pairs. " "If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed. " "If the path is the same as in --output or -, output unmapped pairs together " "with deduped pairs. If the path is the same as --output-highcov, " "output unmapped reads together. By default, unmapped pairs are dropped.", ) @click.option( "--output-stats", type=str, default="", help="output file for statistics of multiple interactors. " " If file exists, it will be open in the append mode." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, statistics are not printed.", ) @click.option( "--max-cov", type=int, default=8, help="The maximum allowed coverage per region." ) @click.option( "--max-dist", type=int, default=500, help="The resolution for calculating coverage. For each pair, the local " "coverage around each end is calculated as (1 + the number of neighbouring " "pairs within +/- max_dist bp) ", ) @click.option( "--method", type=click.Choice(["max", "sum"]), default="max", help="calculate the number of neighbouring pairs as either the sum or the max" " of the number of neighbours on the two sides", show_default=True, ) @click.option( "--sep", type=str, default=pairsam_format.PAIRSAM_SEP_ESCAPE, help=r"Separator (\t, \v, etc. characters are " "supported, pass them in quotes) ", ) @click.option( "--comment-char", type=str, default="#", help="The first character of comment lines" ) @click.option( "--send-header-to", type=click.Choice(["lowcov", "highcov", "both", "none"]), default="both", help="Which of the outputs should receive header and comment lines", ) @click.option( "--c1", type=int, default=pairsam_format.COL_C1, help="Chrom 1 column; default {}".format(pairsam_format.COL_C1), ) @click.option( "--c2", type=int, default=pairsam_format.COL_C2, help="Chrom 2 column; default {}".format(pairsam_format.COL_C2), ) @click.option( "--p1", type=int, default=pairsam_format.COL_P1, help="Position 1 column; default {}".format(pairsam_format.COL_P1), ) @click.option( "--p2", type=int, default=pairsam_format.COL_P2, help="Position 2 column; default {}".format(pairsam_format.COL_P2), ) @click.option( "--s1", type=int, default=pairsam_format.COL_S1, help="Strand 1 column; default {}".format(pairsam_format.COL_S1), ) @click.option( "--s2", type=int, default=pairsam_format.COL_S2, help="Strand 2 column; default {}".format(pairsam_format.COL_S2), ) @click.option( "--unmapped-chrom", type=str, default=pairsam_format.UNMAPPED_CHROM, help="Placeholder for a chromosome on an unmapped side; default {}".format( pairsam_format.UNMAPPED_CHROM ), ) @click.option( "--mark-multi", is_flag=True, help='If specified, duplicate pairs are marked as FF in "pair_type" and ' "as a duplicate in the sam entries.", ) @common_io_options def filterbycov( pairs_path, output, output_highcov, output_unmapped, output_stats, max_dist, max_cov, method, sep, comment_char, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_multi, **kwargs ): """Remove pairs from regions of high coverage. Find and remove pairs with >(MAX_COV-1) neighbouring pairs within a +/- MAX_DIST bp window around either side. Useful for single-cell Hi-C experiments, where coverage is naturally limited by the chromosome copy number. PAIRS_PATH : input triu-flipped sorted .pairs or .pairsam file. If the path ends with .gz/.lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ filterbycov_py( pairs_path, output, output_highcov, output_unmapped, output_stats, max_dist, max_cov, method, sep, comment_char, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_multi, **kwargs ) def filterbycov_py( pairs_path, output, output_highcov, output_unmapped, output_stats, max_dist, max_cov, method, sep, comment_char, send_header_to, c1, c2, p1, p2, s1, s2, unmapped_chrom, mark_multi, **kwargs ): ## Prepare input, output streams based on selected outputs ## Default ouput stream is low-frequency interactors sep = ast.literal_eval('"""' + sep + '"""') send_header_to_lowcov = send_header_to in ["both", "lowcov"] send_header_to_highcov = send_header_to in ["both", "highcov"] instream = ( fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) if pairs_path else sys.stdin ) outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) out_stats_stream = ( fileio.auto_open( output_stats, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output_stats else None ) # generate empty PairCounter if stats output is requested: out_stat = PairCounter() if output_stats else None # output the high-frequency interacting pairs if not output_highcov: outstream_high = None elif output_highcov == "-" or ( pathlib.Path(output_highcov).absolute() == pathlib.Path(output).absolute() ): outstream_high = outstream else: outstream_high = fileio.auto_open( output_highcov, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # output unmapped pairs if not output_unmapped: outstream_unmapped = None elif output_unmapped == "-" or ( pathlib.Path(output_unmapped).absolute() == pathlib.Path(output).absolute() ): outstream_unmapped = outstream elif ( pathlib.Path(output_unmapped).absolute() == pathlib.Path(output_highcov).absolute() ): outstream_unmapped = outstream_high else: outstream_unmapped = fileio.auto_open( output_unmapped, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # prepare file headers header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) # header for low-frequency interactors if send_header_to_lowcov: outstream.writelines((l + "\n" for l in header)) # header for high-frequency interactors if send_header_to_highcov and outstream_high and (outstream_high != outstream): outstream_high.writelines((l + "\n" for l in header)) # header for unmapped pairs if ( outstream_unmapped and (outstream_unmapped != outstream) and (outstream_unmapped != outstream_high) ): outstream_unmapped.writelines((l + "\n" for l in header)) # perform filtering of pairs based on low/high-frequency of interaction streaming_filterbycov( method, max_dist, max_cov, sep, c1, c2, p1, p2, s1, s2, unmapped_chrom, body_stream, outstream, outstream_high, outstream_unmapped, out_stat, mark_multi, ) ## FINISHED! # save statistics to a file if it was requested: TO BE TESTED if out_stat: out_stat.save(out_stats_stream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if outstream_high and (outstream_high != outstream): outstream_high.close() if ( outstream_unmapped and (outstream_unmapped != outstream) and (outstream_unmapped != outstream_high) ): outstream_unmapped.close() if out_stats_stream: out_stats_stream.close() if __name__ == "__main__": filterbycov() pairtools-1.0.3/pairtools/cli/flip.py000066400000000000000000000110601452673171500176270ustar00rootroot00000000000000import sys import click from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options import warnings UTIL_NAME = "pairtools_flip" @cli.command() @click.argument("pairs_path", type=str, required=False) @click.option( "-c", "--chroms-path", type=str, required=True, help="Chromosome order used to flip interchromosomal mates: " "path to a chromosomes file (e.g. UCSC chrom.sizes or similar) whose " "first column lists scaffold names. Any scaffolds not listed will be " "ordered lexicographically following the names provided.", ) @click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @common_io_options def flip(pairs_path, chroms_path, output, **kwargs): """Flip pairs to get an upper-triangular matrix. Change the order of side1 and side2 in pairs, such that (order(chrom1) < order(chrom2) or (order(chrom1) == order(chrom2)) and (pos1 <=pos2)) Equivalent to reflecting the lower triangle of a Hi-C matrix onto its upper triangle, resulting in an upper triangular matrix. The order of chromosomes must be provided via a .chromsizes file. PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ flip_py(pairs_path, chroms_path, output, **kwargs) def flip_py(pairs_path, chroms_path, output, **kwargs): instream = ( fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) if pairs_path else sys.stdin ) outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) chromosomes = headerops.get_chrom_order(chroms_path) chrom_enum = dict( zip( [pairsam_format.UNMAPPED_CHROM] + list(chromosomes), range(len(chromosomes) + 1), ) ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) column_names = headerops.extract_column_names(header) if len(column_names) == 0: column_names = pairsam_format.COLUMNS chrom1_col = column_names.index("chrom1") chrom2_col = column_names.index("chrom2") pos1_col = column_names.index("pos1") pos2_col = column_names.index("pos2") pair_type_col = ( column_names.index("pair_type") if "pair_type" in column_names else -1 ) col_pairs_to_flip = [ (column_names.index(col), column_names.index(col[:-1] + "2")) for col in column_names if col.endswith("1") and (col[:-1] + "2") in column_names ] for line in body_stream: cols = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) is_annotated1 = cols[chrom1_col] in chrom_enum.keys() is_annotated2 = cols[chrom2_col] in chrom_enum.keys() if not is_annotated1 or not is_annotated2: warnings.warn(f"Unannotated chromosomes in the pairs file!") # Flip so that annotated chromosome stands first: if is_annotated1 and not is_annotated2: has_correct_order = True elif is_annotated2 and not is_annotated1: has_correct_order = False elif not is_annotated1 and not is_annotated2: has_correct_order = cols[chrom1_col] < cols[chrom2_col] else: # both are annotated: has_correct_order = (chrom_enum[cols[chrom1_col]], int(cols[pos1_col])) <= ( chrom_enum[cols[chrom2_col]], int(cols[pos2_col]), ) # flipping: if not has_correct_order: for col1, col2 in col_pairs_to_flip: if (col1 < len(cols)) and (col2 < len(cols)): cols[col1], cols[col2] = cols[col2], cols[col1] if pair_type_col != -1 and pair_type_col < len(cols): cols[pair_type_col] = cols[pair_type_col][1] + cols[pair_type_col][0] outstream.write(pairsam_format.PAIRSAM_SEP.join(cols)) outstream.write("\n") if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": flip() pairtools-1.0.3/pairtools/cli/header.py000066400000000000000000000437421452673171500201410ustar00rootroot00000000000000import sys import click import warnings import subprocess from ..lib import fileio, pairsam_format, headerops from ..lib.parse_pysam import AlignmentFilePairtoolized from . import cli, common_io_options UTIL_NAME = "pairtools_header" @cli.group() def header(): """ Manipulate the .pairs/.pairsam header """ pass # Common options for all header tools: def register_subcommand(func): return header.command()( click.argument("pairs_path", type=str, required=False)( click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", )( click.option( "--nproc-in", type=int, default=1, show_default=True, help="Number of processes used by the auto-guessed input decompressing command.", )( click.option( "--nproc-out", type=int, default=8, show_default=True, help="Number of processes used by the auto-guessed output compressing command.", )( click.option( "--cmd-in", type=str, default=None, help="A command to decompress the input. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdin. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -dc -n 3", )( click.option( "--cmd-out", type=str, default=None, help="A command to compress the output. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdout. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -c -n 8", )(func) ) ) ) ) ) ) def add_arg_help(func): func.__doc__ = func.__doc__.format( """ PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ ) return func @register_subcommand @add_arg_help @click.option( "--chroms-path", type=str, default=None, required=False, help="Chromosome order used to flip interchromosomal mates: " "path to a chromosomes file (e.g. UCSC chrom.sizes or similar) whose " "first column lists scaffold names. Any scaffolds not listed will be " "ordered lexicographically following the names provided.", ) @click.option( "--sam-path", type=str, default=None, required=False, help="Input sam file to inherit the header." " Either --sam or --chroms-path should be provided to store the chromosome sizes in the header.", ) @click.option( "--columns", type=click.STRING, default="", help="Report columns describing alignments " "Can take multiple values as a comma-separated list." f"By default, assign standard .pairs columns: {','.join(pairsam_format.COLUMNS)}", ) @click.option( "--extra-columns", type=click.STRING, default="", help="Report extra columns describing alignments " "Can take multiple values as a comma-separated list.", ) @click.option( "--assembly", type=str, default="", help="Name of genome assembly (e.g. hg19, mm10) to store in the pairs header.", ) @click.option( "--no-flip", is_flag=True, help="If specified, assume that the pairs are not filpped in genomic order and instead preserve " "the order in which they were sequenced.", ) @click.option( "--pairs/--pairsam", is_flag=True, default=True, help=f"If pairs, then the defult columns will be set to: {','.join(pairsam_format.COLUMNS_PAIRS)}" f"\nif pairsam, then to: {','.join(pairsam_format.COLUMNS_PAIRSAM)}", ) def generate(pairs_path, output, chroms_path, sam_path, columns, assembly, **kwargs): """ Generate the header """ generate_py(pairs_path, output, chroms_path, sam_path, columns, assembly, **kwargs) def generate_py(pairs_path, output, chroms_path, sam_path, columns, assembly, **kwargs): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) header, body_stream = headerops.get_header(instream, ignore_warning=True) # Parse chromosome sizes present in the input chromosomes: if chroms_path and not sam_path: chromsizes = headerops.get_chromsizes_from_file(chroms_path) # chromosomes = headerops.get_chromsizes_from_file(chroms_path) # Parse chromosome sizes present in sam input: if sam_path: # open input sam file with pysam input_sam = AlignmentFilePairtoolized( sam_path, "r", threads=kwargs.get("nproc_in") ) samheader = input_sam.header chromsizes = headerops.get_chromsizes_from_pysam_header(samheader) # if chroms_path: # chromosomes = headerops.get_chrom_order(chroms_path, list(chromsizes.keys())) # else: # chromosomes = chromsizes.keys() # Read the input columns: if columns: columns = columns.split(",") else: if kwargs.get("pairs", True): columns = pairsam_format.COLUMNS_PAIRS else: columns = pairsam_format.COLUMNS_PAIRSAM extra_columns = kwargs.get("extra_columns", "") if extra_columns: columns += extra_columns.split(",") # Write new header to the pairsam file new_header = headerops.make_standard_pairsheader( assembly=assembly, chromsizes=chromsizes, columns=columns, shape="whole matrix" if kwargs["no_flip"] else "upper triangle", ) if sam_path: new_header = headerops.insert_samheader_pysam(new_header, samheader) new_header = headerops.append_new_pg(new_header, ID=UTIL_NAME, PN=UTIL_NAME) # Check that the number of columns in the body corresponds to the header: if not headerops.validate_cols(instream, columns): raise ValueError( f"Number of columns mismatch:\n\t#columns: {headerops.SEP_COLS.join(columns)}\n\t{body_stream.readline()}" ) ######## # Write the output after successful checks: outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) outstream.writelines((l + "\n" for l in new_header)) outstream.flush() if body_stream == sys.stdin: for line in body_stream: outstream.write(line) else: command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; cat """ if kwargs.get("cmd_in", None): command += r""" <(cat {} | {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path, kwargs["cmd_in"] ) elif pairs_path.endswith(".gz"): command += ( r""" <(bgzip -dc -@ {} {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( kwargs["nproc_in"], pairs_path ) ) elif pairs_path.endswith(".lz4"): command += r""" <(lz4c -dc {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path ) else: command += r""" <(sed -n -e '\''/^[^#]/,$p'\'' {})""".format(pairs_path) command += "'" subprocess.check_call(command, shell=True, stdout=outstream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() @register_subcommand @add_arg_help @click.option( "--reference-file", "-r", help="Header file for transfer", type=str, required=True ) def transfer(pairs_path, output, reference_file, **kwargs): """ Transfer the header from one pairs file to another """ transfer_py(pairs_path, output, reference_file, **kwargs) def transfer_py(pairs_path, output, reference_file, **kwargs): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) header, body_stream = headerops.get_header(instream, ignore_warning=True) # Read the header from reference file instream_header = fileio.auto_open( reference_file, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) reference_header, _ = headerops.get_header(instream_header) # Close the reference stream after extraction of the header: if instream_header != sys.stdin: instream_header.close() reference_columns = headerops.extract_column_names(reference_header) # Check that the number of columns in the body corresponds to the header: if not headerops.validate_cols(instream, reference_columns): raise ValueError( f"Number of columns mismatch:\n\t#columns: {headerops.SEP_COLS.join(reference_columns)}\n\t{body_stream.readline()}" ) ######## # Write the output after successful checks: outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) reference_header = headerops.append_new_pg( reference_header, ID=UTIL_NAME, PN=UTIL_NAME ) outstream.writelines((l + "\n" for l in reference_header)) outstream.flush() if body_stream == sys.stdin: for line in body_stream: outstream.write(line) else: command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; cat """ if kwargs.get("cmd_in", None): command += r""" <(cat {} | {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path, kwargs["cmd_in"] ) elif pairs_path.endswith(".gz"): command += ( r""" <(bgzip -dc -@ {} {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( kwargs["nproc_in"], pairs_path ) ) elif pairs_path.endswith(".lz4"): command += r""" <(lz4c -dc {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path ) else: command += r""" <(sed -n -e '\''/^[^#]/,$p'\'' {})""".format(pairs_path) command += "'" subprocess.check_call(command, shell=True, stdout=outstream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() @register_subcommand @add_arg_help @click.option( "--columns", "-c", help=f"Comma-separated list of columns to be added, e.g.: {','.join(pairsam_format.COLUMNS)}", type=str, required=True, ) def set_columns(pairs_path, output, columns, **kwargs): """ Add the columns to the .pairs/pairsam file """ set_columns_py(pairs_path, output, columns, **kwargs) def set_columns_py(pairs_path, output, columns, **kwargs): instream = ( fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) if pairs_path else sys.stdin ) outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) header, body_stream = headerops.get_header(instream) header = headerops.set_columns(header, columns.split(",")) outstream.writelines((l + "\n" for l in header)) outstream.flush() if body_stream == sys.stdin: for line in body_stream: outstream.write(line) else: command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; cat """ if kwargs.get("cmd_in", None): command += r""" <(cat {} | {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path, kwargs["cmd_in"] ) elif pairs_path.endswith(".gz"): command += ( r""" <(bgzip -dc -@ {} {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( kwargs["nproc_in"], pairs_path ) ) elif pairs_path.endswith(".lz4"): command += r""" <(lz4c -dc {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path ) else: command += r""" <(sed -n -e '\''/^[^#]/,$p'\'' {})""".format(pairs_path) command += "'" subprocess.check_call(command, shell=True, stdout=outstream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() @register_subcommand @add_arg_help @click.option( "--reference-file", "-r", help="Header file for comparison (optional)", type=str, required=False, default="", ) @click.option( "--reference-columns", "-c", help=f"Comma-separated list of columns fro check (optional), e.g.: {','.join(pairsam_format.COLUMNS)}", type=str, required=False, default="", ) def validate_columns(pairs_path, output, reference_file, reference_columns, **kwargs): """ Validate the columns of the .pairs/pairsam file against reference or within file. If the checks pass, then returns full pairs file. Otherwise throws an exception. If reference_file is provided, check: 1) columns are the same between pairs and reference_file 2) number of columns in the pairs body is the same as the number of columns If reference_columns are provided, check: 1) pairs columns are the same as provided 2) number of columns in the pairs body is the same as the number of columns If no reference_file or columns, then check only the number of columns in the pairs body. Checks only the first line in the pairs stream! """ validate_columns_py(pairs_path, output, reference_file, reference_columns, **kwargs) def validate_columns_py( pairs_path, output, reference_file, reference_columns, **kwargs ): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) header, body_stream = headerops.get_header(instream) pairs_columns = headerops.extract_column_names(header) # Convert reference columns string into list, if provided if reference_columns: reference_columns = reference_columns.split(",") # Read the header from reference file if reference_file: instream_header = fileio.auto_open( reference_file, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) reference_header, _ = headerops.get_header(instream_header) # Close the reference stream after extraction of the header: if instream_header != sys.stdin: instream_header.close() if reference_columns: warnings.warn( "--reference-columns are ignored, as --reference-file is provided" ) reference_columns = headerops.extract_column_names(reference_header) if reference_columns: if pairs_columns != reference_columns: raise ValueError( f"Pairs columns differ from reference columns:\n\t{pairs_columns}\n\t{reference_columns}" ) # Check that the number of columns in the body corresponds to the header: if not headerops.validate_cols(instream, pairs_columns): raise ValueError( f"Number of columns mismatch:\n\t#columns: {headerops.SEP_COLS.join(pairs_columns)}\n\t{body_stream.readline()}" ) ######## # Write the output after successful checks: outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) outstream.flush() if body_stream == sys.stdin: for line in body_stream: outstream.write(line) else: command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; cat """ if kwargs.get("cmd_in", None): command += r""" <(cat {} | {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path, kwargs["cmd_in"] ) elif pairs_path.endswith(".gz"): command += ( r""" <(bgzip -dc -@ {} {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( kwargs["nproc_in"], pairs_path ) ) elif pairs_path.endswith(".lz4"): command += r""" <(lz4c -dc {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( pairs_path ) else: command += r""" <(sed -n -e '\''/^[^#]/,$p'\'' {})""".format(pairs_path) command += "'" subprocess.check_call(command, shell=True, stdout=outstream) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": header() pairtools-1.0.3/pairtools/cli/markasdup.py000066400000000000000000000037041452673171500206720ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import click from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.dedup import mark_split_pair_as_dup UTIL_NAME = "pairtools_markasdup" @cli.command() @click.argument("pairsam_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output .pairsam file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @common_io_options def markasdup(pairsam_path, output, **kwargs): """Tag all pairs in the input file as duplicates. Change the type of all pairs inside a .pairs/.pairsam file to DD. If sam entries are present, change the pair type in the Yt SAM tag to 'Yt:Z:DD'. PAIRSAM_PATH : input .pairs/.pairsam file. If the path ends with .gz, the input is gzip-decompressed. By default, the input is read from stdin. """ markasdup_py(pairsam_path, output, **kwargs) def markasdup_py(pairsam_path, output, **kwargs): instream = fileio.auto_open( pairsam_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) for line in body_stream: cols = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) mark_split_pair_as_dup(cols) outstream.write(pairsam_format.PAIRSAM_SEP.join(cols)) outstream.write("\n") if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": markasdup() pairtools-1.0.3/pairtools/cli/merge.py000066400000000000000000000166431452673171500200100ustar00rootroot00000000000000#!/usr/bin/env python import sys import glob import math import subprocess import click from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options UTIL_NAME = "pairtools_merge" @cli.command() @click.argument( "pairs_path", nargs=-1, type=str, ) @click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz/.lz4, the output is compressed by bgzip/lz4c." " By default, the output is printed into stdout.", ) @click.option( "--max-nmerge", type=int, default=8, show_default=True, help="The maximal number of inputs merged at once. For more, store " "merged intermediates in temporary files.", ) @click.option( "--tmpdir", type=str, default="", help="Custom temporary folder for merged intermediates.", ) @click.option( "--memory", type=str, default="2G", show_default=True, help="The amount of memory used by default.", ) @click.option( "--compress-program", type=str, default="", show_default=True, help="A binary to compress temporary merged chunks. " "Must decompress input when the flag -d is provided. " "Suggested alternatives: lz4c, gzip, lzop, snzip. " "NOTE: fails silently if the command syntax is wrong. ", ) @click.option( "--nproc", type=int, default=8, help="Number of threads for merging.", show_default=True, ) @click.option( "--nproc-in", type=int, default=1, show_default=True, help="Number of processes used by the auto-guessed input decompressing command.", ) @click.option( "--nproc-out", type=int, default=8, show_default=True, help="Number of processes used by the auto-guessed output compressing command.", ) @click.option( "--cmd-in", type=str, default=None, help="A command to decompress the input. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdin. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -dc -n 3", ) @click.option( "--cmd-out", type=str, default=None, help="A command to compress the output. " "If provided, fully overrides the auto-guessed command. " "Does not work with stdout. " "Must read input from stdin and print output into stdout. " "EXAMPLE: pbgzip -c -n 8", ) @click.option( "--keep-first-header/--no-keep-first-header", default=False, show_default=True, help="Keep the first header or merge the headers together. Default: merge headers.", ) @click.option( "--concatenate/--no-concatenate", default=False, show_default=True, help="Simple concatenate instead of merging sorted files.", ) # Using custom IO options def merge( pairs_path, output, max_nmerge, tmpdir, memory, compress_program, nproc, **kwargs ): """Merge .pairs/.pairsam files. By default, assumes that the files are sorted and maintains the sorting. Merge triu-flipped sorted pairs/pairsam files. If present, the @SQ records of the SAM header must be identical; the sorting order of these lines is taken from the first file in the list. The ID fields of the @PG records of the SAM header are modified with a numeric suffix to produce unique records. The other unique SAM and non-SAM header lines are copied into the output header. PAIRS_PATH : upper-triangular flipped sorted .pairs/.pairsam files to merge or a group/groups of .pairs/.pairsam files specified by a wildcard. For paths ending in .gz/.lz4, the files are decompressed by bgzip/lz4c. """ merge_py( pairs_path, output, max_nmerge, tmpdir, memory, compress_program, nproc, **kwargs, ) def merge_py( pairs_path, output, max_nmerge, tmpdir, memory, compress_program, nproc, **kwargs ): paths = sum([glob.glob(mask) for mask in pairs_path], []) if len(paths) == 0: raise ValueError(f"No input paths: {pairs_path}") outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # if there is only one input, bypass merging and do not modify the header if len(paths) == 1: instream = fileio.auto_open( paths[0], mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) for line in instream: outstream.write(line) if outstream != sys.stdout: outstream.close() return headers = [] for path in paths: f = fileio.auto_open( path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) h, _ = headerops.get_header(f) headers.append(h) f.close() # Skip other headers if keep_first_header is True (False by default): if kwargs.get("keep_first_header", False): break if not headerops.all_same_columns(headers): raise ValueError("Input pairs cannot contain different columns") merged_header = headerops.merge_headers(headers) merged_header = headerops.append_new_pg(merged_header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in merged_header)) outstream.flush() # If concatenation requested instead of merging sorted input: if kwargs.get("concatenate", False): command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; cat """ # Full merge that keeps the ordered input: else: command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; sort -k {0},{0} -k {1},{1} -k {2},{2}n -k {3},{3}n -k {4},{4} --merge --field-separator=$'\''{5}'\'' {6} {7} {8} -S {9} {10} """.replace( "\n", " " ).format( pairsam_format.COL_C1 + 1, pairsam_format.COL_C2 + 1, pairsam_format.COL_P1 + 1, pairsam_format.COL_P2 + 1, pairsam_format.COL_PTYPE + 1, pairsam_format.PAIRSAM_SEP_ESCAPE, " --parallel={} ".format(nproc) if nproc > 1 else " ", " --batch-size={} ".format(max_nmerge) if max_nmerge else " ", " --temporary-directory={} ".format(tmpdir) if tmpdir else " ", memory, ( " --compress-program={} ".format(compress_program) if compress_program else " " ), ) for path in paths: if kwargs.get("cmd_in", None): command += r""" <(cat {} | {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( path, kwargs["cmd_in"] ) elif path.endswith(".gz"): command += ( r""" <(bgzip -dc -@ {} {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( kwargs["nproc_in"], path ) ) elif path.endswith(".lz4"): command += r""" <(lz4c -dc {} | sed -n -e '\''/^[^#]/,$p'\'')""".format( path ) else: command += r""" <(sed -n -e '\''/^[^#]/,$p'\'' {})""".format(path) command += "'" subprocess.check_call(command, shell=True, stdout=outstream) if outstream != sys.stdout: outstream.close() if __name__ == "__main__": merge() pairtools-1.0.3/pairtools/cli/parse.py000066400000000000000000000222161452673171500200140ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import click import sys from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.stats import PairCounter from ..lib.parse_pysam import AlignmentFilePairtoolized from ..lib.parse import streaming_classify UTIL_NAME = "pairtools_parse" @cli.command() @click.argument("sam_path", type=str, required=False) @click.option( "-c", "--chroms-path", type=str, required=True, help="Chromosome order used to flip interchromosomal mates: " "path to a chromosomes file (e.g. UCSC chrom.sizes or similar) whose " "first column lists scaffold names. Any scaffolds not listed will be " "ordered lexicographically following the names provided.", ) @click.option( "-o", "--output", type=str, default="", help="output file. " " If the path ends with .gz or .lz4, the output is bgzip-/lz4-compressed." "By default, the output is printed into stdout. ", ) @click.option( "--assembly", type=str, help="Name of genome assembly (e.g. hg19, mm10) to store in the pairs header.", ) @click.option( "--min-mapq", type=int, default=1, show_default=True, help="The minimal MAPQ score to consider a read as uniquely mapped", ) @click.option( "--max-molecule-size", type=int, default=750, show_default=True, help="The maximal size of a Hi-C molecule; used to rescue single ligations" "(from molecules with three alignments) and to rescue complex ligations." "The default is based on oriented P(s) at short ranges of multiple Hi-C." "Not used with walks-policy all.", ) @click.option( "--drop-readid", is_flag=True, help="If specified, do not add read ids to the output", ) @click.option( "--drop-seq", is_flag=True, help="If specified, remove sequences and PHREDs from the sam fields", ) @click.option( "--drop-sam", is_flag=True, help="If specified, do not add sams to the output" ) @click.option( "--add-pair-index", is_flag=True, help="If specified, each pair will have pair index in the molecule", ) @click.option( "--add-columns", type=click.STRING, default="", help="Report extra columns describing alignments " "Possible values (can take multiple values as a comma-separated " "list): a SAM tag (any pair of uppercase letters) or {}.".format( ", ".join(pairsam_format.EXTRA_COLUMNS) ), ) @click.option( "--output-parsed-alignments", type=str, default="", help="output file for all parsed alignments, including walks." " Useful for debugging and rnalysis of walks." " If file exists, it will be open in the append mode." " If the path ends with .gz or .lz4, the output is bgzip-/lz4-compressed." " By default, not used.", ) @click.option( "--output-stats", type=str, default="", help="output file for various statistics of pairs file. " " By default, statistics is not generated.", ) @click.option( "--report-alignment-end", type=click.Choice(["5", "3"]), default="5", help="specifies whether the 5' or 3' end of the alignment is reported as" " the position of the Hi-C read.", ) @click.option( "--max-inter-align-gap", type=int, default=20, show_default=True, help="read segments that are not covered by any alignment and" ' longer than the specified value are treated as "null" alignments.' " These null alignments convert otherwise linear alignments into walks," " and affect how they get reported as a Hi-C pair (see --walks-policy).", ) @click.option( "--walks-policy", type=click.Choice(["mask", "5any", "5unique", "3any", "3unique", "all"]), default="mask", help="the policy for reporting unrescuable walks (reads containing more" " than one alignment on one or both sides, that can not be explained by a" " single ligation between two mappable DNA fragments)." ' "mask" - mask walks (chrom="!", pos=0, strand="-"); ' ' "5any" - report the 5\'-most alignment on each side;' ' "5unique" - report the 5\'-most unique alignment on each side, if present;' ' "3any" - report the 3\'-most alignment on each side;' ' "3unique" - report the 3\'-most unique alignment on each side, if present;' ' "all" - report all available unique alignments on each side.', show_default=True, ) @click.option( "--readid-transform", type=str, default=None, help="A Python expression to modify read IDs. Useful when read IDs differ " "between the two reads of a pair. Must be a valid Python expression that " "uses variables called readID and/or i (the 0-based index of the read pair " "in the bam file) and returns a new value, e.g. \"readID[:-2]+'_'+str(i)\". " "Make sure that transformed readIDs remain unique!", show_default=True, ) @click.option( "--flip/--no-flip", is_flag=True, default=True, help="If specified, do not flip pairs in genomic order and instead preserve " "the order in which they were sequenced.", ) @common_io_options def parse( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ): """Find ligation pairs in .sam data, make .pairs. SAM_PATH : an input .sam/.bam file with paired-end sequence alignments of Hi-C molecules. If the path ends with .bam, the input is decompressed from bam with samtools. By default, the input is read from stdin. """ parse_py( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ) def parse_py( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ): ### Set up input stream if sam_path: # open input sam file with pysam input_sam = AlignmentFilePairtoolized( sam_path, "r", threads=kwargs.get("nproc_in") ) else: # read from stdin input_sam = AlignmentFilePairtoolized("-", "r", threads=kwargs.get("nproc_in")) ### Set up output streams outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) out_alignments_stream, out_stats_stream = None, None if output_parsed_alignments: out_alignments_stream = fileio.auto_open( output_parsed_alignments, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output_stats: out_stats_stream = fileio.auto_open( output_stats, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if out_alignments_stream: out_alignments_stream.write( "readID\tside\tchrom\tpos\tstrand\tmapq\tcigar\tdist_5_lo\tdist_5_hi\tmatched_bp\n" ) # generate empty PairCounter if stats output is requested: out_stat = PairCounter() if output_stats else None ### Set up output parameters add_columns = kwargs.get("add_columns", []) add_columns = [col for col in add_columns.split(",") if col] for col in add_columns: if not ( (col in pairsam_format.EXTRA_COLUMNS) or (len(col) == 2 and col.isupper()) ): raise Exception("{} is not a valid extra column".format(col)) columns = pairsam_format.COLUMNS + ( [c + side for c in add_columns for side in ["1", "2"]] ) if kwargs.get("drop_sam", True): columns.pop(columns.index("sam1")) columns.pop(columns.index("sam2")) if not kwargs.get("add_pair_index", False): columns.pop(columns.index("walk_pair_index")) columns.pop(columns.index("walk_pair_type")) ### Parse header samheader = input_sam.header if not samheader: raise ValueError( "The input sam is missing a header! If reading a bam file, please use `samtools view -h` to include the header." ) ### Parse chromosome files present in the input sam_chromsizes = headerops.get_chromsizes_from_pysam_header(samheader) chromosomes = headerops.get_chrom_order(chroms_path, list(sam_chromsizes.keys())) ### Write new header to the pairsam file header = headerops.make_standard_pairsheader( assembly=kwargs.get("assembly", ""), chromsizes=[(chrom, sam_chromsizes[chrom]) for chrom in chromosomes], columns=columns, shape="whole matrix" if not kwargs["flip"] else "upper triangle", ) header = headerops.insert_samheader_pysam(header, samheader) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) ### Parse input and write to the outputs streaming_classify( input_sam, outstream, chromosomes, out_alignments_stream, out_stat, **kwargs ) # save statistics to a file if it was requested: if out_stat: out_stat.save(out_stats_stream) if outstream != sys.stdout: outstream.close() # close optional output streams if needed: if out_alignments_stream and out_alignments_stream != sys.stdout: out_alignments_stream.close() if out_stats_stream and out_stats_stream != sys.stdout: out_stats_stream.close() if __name__ == "__main__": parse() pairtools-1.0.3/pairtools/cli/parse2.py000066400000000000000000000303341452673171500200760ustar00rootroot00000000000000# !/usr/bin/env python # -*- coding: utf-8 -*- import click import sys from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.stats import PairCounter from ..lib.parse_pysam import AlignmentFilePairtoolized from ..lib.parse import streaming_classify UTIL_NAME = "pairtools_parse2" @cli.command() @click.argument("sam_path", type=str, required=False) # Parsing options: @click.option( "-c", "--chroms-path", type=str, required=True, help="Chromosome order used to flip interchromosomal mates: " "path to a chromosomes file (e.g. UCSC chrom.sizes or similar) whose " "first column lists scaffold names. Any scaffolds not listed will be " "ordered lexicographically following the names provided.", ) @click.option( "-o", "--output", type=str, default="", help="output file with pairs. " " If the path ends with .gz or .lz4, the output is bgzip-/lz4-compressed." "By default, the output is printed into stdout. ", ) @click.option( "--report-position", type=click.Choice(["junction", "read", "walk", "outer"]), default="outer", help="""Reported position of alignments in pairs of complex walks (pos columns). Each alignment in .bam/.sam Hi-C-like data has two ends, and you can report one or another depending of the position of alignment on a read or in a pair. "junction" - inner ends of sequential alignments in each pair, aka ligation junctions (complex walks default), "read" - 5'-end of alignments relative to R1 or R2 read coordinate system (as in traditional Hi-C), "walk" - 5'-end of alignments relative to the whole walk coordinate system, "outer" - outer ends of sequential alignments in each pair. """, ) @click.option( "--report-orientation", type=click.Choice(["pair", "read", "walk", "junction"]), default="pair", help="""Reported orientataion of pairs in complex walk (strand columns). Each alignment in .bam/.sam Hi-C-like data has orientation, and you can report it relative to the read, pair or whole walk coordinate system. "pair" - orientation as if each pair in complex walk was sequenced independently from the outer ends or molecule (as in traditional Hi-C, also complex walks default), "read" - orientation defined by the read (R1 or R2 read coordinate system), "walk" - orientation defined by the walk coordinate system, "junction" - reversed "pair" orientation, as if pair was sequenced in both directions starting from the junction""", ) @click.option( "--assembly", type=str, help="Name of genome assembly (e.g. hg19, mm10) to store in the pairs header.", ) @click.option( "--min-mapq", type=int, default=1, show_default=True, help="The minimal MAPQ score to consider a read as uniquely mapped.", ) @click.option( "--max-inter-align-gap", type=int, default=20, show_default=True, help="Read segments that are not covered by any alignment and" ' longer than the specified value are treated as "null" alignments.' " These null alignments convert otherwise linear alignments into walks," " and affect how they get reported as a Hi-C pair.", ) @click.option( "--max-insert-size", type=int, default=500, show_default=True, help="When searching for overlapping ends of left and right read (R1 and R2), this sets the minimal distance " "when two alignments on the same strand and chromosome are considered part of the same fragment (and thus reported as the same alignment " "and not a pair). For traditional Hi-C with long restriction fragments and shorter molecules after ligation+sonication, this " "can be the expected molecule size. For complex walks with short restriction fragments, this can be the expected restriction fragment " "size. Note that unsequenced insert is *terra incognita* and might contain unsequenced DNA (including ligations) in it. " "This parameter is ignored in --single-end mode. ", ) @click.option( "--dedup-max-mismatch", type=int, default=3, show_default=True, help="Allowed mismatch between intramolecular alignments to detect readthrough duplicates. " "Pairs with both sides mapped within this distance (bp) from each " "other are considered duplicates. ", ) @click.option( "--single-end", is_flag=True, help="If specified, the input is single-end. " "Never use this for paired-end data, because R1 read will be omitted. " "If single-end data is provided, but parameter is unset, the pairs will be " "generated, but may contain artificial UN pairs. ", ) @click.option( "--expand/--no-expand", is_flag=True, help="If specified, perform combinatorial expansion on the pairs. " "Combinatorial expansion is a way to increase the number of contacts in you data, assuming that all DNA fragments in the same molecule (read) are in contact. " "Expanded pairs have modified pair type, 'E{separation}_{pair type}'", ) @click.option( "--max-expansion-depth", type=int, default=None, show_default=True, help="Works in combination with --expand. " "Maximum number of segments separating pair. By default, expanding all possible pairs." "Setting the number will limit the expansion depth and enforce contacts from the same " "side of the read. ", ) @click.option( "--add-pair-index", is_flag=True, help="If specified, parse2 will report pair index in the walk as additional columns (R1, R2, R1&R2 or R1-R2). " "See documentation: https://pairtools.readthedocs.io/en/latest/parsing.html#rescuing-complex-walks " "For combinatorial expanded pairs, two numbers will be reported: " "original pair index of the left and right segments. ", ) @click.option( "--flip/--no-flip", is_flag=True, default=False, help="If specified, flip pairs in genomic order and instead preserve " "the order in which they were sequenced. Note that no flip is recommended for analysis of walks because it will " "override the order of alignments in pairs. Flip is required for appropriate deduplication of sorted pairs. " "Flip is not required for cooler cload, which runs flipping internally. ", ) @click.option( "--add-columns", type=click.STRING, default="", help="Report extra columns describing alignments " "Possible values (can take multiple values as a comma-separated " "list): a SAM tag (any pair of uppercase letters) or {}.".format( ", ".join(pairsam_format.EXTRA_COLUMNS) ), ) @click.option( "--drop-readid/--keep-readid", is_flag=True, default=False, help="If specified, do not add read ids to the output. By default, keep read ids. Useful for long walks analysis. ", ) @click.option( "--readid-transform", type=str, default=None, help="A Python expression to modify read IDs. Useful when read IDs differ " "between the two reads of a pair. Must be a valid Python expression that " "uses variables called readID and/or i (the 0-based index of the read pair " "in the bam file) and returns a new value, e.g. \"readID[:-2]+'_'+str(i)\". " "Make sure that transformed readIDs remain unique!", show_default=True, ) @click.option( "--drop-seq/--keep-seq", is_flag=True, default=False, help="Remove sequences and PHREDs from the sam fields by default. Kept otherwise. ", ) @click.option( "--drop-sam/--keep-sam", is_flag=True, default=False, help="Do not add sams to the output by default. Kept otherwise. ", ) @click.option( "--output-parsed-alignments", type=str, default="", help="output file with all parsed alignments (one alignment per line)." " Useful for debugging and analysis of walks." " If file exists, it will be open in the append mode." " If the path ends with .gz or .lz4, the output is bgzip-/lz4-compressed." " By default, not used.", ) @click.option( "--output-stats", type=str, default="", help="output file for various statistics of pairs file. " " By default, statistics is not generated.", ) @common_io_options def parse2( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ): """Extracts pairs from .sam/.bam data with complex walks, make .pairs. SAM_PATH : an input .sam/.bam file with paired-end or single-end sequence alignments of Hi-C (or Hi-C-like) molecules. If the path ends with .bam, the input is decompressed from bam with samtools. By default, the input is read from stdin. """ parse2_py( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ) def parse2_py( sam_path, chroms_path, output, output_parsed_alignments, output_stats, **kwargs ): ### Set up input stream if sam_path: # open input sam file with pysam input_sam = AlignmentFilePairtoolized( sam_path, "r", threads=kwargs.get("nproc_in") ) else: # read from stdin input_sam = AlignmentFilePairtoolized("-", "r", threads=kwargs.get("nproc_in")) ### Set up output streams outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) out_alignments_stream = ( fileio.auto_open( output_parsed_alignments, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output_parsed_alignments else None ) out_stats_stream = ( fileio.auto_open( output_stats, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output_stats else None ) if out_alignments_stream: out_alignments_stream.write( "readID\tside\tchrom\tpos\tstrand\tmapq\tcigar\tdist_5_lo\tdist_5_hi\tmatched_bp\n" ) # generate empty PairCounter if stats output is requested: out_stat = PairCounter() if output_stats else None ### Set up output parameters add_columns = kwargs.get("add_columns", []) add_columns = [col for col in add_columns.split(",") if col] for col in add_columns: if not ( (col in pairsam_format.EXTRA_COLUMNS) or (len(col) == 2 and col.isupper()) ): raise Exception("{} is not a valid extra column".format(col)) columns = pairsam_format.COLUMNS + ( [c + side for c in add_columns for side in ["1", "2"]] ) if kwargs.get("drop_sam", True): columns.pop(columns.index("sam1")) columns.pop(columns.index("sam2")) if not kwargs.get("add_pair_index", False): columns.pop(columns.index("walk_pair_index")) columns.pop(columns.index("walk_pair_type")) ### Parse header samheader = input_sam.header if not samheader: raise ValueError( "The input sam is missing a header! If reading a bam file, please use `samtools view -h` to include the header." ) ### Parse chromosome files present in the input sam_chromsizes = headerops.get_chromsizes_from_pysam_header(samheader) chromosomes = headerops.get_chrom_order(chroms_path, list(sam_chromsizes.keys())) ### Write new header to the pairsam file header = headerops.make_standard_pairsheader( assembly=kwargs.get("assembly", ""), chromsizes=[(chrom, sam_chromsizes[chrom]) for chrom in chromosomes], columns=columns, shape="whole matrix" if not kwargs["flip"] else "upper triangle", ) header = headerops.insert_samheader_pysam(header, samheader) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) ### Parse input and write to the outputs streaming_classify( input_sam, outstream, chromosomes, out_alignments_stream, out_stat, parse2=True, **kwargs ) # save statistics to a file if it was requested: if out_stat: out_stat.save(out_stats_stream) if outstream != sys.stdout: outstream.close() if out_alignments_stream: out_alignments_stream.close() if out_stats_stream: out_stats_stream.close() if __name__ == "__main__": parse2() pairtools-1.0.3/pairtools/cli/phase.py000066400000000000000000000246121452673171500200040ustar00rootroot00000000000000import sys import click import re, fnmatch from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.phase import phase_side_XB, phase_side_XA UTIL_NAME = "pairtools_phase" @cli.command() @click.argument("pairs_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @click.option( "--phase-suffixes", nargs=2, # type=click.Tuple([str, str]), help="Phase suffixes (of the chrom names), always a pair.", ) @click.option( "--clean-output", is_flag=True, help="Drop all columns besides the standard ones and phase1/2", ) @click.option( "--tag-mode", type=click.Choice(["XB", "XA"]), default="XB", help="Specifies the mode of bwa reporting." " XA will parse 'XA', the input should be generated with: --add-columns XA,NM,AS,XS --min-mapq 0" " XB will parse 'XB' tag, the input should be generated with: --add-columns XB,AS,XS --min-mapq 0 " " Note that XB tag is added by running bwa with -u tag, present in github version. " " Both modes report similar results: XB reports 0.002% contacts more for phased data, " " while XA can report ~1-2% more unphased contacts because its definition multiple mappers is more premissive. ", ) @click.option( "--report-scores/--no-report-scores", is_flag=True, default=False, help="Report scores of optional, suboptimal and second suboptimal alignments. " "NM (edit distance) with --tag-mode XA and AS (alfn score) with --tag-mode XB ", ) @common_io_options def phase( pairs_path, output, phase_suffixes, clean_output, tag_mode, report_scores, **kwargs ): """Phase pairs mapped to a diploid genome. Diploid genome is the genome with two set of the chromosome variants, where each chromosome has one of two suffixes (phase-suffixes) corresponding to the genome version (phase-suffixes). By default, phasing adds two additional columns with phase 0, 1 or "." (unpahsed). Phasing is based on detection of chromosome origin of each mapped fragment. Three scores are considered: best alignment score (S1), suboptimal alignment (S2) and second suboptimal alignment (S3) scores. Each fragment can be: 1) uniquely mapped and phased (S1>S2>S3, first alignment is the best hit), 2) uniquely mapped but unphased (S1=S2>S3, cannot distinguish between chromosome variants), 3) multiply mapped (S1=S2=S3) or unmapped. PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ phase_py( pairs_path, output, phase_suffixes, clean_output, tag_mode, report_scores, **kwargs ) if __name__ == "__main__": phase() def phase_py( pairs_path, output, phase_suffixes, clean_output, tag_mode, report_scores, **kwargs ): instream = ( fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) if pairs_path else sys.stdin ) outstream = ( fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output else sys.stdout ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) old_column_names = headerops.extract_column_names(header) idx_phase1 = len(old_column_names) idx_phase2 = len(old_column_names) + 1 if clean_output: new_column_names = [ col for col in old_column_names if col in pairsam_format.COLUMNS ] new_column_idxs = [ i for i, col in enumerate(old_column_names) if col in pairsam_format.COLUMNS ] new_column_idxs += [idx_phase1, idx_phase2] else: new_column_names = list(old_column_names) new_column_names.append("phase1") new_column_names.append("phase2") if report_scores: if tag_mode == "XB": new_column_names.append("S1_1") new_column_names.append("S1_2") new_column_names.append("S2_1") new_column_names.append("S2_2") new_column_names.append("S3_1") new_column_names.append("S3_2") if clean_output: new_column_idxs += [(idx_phase2 + i + 1) for i in range(6)] elif tag_mode == "XA": new_column_names.append("M1_1") new_column_names.append("M1_2") new_column_names.append("M2_1") new_column_names.append("M2_2") new_column_names.append("M3_1") new_column_names.append("M3_2") if clean_output: new_column_idxs += [(idx_phase2 + i + 1) for i in range(6)] header = headerops._update_header_entry( header, "columns", " ".join(new_column_names) ) if tag_mode == "XB": if ( ("XB1" not in old_column_names) or ("XB2" not in old_column_names) or ("AS1" not in old_column_names) or ("AS2" not in old_column_names) or ("XS1" not in old_column_names) or ("XS2" not in old_column_names) ): raise ValueError( "The input pairs file must be parsed with the flag --add-columns XB,AS,XS --min-mapq 0" ) COL_XB1 = old_column_names.index("XB1") COL_XB2 = old_column_names.index("XB2") COL_AS1 = old_column_names.index("AS1") COL_AS2 = old_column_names.index("AS2") COL_XS1 = old_column_names.index("XS1") COL_XS2 = old_column_names.index("XS2") elif tag_mode == "XA": if ( ("XA1" not in old_column_names) or ("XA2" not in old_column_names) or ("NM1" not in old_column_names) or ("NM2" not in old_column_names) or ("AS1" not in old_column_names) or ("AS2" not in old_column_names) or ("XS1" not in old_column_names) or ("XS2" not in old_column_names) ): raise ValueError( "The input pairs file must be parsed with the flag --add-columns XA,NM,AS,XS --min-mapq 0" ) COL_XA1 = old_column_names.index("XA1") COL_XA2 = old_column_names.index("XA2") COL_NM1 = old_column_names.index("NM1") COL_NM2 = old_column_names.index("NM2") COL_AS1 = old_column_names.index("AS1") COL_AS2 = old_column_names.index("AS2") COL_XS1 = old_column_names.index("XS1") COL_XS2 = old_column_names.index("XS2") outstream.writelines((l + "\n" for l in header)) for line in body_stream: cols = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) cols.append("!") cols.append("!") if report_scores: for _ in range(6): cols.append("-1") pair_type = cols[pairsam_format.COL_PTYPE] if cols[pairsam_format.COL_C1] != pairsam_format.UNMAPPED_CHROM: if tag_mode == "XB": phase1, chrom_base1, S1_1, S2_1, S3_1 = phase_side_XB( cols[pairsam_format.COL_C1], cols[COL_XB1], int(cols[COL_AS1]), int(cols[COL_XS1]), phase_suffixes, ) elif tag_mode == "XA": phase1, chrom_base1, S1_1, S2_1, S3_1 = phase_side_XA( cols[pairsam_format.COL_C1], cols[COL_XA1], int(cols[COL_AS1]), int(cols[COL_XS1]), int(cols[COL_NM1]), phase_suffixes, ) if not report_scores: cols[idx_phase1] = phase1 else: ( cols[idx_phase1], cols[idx_phase1 + 2], cols[idx_phase1 + 4], cols[idx_phase1 + 6], ) = (phase1, str(S1_1), str(S2_1), str(S3_1)) cols[pairsam_format.COL_C1] = chrom_base1 if chrom_base1 == "!": cols[pairsam_format.COL_C1] = pairsam_format.UNMAPPED_CHROM cols[pairsam_format.COL_P1] = str(pairsam_format.UNMAPPED_POS) cols[pairsam_format.COL_S1] = pairsam_format.UNMAPPED_STRAND pair_type = "M" + pair_type[1] if cols[pairsam_format.COL_C2] != pairsam_format.UNMAPPED_CHROM: if tag_mode == "XB": phase2, chrom_base2, S1_2, S2_2, S3_2 = phase_side_XB( cols[pairsam_format.COL_C2], cols[COL_XB2], int(cols[COL_AS2]), int(cols[COL_XS2]), phase_suffixes, ) elif tag_mode == "XA": phase2, chrom_base2, S1_2, S2_2, S3_2 = phase_side_XA( cols[pairsam_format.COL_C2], cols[COL_XA2], int(cols[COL_AS2]), int(cols[COL_XS2]), int(cols[COL_NM2]), phase_suffixes, ) if not report_scores: cols[idx_phase2] = phase2 else: ( cols[idx_phase2], cols[idx_phase2 + 2], cols[idx_phase2 + 4], cols[idx_phase2 + 6], ) = (phase2, str(S1_2), str(S2_2), str(S3_2)) cols[pairsam_format.COL_C2] = chrom_base2 if chrom_base2 == "!": cols[pairsam_format.COL_C2] = pairsam_format.UNMAPPED_CHROM cols[pairsam_format.COL_P2] = str(pairsam_format.UNMAPPED_POS) cols[pairsam_format.COL_S2] = pairsam_format.UNMAPPED_STRAND pair_type = pair_type[0] + "M" cols[pairsam_format.COL_PTYPE] = pair_type if clean_output: cols = [cols[i] for i in new_column_idxs] outstream.write(pairsam_format.PAIRSAM_SEP.join(cols)) outstream.write("\n") if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": phase() pairtools-1.0.3/pairtools/cli/restrict.py000066400000000000000000000064731452673171500205500ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import click import warnings import numpy as np from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.restrict import find_rfrag UTIL_NAME = "pairtools_restrict" @cli.command() @click.argument("pairs_path", type=str, required=False) @click.option( "-f", "--frags", type=str, required=True, help="a tab-separated BED file with the positions of restriction fragments " "(chrom, start, end). Can be generated using cooler digest.", ) @click.option( "-o", "--output", type=str, default="", help="output .pairs/.pairsam file." " If the path ends with .gz/.lz4, the output is compressed by bgzip/lz4c." " By default, the output is printed into stdout.", ) @common_io_options def restrict(pairs_path, frags, output, **kwargs): """Assign restriction fragments to pairs. Identify the restriction fragments that got ligated into a Hi-C molecule. Note: rfrags are 0-indexed PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz/.lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ restrict_py(pairs_path, frags, output, **kwargs) def restrict_py(pairs_path, frags, output, **kwargs): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) header = headerops.append_columns( header, [ "rfrag1", "rfrag_start1", "rfrag_end1", "rfrag2", "rfrag_start2", "rfrag_end2", ], ) outstream.writelines((l + "\n" for l in header)) rfrags = np.genfromtxt( frags, delimiter="\t", comments="#", dtype=None, encoding="ascii", names=["chrom", "start", "end"], ) rfrags.sort(order=["chrom", "start", "end"]) chrom_borders = np.r_[ 0, 1 + np.where(rfrags["chrom"][:-1] != rfrags["chrom"][1:])[0], rfrags.shape[0] ] rfrags = { rfrags["chrom"][i]: np.concatenate([[0], rfrags["end"][i:j] + 1]) for i, j in zip(chrom_borders[:-1], chrom_borders[1:]) } for line in body_stream: cols = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) chrom1, pos1 = cols[pairsam_format.COL_C1], int(cols[pairsam_format.COL_P1]) rfrag_idx1, rfrag_start1, rfrag_end1 = find_rfrag(rfrags, chrom1, pos1) chrom2, pos2 = cols[pairsam_format.COL_C2], int(cols[pairsam_format.COL_P2]) rfrag_idx2, rfrag_start2, rfrag_end2 = find_rfrag(rfrags, chrom2, pos2) cols += [str(rfrag_idx1), str(rfrag_start1), str(rfrag_end1)] cols += [str(rfrag_idx2), str(rfrag_start2), str(rfrag_end2)] outstream.write(pairsam_format.PAIRSAM_SEP.join(cols)) outstream.write("\n") if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": restrict() pairtools-1.0.3/pairtools/cli/sample.py000066400000000000000000000036141452673171500201640ustar00rootroot00000000000000import sys import click import random from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options UTIL_NAME = "pairtools_sample" @cli.command() @click.argument("fraction", type=float, required=True) @click.argument("pairs_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @click.option( "-s", "--seed", type=int, default=None, help="the seed of the random number generator.", ) @common_io_options def sample(fraction, pairs_path, output, seed, **kwargs): """Select a random subset of pairs in a pairs file. FRACTION: the fraction of the randomly selected pairs subset PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. """ sample_py(fraction, pairs_path, output, seed, **kwargs) def sample_py(fraction, pairs_path, output, seed, **kwargs): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) outstream.writelines((l + "\n" for l in header)) random.seed(seed) for line in body_stream: if random.random() <= fraction: outstream.write(line) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": sample() pairtools-1.0.3/pairtools/cli/scaling.py000066400000000000000000000055571452673171500203330ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import io import sys import click import pandas as pd from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.scaling import compute_scaling UTIL_NAME = "pairtools_scaling" @cli.command() @click.argument("input_path", type=str, nargs=-1, required=False) @click.option( "-o", "--output", type=str, default="", help="output .tsv file with summary." ) @click.option( "--view", "--regions", help="Path to a BED file which defines which regions (viewframe) of the chromosomes to use. " "By default, this is parsed from .pairs header. ", type=str, required=False, default=None, ) @click.option( "--chunksize", type=int, default=100_000, show_default=True, required=False, help="Number of pairs in each chunk. Reduce for lower memory footprint.", ) @click.option( "--dist-range", type=click.Tuple([int, int]), default=(10, 1_000_000_000), show_default=True, required=False, help="Distance range. ", ) @click.option( "--n-dist-bins", type=int, default=128, show_default=True, required=False, help="Number of distance bins to split the distance range. ", ) @common_io_options def scaling(input_path, output, view, chunksize, dist_range, n_dist_bins, **kwargs): """Calculate pairs scalings. INPUT_PATH : by default, a .pairs/.pairsam file to calculate statistics. If not provided, the input is read from stdin. The files with paths ending with .gz/.lz4 are decompressed by bgzip/lz4c. Output is .tsv file with scaling stats (both cis scalings and trans levels). """ scaling_py(input_path, output, view, chunksize, dist_range, n_dist_bins, **kwargs) def scaling_py(input_path, output, view, chunksize, dist_range, n_dist_bins, **kwargs): if len(input_path) == 0: raise ValueError(f"No input paths: {input_path}") instream = fileio.auto_open( input_path[0], mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if view is not None: view = pd.read_table(view) # Pass the header to the instream so that it can parse the header automatically cis_scalings, trans_levels = compute_scaling( instream, regions=view, chromsizes=None, dist_range=dist_range, n_dist_bins=n_dist_bins, chunksize=chunksize, ) summary_stats = pd.concat([cis_scalings, trans_levels]) # save statistics to the file summary_stats.to_csv(outstream, sep="\t") if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": scaling() pairtools-1.0.3/pairtools/cli/select.py000066400000000000000000000176031452673171500201650ustar00rootroot00000000000000import sys import click import re, fnmatch import warnings from ..lib import fileio, pairsam_format, headerops from ..lib.select import evaluate_stream from . import cli, common_io_options UTIL_NAME = "pairtools_select" @cli.command() @click.argument("condition", type=str) @click.argument("pairs_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, the output is printed into stdout.", ) @click.option( "--output-rest", type=str, default="", help="output file for pairs of other types. " " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, such pairs are dropped.", ) # Deprecated option to be removed in the future: # @click.option( # "--send-comments-to", # type=click.Choice(['selected', 'rest', 'both', 'none']), # default="both", # help="Which of the outputs should receive header and comment lines", # show_default=True) @click.option( "--chrom-subset", type=str, default=None, help="A path to a chromosomes file (tab-separated, 1st column contains " "chromosome names) containing a chromosome subset of interest. " "If provided, additionally filter pairs with both sides originating from " "the provided subset of chromosomes. This operation modifies the #chromosomes: " "and #chromsize: header fields accordingly.", ) @click.option( "--startup-code", type=str, default=None, help="An auxiliary code to execute before filtering. " "Use to define functions that can be evaluated in the CONDITION statement", ) @click.option( "-t", "--type-cast", type=(str, str), default=(), multiple=True, help="Cast a given column to a given type. By default, only pos and mapq " "are cast to int, other columns are kept as str. Provide as " "-t , e.g. -t read_len1 int. Multiple entries are allowed.", ) @click.option( "--remove-columns", "-r", help=f"Comma-separated list of columns to be removed, e.g.: {','.join(pairsam_format.COLUMNS)}", type=str, default="", required=False, ) @common_io_options def select( condition, pairs_path, output, output_rest, # send_comments_to, chrom_subset, startup_code, type_cast, remove_columns, **kwargs, ): """Select pairs according to some condition. CONDITION : A Python expression; if it returns True, select the read pair. Any column declared in the #columns line of the pairs header can be accessed by its name. If the header lacks the #columns line, the columns are assumed to follow the .pairs/.pairsam standard (readID, chrom1, chrom2, pos1, pos2, strand1, strand2, pair_type). Finally, CONDITION has access to COLS list which contains the string values of columns. In Bash, quote CONDITION with single quotes, and use double quotes for string variables inside CONDITION. PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip/lz4c. By default, the input is read from stdin. The following functions can be used in CONDITION besides the standard Python functions: - csv_match(x, csv) - True if variable x is contained in a list of comma-separated values, e.g. csv_match(chrom1, 'chr1,chr2') - wildcard_match(x, wildcard) - True if variable x matches a wildcard, e.g. wildcard_match(pair_type, 'C*') - regex_match(x, regex) - True if variable x matches a Python-flavor regex, e.g. regex_match(chrom1, 'chr\d') \b Examples: pairtools select '(pair_type=="UU") or (pair_type=="UR") or (pair_type=="RU")' pairtools select 'chrom1==chrom2' pairtools select 'COLS[1]==COLS[3]' pairtools select '(chrom1==chrom2) and (abs(pos1 - pos2) < 1e6)' pairtools select '(chrom1=="!") and (chrom2!="!")' pairtools select 'regex_match(chrom1, "chr\d+") and regex_match(chrom2, "chr\d+")' pairtools select 'True' --chrom-subset mm9.reduced.chromsizes """ select_py( condition, pairs_path, output, output_rest, # send_comments_to, chrom_subset, startup_code, type_cast, remove_columns, **kwargs, ) def select_py( condition, pairs_path, output, output_rest, # send_comments_to, chrom_subset, startup_code, type_cast, remove_columns, **kwargs, ): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # Optional output created only if requested: outstream_rest = None if output_rest: outstream_rest = fileio.auto_open( output_rest, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # Parse the input stream: header, body_stream = headerops.get_header(instream) # Modify the header: header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) # Filter out unwanted columns: if remove_columns: input_columns = headerops.extract_column_names(header) remove_columns = remove_columns.split(",") for col in remove_columns: if col in pairsam_format.COLUMNS_PAIRS: warnings.warn( f"Removing required {col} column for .pairs format. Output is not .pairs anymore" ) elif col in pairsam_format.COLUMNS_PAIRSAM: warnings.warn( f"Removing required {col} column for .pairsam format. Output is not .pairsam anymore" ) updated_columns = [x for x in input_columns if x not in remove_columns] if len(updated_columns) == len(input_columns): warnings.warn( f"Some column(s) {','.join(remove_columns)} not in the file, the operation has no effect" ) else: header = headerops.set_columns(header, updated_columns) # Update the chromosomes: new_chroms = None if chrom_subset is not None: new_chroms = [l.strip().split("\t")[0] for l in open(chrom_subset, "r")] if new_chroms is not None: header = headerops.subset_chroms_in_pairsheader(header, new_chroms) outstream.writelines((l + "\n" for l in header)) if output_rest: outstream_rest.writelines((l + "\n" for l in header)) column_names = headerops.extract_column_names(header) if len(column_names) == 0: column_names = pairsam_format.COLUMNS # Columns filtration rule: if remove_columns: column_scheme = [input_columns.index(COL) for COL in updated_columns] # Format the condition: condition = condition.strip() if new_chroms is not None: condition = ( f"({condition}) and (chrom1 in {new_chroms}) and (chrom2 in {new_chroms})" ) for filter_passed, line in evaluate_stream( body_stream, condition, column_names, type_cast, startup_code ): COLS = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) if remove_columns: COLS = [ COLS[idx] for idx in column_scheme ] # re-order the columns according to the scheme: line = pairsam_format.PAIRSAM_SEP.join(COLS) + "\n" # form the line if filter_passed: outstream.write(line) elif outstream_rest: outstream_rest.write(line) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if output_rest and outstream_rest != sys.stdout: outstream_rest.close() if __name__ == "__main__": select() pairtools-1.0.3/pairtools/cli/sort.py000066400000000000000000000103671452673171500176750ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import io import sys import click import subprocess import shutil import warnings from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options UTIL_NAME = "pairtools_sort" @cli.command() @click.argument("pairs_path", type=str, required=False) @click.option( "-o", "--output", type=str, default="", help="output pairs file." " If the path ends with .gz or .lz4, the output is compressed by bgzip " "or lz4, correspondingly. By default, the output is printed into stdout.", ) @click.option( "--nproc", type=int, default=8, show_default=True, help="Number of processes to split the sorting work between.", ) @click.option( "--tmpdir", type=str, default="", help="Custom temporary folder for sorting intermediates.", ) @click.option( "--memory", type=str, default="2G", show_default=True, help="The amount of memory used by default.", ) @click.option( "--compress-program", type=str, default="auto", show_default=True, help="A binary to compress temporary sorted chunks. " "Must decompress input when the flag -d is provided. " "Suggested alternatives: gzip, lzop, lz4c, snzip. " 'If "auto", then use lz4c if available, and gzip ' "otherwise.", ) @common_io_options def sort(pairs_path, output, nproc, tmpdir, memory, compress_program, **kwargs): """Sort a .pairs/.pairsam file. Sort pairs in the lexicographic order along chrom1 and chrom2, in the numeric order along pos1 and pos2 and in the lexicographic order along pair_type. PAIRS_PATH : input .pairs/.pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip or lz4c, correspondingly. By default, the input is read as text from stdin. """ sort_py(pairs_path, output, nproc, tmpdir, memory, compress_program, **kwargs) def sort_py(pairs_path, output, nproc, tmpdir, memory, compress_program, **kwargs): instream = fileio.auto_open( pairs_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) header = headerops.mark_header_as_sorted(header) outstream.writelines((l + "\n" for l in header)) outstream.flush() if compress_program == "auto": if shutil.which("lz4c") is not None: compress_program = "lz4c" else: warnings.warn( "lz4c is not found. Using gzip for compression of sorted chunks, " "which results in a minor decrease in performance. Please install " "lz4c for faster sorting." ) compress_program = "gzip" command = r""" /bin/bash -c 'export LC_COLLATE=C; export LANG=C; sort -k {0},{0} -k {1},{1} -k {2},{2}n -k {3},{3}n -k {4},{4} --stable --field-separator=$'\''{5}'\'' {6} {7} -S {8} {9} """.replace( "\n", " " ).format( pairsam_format.COL_C1 + 1, pairsam_format.COL_C2 + 1, pairsam_format.COL_P1 + 1, pairsam_format.COL_P2 + 1, pairsam_format.COL_PTYPE + 1, pairsam_format.PAIRSAM_SEP_ESCAPE, " --parallel={} ".format(nproc) if nproc > 0 else " ", " --temporary-directory={} ".format(tmpdir) if tmpdir else " ", memory, ( " --compress-program={} ".format(compress_program) if compress_program else " " ), ) command += "'" with subprocess.Popen( command, stdin=subprocess.PIPE, bufsize=-1, shell=True, stdout=outstream ) as process: stdin_wrapper = io.TextIOWrapper(process.stdin, "utf-8") for line in body_stream: stdin_wrapper.write(line) stdin_wrapper.flush() process.communicate() if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": sort() pairtools-1.0.3/pairtools/cli/split.py000066400000000000000000000112151452673171500200320ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import pipes import click from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options UTIL_NAME = "pairtools_split" @cli.command() @click.argument("pairsam_path", type=str, required=False) @click.option( "--output-pairs", type=str, default="", help="output pairs file." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " If -, pairs are printed to stdout." " If not specified, pairs are dropped.", ) @click.option( "--output-sam", type=str, default="", help="output sam file." " If the path ends with .bam, the output is compressed into a bam file." " If -, sam entries are printed to stdout." " If not specified, sam entries are dropped.", ) @common_io_options def split(pairsam_path, output_pairs, output_sam, **kwargs): """Split a .pairsam file into .pairs and .sam. Restore a .sam file from sam1 and sam2 fields of a .pairsam file. Create a .pairs file without sam1/sam2 fields. PAIRSAM_PATH : input .pairsam file. If the path ends with .gz or .lz4, the input is decompressed by bgzip or lz4c. By default, the input is read from stdin. """ split_py(pairsam_path, output_pairs, output_sam, **kwargs) def split_py(pairsam_path, output_pairs, output_sam, **kwargs): instream = fileio.auto_open( pairsam_path, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) # Output streams if (not output_pairs) and (not output_sam): raise ValueError("At least one output (pairs and/or sam) must be specified!") if (output_pairs == "-") and (output_sam == "-"): raise ValueError("Only one output (pairs or sam) can be printed in stdout!") outstream_pairs = None outstream_sam = None if output_pairs: outstream_pairs = fileio.auto_open( output_pairs, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if output_sam: outstream_sam = fileio.auto_open( output_sam, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) header, body_stream = headerops.get_header(instream) header = headerops.append_new_pg(header, ID=UTIL_NAME, PN=UTIL_NAME) columns = headerops.extract_column_names(header) has_sams = False if columns: # trust the column order specified in the header if ("sam1" in columns) and ("sam2" in columns): sam1col = columns.index("sam1") sam2col = columns.index("sam2") columns.pop(max(sam1col, sam2col)) columns.pop(min(sam1col, sam2col)) header = headerops._update_header_entry( header, "columns", " ".join(columns) ) has_sams = True elif ("sam1" in columns) != ("sam2" in columns): raise ValueError( "According to the #columns header field only one sam entry is present" ) else: # assume that the file has sam columns and follows the pairsam format sam1col = pairsam_format.COL_SAM1 sam2col = pairsam_format.COL_SAM2 has_sams = True if output_pairs: outstream_pairs.writelines((l + "\n" for l in header)) if output_sam: outstream_sam.writelines( (l[11:].strip() + "\n" for l in header if l.startswith("#samheader:")) ) # Split sam1 = None sam2 = None for line in body_stream: cols = line.rstrip('\n').split(pairsam_format.PAIRSAM_SEP) if has_sams: if sam1col < sam2col: sam2 = cols.pop(sam2col) sam1 = cols.pop(sam1col) else: sam1 = cols.pop(sam1col) sam2 = cols.pop(sam2col) if output_pairs: # hard-coded tab separator to follow the DCIC pairs standard outstream_pairs.write("\t".join(cols)) outstream_pairs.write("\n") if output_sam and has_sams: for col in (sam1, sam2): if col != ".": for sam_entry in col.split(pairsam_format.INTER_SAM_SEP): outstream_sam.write( sam_entry.replace(pairsam_format.SAM_SEP, "\t") ) outstream_sam.write("\n") if output_pairs and outstream_pairs != sys.stdout: outstream_pairs.close() if output_sam and outstream_sam != sys.stdout: outstream_sam.close() if __name__ == "__main__": split() pairtools-1.0.3/pairtools/cli/stats.py000066400000000000000000000156261452673171500200470ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import io import sys import click import pandas as pd from ..lib import fileio, pairsam_format, headerops from . import cli, common_io_options from ..lib.stats import PairCounter, do_merge from .._logging import get_logger logger = get_logger() UTIL_NAME = "pairtools_stats" @cli.command() @click.argument("input_path", type=str, nargs=-1, required=False) @click.option("-o", "--output", type=str, default="", help="output stats tsv file.") @click.option( "--merge", is_flag=True, help="If specified, merge multiple input stats files instead of calculating" " statistics of a .pairs/.pairsam file. Merging is performed via summation of" " all overlapping statistics. Non-overlapping statistics are appended to" " the end of the file. Supported for tsv stats with single filter.", ) @click.option( "--with-chromsizes/--no-chromsizes", is_flag=True, default=True, help="If enabled, will store sizes of chromosomes from the header of the pairs file" " in the stats file.", ) @click.option( "--yaml/--no-yaml", is_flag=True, default=False, help="Output stats in yaml format instead of table. ", ) @click.option( "--bytile-dups/--no-bytile-dups", default=False, help="If enabled, will analyse by-tile duplication statistics to estimate" " library complexity more accurately." " Requires parent_readID column to be saved by dedup (will be ignored otherwise)" " Saves by-tile stats into --output_bytile-stats stream, or regular output if --output_bytile-stats is not provided.", ) @click.option( "--output-bytile-stats", default="", required=False, help="output file for tile duplicate statistics." " If file exists, it will be open in the append mode." " If the path ends with .gz or .lz4, the output is bgzip-/lz4c-compressed." " By default, by-tile duplicate statistics are not printed." " Note that the readID and parent_readID should be provided and contain tile information for this option.", ) # Filtering options: @click.option( "--filter", default=None, required=False, multiple=True, help="Filters with conditions to apply to the data (similar to `pairtools select`). " "For non-YAML output only the first filter will be reported. " """Example: pairtools stats --yaml --filter 'unique:(pair_type=="UU")' --filter 'close:(pair_type=="UU") and (abs(pos1-pos2)<10)' test.pairs """, ) @click.option( "--engine", default="pandas", required=False, help="Engine for regular expression parsing. " "Python will provide you regex functionality, while pandas does not accept custom funtctions and works faster. ", ) @click.option( "--chrom-subset", type=str, default=None, required=False, help="A path to a chromosomes file (tab-separated, 1st column contains " "chromosome names) containing a chromosome subset of interest. " "If provided, additionally filter pairs with both sides originating from " "the provided subset of chromosomes. This operation modifies the #chromosomes: " "and #chromsize: header fields accordingly.", ) @click.option( "--startup-code", type=str, default=None, required=False, help="An auxiliary code to execute before filtering. " "Use to define functions that can be evaluated in the CONDITION statement", ) @click.option( "-t", "--type-cast", type=(str, str), default=(), multiple=True, help="Cast a given column to a given type. By default, only pos and mapq " "are cast to int, other columns are kept as str. Provide as " "-t , e.g. -t read_len1 int. Multiple entries are allowed.", ) @common_io_options def stats( input_path, output, merge, bytile_dups, output_bytile_stats, filter, **kwargs ): """Calculate pairs statistics. INPUT_PATH : by default, a .pairs/.pairsam file to calculate statistics. If not provided, the input is read from stdin. If --merge is specified, then INPUT_PATH is interpreted as an arbitrary number of stats files to merge. The files with paths ending with .gz/.lz4 are decompressed by bgzip/lz4c. """ stats_py( input_path, output, merge, bytile_dups, output_bytile_stats, filter, **kwargs, ) def stats_py( input_path, output, merge, bytile_dups, output_bytile_stats, filter, **kwargs ): if merge: do_merge(output, input_path, **kwargs) return if len(input_path) == 0: raise ValueError(f"No input paths: {input_path}") instream = fileio.auto_open( input_path[0], mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) if bytile_dups and not output_bytile_stats: output_bytile_stats = outstream if output_bytile_stats: bytile_dups = True header, body_stream = headerops.get_header(instream) cols = headerops.extract_column_names(header) # Check necessary columns for reporting by-tile stats: if bytile_dups and "parent_readID" not in cols: logger.warning( "No 'parent_readID' column in the file, not generating duplicate stats." ) bytile_dups = False # Define filters and their properties first_filter_name = "no_filter" # default filter name for full output if filter is not None and len(filter) > 0: first_filter_name = filter[0].split(":", 1)[0] if len(filter) > 1 and not kwargs.get("yaml", False): logger.warn( f"Output the first filter only in non-YAML output: {first_filter_name}" ) filter = dict([f.split(":", 1) for f in filter]) else: filter = None stats = PairCounter( bytile_dups=bytile_dups, filters=filter, startup_code=kwargs.get("startup_code", ""), # for evaluation of filters type_cast=kwargs.get("type_cast", ()), # for evaluation of filters engine=kwargs.get("engine", "pandas"), ) # Collecting statistics for chunk in pd.read_table(body_stream, names=cols, chunksize=100_000): stats.add_pairs_from_dataframe(chunk) if kwargs.get("with_chromsizes", True): chromsizes = headerops.extract_chromsizes(header) stats.add_chromsizes(chromsizes) if bytile_dups: stats.save_bytile_dups(output_bytile_stats) # save statistics to file ... stats.save( outstream, yaml=kwargs.get("yaml", False), # format as yaml filter=first_filter_name if not kwargs.get("yaml", False) else None, # output only the first filter if non-YAML output ) if instream != sys.stdin: instream.close() if outstream != sys.stdout: outstream.close() if __name__ == "__main__": stats() pairtools-1.0.3/pairtools/lib/000077500000000000000000000000001452673171500163245ustar00rootroot00000000000000pairtools-1.0.3/pairtools/lib/__init__.py000066400000000000000000000004011452673171500204300ustar00rootroot00000000000000from . import fileio from . import dedup from . import dedup_cython from . import filterbycov from . import headerops from . import pairsam_format from . import parse from . import parse_pysam from . import restrict from . import stats from . import select pairtools-1.0.3/pairtools/lib/dedup.py000066400000000000000000000441461452673171500200100ustar00rootroot00000000000000import numpy as np import pandas as pd import scipy.spatial from scipy.sparse import coo_matrix from scipy.sparse.csgraph import connected_components from . import dedup_cython, pairsam_format from .stats import PairCounter from .._logging import get_logger logger = get_logger() import time # Ignore pandas future warnings: import warnings warnings.simplefilter(action='ignore', category=FutureWarning) # Setting for cython deduplication: # you don't need to load more than 10k lines at a time b/c you get out of the # CPU cache, so this parameter is not adjustable MAX_LEN = 10000 def streaming_dedup( in_stream, colnames, chunksize, carryover, method, mark_dups, max_mismatch, extra_col_pairs, unmapped_chrom, outstream, outstream_dups, outstream_unmapped, keep_parent_id, out_stat, backend, n_proc, ): deduped_chunks = _dedup_stream( in_stream=in_stream, colnames=colnames, method=method, chunksize=chunksize, carryover=carryover, mark_dups=mark_dups, max_mismatch=max_mismatch, extra_col_pairs=extra_col_pairs, keep_parent_id=keep_parent_id, backend=backend, n_proc=n_proc, ) t0 = time.time() N = 0 for df_chunk in deduped_chunks: N += df_chunk.shape[0] # Write the stats if requested: if out_stat is not None: out_stat.add_pairs_from_dataframe(df_chunk, unmapped_chrom=unmapped_chrom) # Define masks of unmapped and duplicated reads: mask_mapped = np.logical_and( (df_chunk["chrom1"] != unmapped_chrom), (df_chunk["chrom2"] != unmapped_chrom), ) mask_duplicates = df_chunk["duplicate"] # Clean up dataframe: df_chunk = df_chunk.drop(columns=["duplicate"]) # Stream the dups: if outstream_dups: df_chunk.loc[mask_mapped & mask_duplicates, :].to_csv( outstream_dups, index=False, header=False, sep="\t" ) # Drop readID if it was created (not needed for nodup and unmapped pairs): if keep_parent_id: df_chunk = df_chunk.drop(columns=["parent_readID"]) # Stream unmapped: if outstream_unmapped: df_chunk.loc[~mask_mapped, :].to_csv( outstream_unmapped, index=False, header=False, sep="\t" ) # Stream unique pairs: df_chunk.loc[mask_mapped & (~mask_duplicates), :].to_csv( outstream, index=False, header=False, sep="\t" ) t1 = time.time() t = t1 - t0 logger.debug(f"total time: {t}") if N > 0: logger.debug(f"time per mln pairs: {t/N*1e6}") else: logger.debug(f"Processed {N} pairs") def _dedup_stream( in_stream, colnames, method, chunksize, carryover, mark_dups, max_mismatch, extra_col_pairs, keep_parent_id, backend, n_proc, ): # Stream the input dataframe: dfs = pd.read_table( in_stream, comment=None, names=colnames, chunksize=chunksize ) # Set up the carryover dataframe: df_prev_nodups = pd.DataFrame([]) prev_i = 0 # Iterate over chunks: for df in dfs: df_marked = _dedup_chunk( pd.concat([df_prev_nodups, df], axis=0, ignore_index=True).reset_index( drop=True ), r=max_mismatch, method=method, keep_parent_id=keep_parent_id, extra_col_pairs=extra_col_pairs, backend=backend, n_proc=n_proc, ) df_marked = df_marked.loc[prev_i:, :].reset_index(drop=True) mask_duplicated = df_marked["duplicate"] if mark_dups: df_marked.loc[mask_duplicated, "pair_type"] = "DD" # Filter out duplicates and store specific columns: df_nodups = df_marked.loc[~mask_duplicated, colnames] # Re-define carryover pairs: df_prev_nodups = df_nodups.tail(carryover).reset_index(drop=True) prev_i = len(df_prev_nodups) yield df_marked def _dedup_chunk( df, r, method, keep_parent_id, extra_col_pairs, backend, unmapped_chrom="!", n_proc=1, ): """Mark duplicates in a dataframe of pairs Parameters ---------- df : pd.DataFrame Dataframe with pairs, has to contain columns 'chrom1', 'pos1', 'chrom2', 'pos2' 'strand1', 'strand2' r : int Allowed distance between two pairs to call them duplicates method : str 'sum' or 'max' - whether 'r' uses sum of distances on two ends of pairs, or the maximal distance keep_parent_id : bool If True, the read ID of the read that was not labelled as a duplicate from a group of duplicates is recorded for each read marked as duplicate. Only possible with non-cython backends extra_col_pairs : list of tuples List of extra column pairs that need to match between two reads for them be considered duplicates (e.g. useful if alleles are annotated) backend : str 'scipy', 'sklearn', 'cython' unmapped_chrom : str, optional Which character denotes unmapped reads in the chrom1/chrom2 fields, by default "!" n_proc : int, optional How many cores to use, by default 1 Only works for 'sklearn' backend Returns ------- pd.DataFrame Dataframe with marked duplicates (extra boolean field 'duplicate'), and optionally recorded 'parent_readID' """ if method not in ("max", "sum"): raise ValueError('Unknown method, only "sum" or "max" allowed') if backend == "sklearn": from sklearn import neighbors if method == "sum": p = 1 else: p = np.inf # Store the index of the dataframe: index_colname = df.index.name if index_colname is None: index_colname = "index" df = df.reset_index() # Remove the index temporarily # Set up columns to store the dedup info: df.loc[:, "clusterid"] = np.nan df.loc[:, "duplicate"] = False # Split mapped and unmapped reads: mask_unmapped = (df["chrom1"] == unmapped_chrom) | (df["chrom2"] == unmapped_chrom) df_unmapped = df.loc[mask_unmapped, :].copy() df_mapped = df.loc[~mask_unmapped, :].copy() N_mapped = df_mapped.shape[0] # If there are some mapped reads, dedup them: if N_mapped > 0: if backend == "sklearn": a = neighbors.radius_neighbors_graph( df_mapped[["pos1", "pos2"]], radius=r, p=p, n_jobs=n_proc, ) a0, a1 = a.nonzero() elif backend == "scipy": z = scipy.spatial.cKDTree(df_mapped[["pos1", "pos2"]]) a = z.query_pairs(r=r, p=p, output_type="ndarray") a0 = a[:, 0] a1 = a[:, 1] need_to_match = np.array( [ ("chrom1", "chrom1"), ("chrom2", "chrom2"), ("strand1", "strand1"), ("strand2", "strand2"), ] + extra_col_pairs ) nonpos_matches = np.all( [ df_mapped.iloc[a0, df_mapped.columns.get_loc(lc)].values == df_mapped.iloc[a1, df_mapped.columns.get_loc(rc)].values for (lc, rc) in need_to_match ], axis=0, ) a0 = a0[nonpos_matches] a1 = a1[nonpos_matches] a_mat = coo_matrix((np.ones_like(a0), (a0, a1)), shape=(N_mapped, N_mapped)) # Set up inferred clusterIDs: df_mapped.loc[:, "clusterid"] = connected_components(a_mat, directed=False)[1] mask_dups = df_mapped["clusterid"].duplicated() df_mapped.loc[mask_dups, "duplicate"] = True # Mark parent IDs if requested: if keep_parent_id: df_mapped.loc[:, "parent_readID"] = df_mapped["clusterid"].map( df_mapped[~mask_dups].set_index("clusterid")["readID"] ) df_unmapped.loc[:, "parent_readID"] = "" # Reconstruct original dataframe with removed duplicated reads: df = pd.concat([df_unmapped, df_mapped]).reset_index(drop=True) df = df.set_index(index_colname) # Set up the original index df = df.drop( ["clusterid"], axis=1 ) # Remove the information that we don't need anymore: return df ### Cython deduplication #### def streaming_dedup_cython( method, max_mismatch, sep, c1ind, c2ind, p1ind, p2ind, s1ind, s2ind, extra_cols1, extra_cols2, unmapped_chrom, instream, outstream, outstream_dups, outstream_unmapped, out_stat, mark_dups, keep_parent_id=False, readid_ind=0, ): """ Cython-powered deduplication with online algorithm based on indexed list. Parameters ---------- method: "max" or "sum" max_mismatch: maximum allowed mismatch to count the pairs as duplicates sep: separator of the fields in the input file c1ind: index of the chr1 column c2ind: index of the chr2 column p1ind: index of the pos1 column p2ind: index of the pos2 column s1ind: index of the strand1 column s2ind: index of the strand2 column extra_cols1: extra columns for left alignment in a pair to add extra_cols2: extra columns for right alignment in a pair to add unmapped_chrom: Symbol of the chromosome for the unmapped alignment instream: input stream of pair file outstream: output stram of deduplicated pairs outstream_dups: output stream of duplicates (optionally with added parent_id, see keep_parent_id option) outstream_unmapped: output stram of unmapped pairs out_stat: output statistics mark_dups: if True, will add "DD" as the pair_type keep_parent_id: if True, additional column "parent_readID will be added to the output, can be useful for optical duplicates search readid_ind: index of the readID column in the input file Returns ------- """ maxind = max(c1ind, c2ind, p1ind, p2ind, s1ind, s2ind) if bool(extra_cols1) and bool(extra_cols2): maxind = max(maxind, max(extra_cols1), max(extra_cols2)) all_scols1 = [s1ind] + extra_cols1 all_scols2 = [s2ind] + extra_cols2 # if we do stats in the dedup, we need PAIR_TYPE # i do not see way around this: if out_stat: ptind = pairsam_format.COL_PTYPE maxind = max(maxind, ptind) dd = dedup_cython.OnlineDuplicateDetector( method, max_mismatch, returnData=False, keep_parent_id=keep_parent_id ) c1 = [] c2 = [] p1 = [] p2 = [] s1 = [] s2 = [] idx = [] line_buffer = [] cols_buffer = [] chromDict = {} strandDict = {} curMaxLen = max(MAX_LEN, dd.getLen()) t0 = time.time() N = 0 instream = iter(instream) read_idx = 0 # read index to mark the parent readID while True: rawline = next(instream, None) stripline = rawline.strip('\n') if rawline else None # take care of empty lines not at the end of the file separately if rawline and (not stripline): logger.warning("Empty line detected not at the end of the file") continue if stripline: cols = stripline.split(sep) if len(cols) <= maxind: raise ValueError( "Error parsing line {}: ".format(stripline) + " expected {} columns, got {}".format(maxind, len(cols)) ) if (cols[c1ind] == unmapped_chrom) or (cols[c2ind] == unmapped_chrom): if outstream_unmapped: outstream_unmapped.write(stripline) # don't forget terminal newline outstream_unmapped.write("\n") # add a pair to PairCounter if stats output is requested: if out_stat: out_stat.add_pair( cols[c1ind], int(cols[p1ind]), cols[s1ind], cols[c2ind], int(cols[p2ind]), cols[s2ind], cols[ptind], ) else: line_buffer.append(stripline) cols_buffer.append(cols) c1.append(fetchadd(cols[c1ind], chromDict)) c2.append(fetchadd(cols[c2ind], chromDict)) p1.append(int(cols[p1ind])) p2.append(int(cols[p2ind])) idx.append(read_idx) read_idx += 1 if bool(extra_cols1) and bool(extra_cols2): s1.append( fetchadd("".join(cols[i] for i in all_scols1), strandDict) ) s2.append( fetchadd("".join(cols[i] for i in all_scols2), strandDict) ) else: s1.append(fetchadd(cols[s1ind], strandDict)) s2.append(fetchadd(cols[s2ind], strandDict)) N += 1 if (not stripline) or (len(c1) == curMaxLen): if keep_parent_id: res, parents = dd.push( ar(c1, 32), ar(c2, 32), ar(p1, 32), ar(p2, 32), ar(s1, 32), ar(s2, 32), ) else: res = dd.push( ar(c1, 32), ar(c2, 32), ar(p1, 32), ar(p2, 32), ar(s1, 32), ar(s2, 32), ) if not stripline: if keep_parent_id: res_tmp, parents_tmp = dd.finish() parents = np.concatenate([parents, parents_tmp]) else: res_tmp = dd.finish() res = np.concatenate([res, res_tmp]) for i in range(len(res)): # not duplicated pair: if not res[i]: outstream.write(line_buffer[i]) # don't forget terminal newline outstream.write("\n") if out_stat: out_stat.add_pair( cols_buffer[i][c1ind], int(cols_buffer[i][p1ind]), cols_buffer[i][s1ind], cols_buffer[i][c2ind], int(cols_buffer[i][p2ind]), cols_buffer[i][s2ind], cols_buffer[i][ptind], ) # duplicated pair: else: if out_stat: out_stat.add_pair( cols_buffer[i][c1ind], int(cols_buffer[i][p1ind]), cols_buffer[i][s1ind], cols_buffer[i][c2ind], int(cols_buffer[i][p2ind]), cols_buffer[i][s2ind], "DD", ) if outstream_dups: if mark_dups: # DD-marked pair: output = sep.join(mark_split_pair_as_dup(cols_buffer[i])) else: # pair as is: output = line_buffer[i] if keep_parent_id: # Add parentID as the last column: parent_readID = line_buffer[parents[i]].split(sep)[ readid_ind ] output = sep.join([output, parent_readID]) outstream_dups.write(output) # don't forget terminal newline outstream_dups.write("\n") # flush buffers and perform necessary checks here: c1 = [] c2 = [] p1 = [] p2 = [] s1 = [] s2 = [] line_buffer = line_buffer[len(res) :] cols_buffer = cols_buffer[len(res) :] if not stripline: if len(line_buffer) != 0: raise ValueError( "{} lines left in the buffer, ".format(len(line_buffer)) + "should be none;" + "something went terribly wrong" ) break # process next line ... # all lines have been processed at this point. # streaming_dedup is over. t1 = time.time() t = t1 - t0 logger.debug(f"total time: {t}") if N > 0: logger.debug(f"time per mln pairs: {t/N*1e6}") else: logger.debug(f"Processed {N} pairs") def fetchadd(key, mydict): key = key.strip() if key not in mydict: mydict[key] = len(mydict) return mydict[key] def ar(mylist, val): return np.array(mylist, dtype={8: np.int8, 16: np.int16, 32: np.int32}[val]) #### Markasdup utilities: #### def mark_split_pair_as_dup(cols): # if the original columns ended with a new line, the marked columns # should as well. original_has_newline = cols[-1].endswith("\n") cols[pairsam_format.COL_PTYPE] = "DD" if (len(cols) > pairsam_format.COL_SAM1) and (len(cols) > pairsam_format.COL_SAM2): for i in (pairsam_format.COL_SAM1, pairsam_format.COL_SAM2): # split each sam column into sam entries, tag and assemble back cols[i] = pairsam_format.INTER_SAM_SEP.join( [ mark_sam_as_dup(sam) for sam in cols[i].split(pairsam_format.INTER_SAM_SEP) ] ) if original_has_newline and not cols[-1].endswith("\n"): cols[-1] = cols[-1] + "\n" return cols def mark_sam_as_dup(sam): """Tag the binary flag and the optional pair type field of a sam entry as a PCR duplicate.""" samcols = sam.split(pairsam_format.SAM_SEP) if len(samcols) == 1: return sam samcols[1] = str(int(samcols[1]) | 1024) for j in range(11, len(samcols)): if samcols[j].startswith("Yt:Z:"): samcols[j] = "Yt:Z:DD" return pairsam_format.SAM_SEP.join(samcols) pairtools-1.0.3/pairtools/lib/dedup_cython.pyx000066400000000000000000000135311452673171500215560ustar00rootroot00000000000000""" Legacy code: ``mark_duplicates`` is an offline method that finds duplicates in a given input dataset. For other applications on much larger datasets you may consider an online method ``OnlineDuplicateDetector`` which is implemented as a class. Note that for both methods data types are fixed: * chromosomes are int32 * position is int32 * strand is int32, which is basically the same as C type "char". """ import numpy as np import cython cimport numpy as np cimport cython ### Online deduplicator used in pairtools.dedup Cython: cdef class OnlineDuplicateDetector(object): cdef cython.int [:] c1 cdef cython.int [:] c2 cdef cython.int [:] p1 cdef cython.int [:] p2 cdef cython.int [:] s1 cdef cython.int [:] s2 cdef cython.char [:] rm cdef cython.int [:] parent_idxs cdef int methodid cdef int low cdef int high cdef int N cdef int max_mismatch cdef int returnData cdef int keep_parent_id def __init__(self, method, max_mismatch, returnData=False, keep_parent_id=False): if returnData == False: self.returnData = 0 else: self.returnData = 1 if keep_parent_id == False: self.keep_parent_id = 0 else: self.keep_parent_id = 1 self.parent_idxs = np.zeros(0, np.int32) self.N = 0 self.c1 = np.zeros(0, np.int32) self.c2 = np.zeros(0, np.int32) self.p1 = np.zeros(0, np.int32) self.p2 = np.zeros(0, np.int32) self.s1 = np.zeros(0, np.int32) self.s2 = np.zeros(0, np.int32) self.rm = np.zeros(0, np.int8) if method == "max": self.methodid = 0 elif method == "sum": self.methodid = 1 else: raise ValueError('method should be "sum" or "max"') self.max_mismatch = int(max_mismatch) self.low = 0 self.high = 1 def _shrink(self): if self.returnData == 1: firstret = self.rm[:self.low] retainMask = (np.asarray(firstret) == False) del firstret ret = [] for ar in [self.c1, self.c2, self.p1, self.p2, self.s1, self.s2]: ret.append(np.asarray(ar)[:self.low][retainMask]) self.c1 = self.c1[self.low:] self.c2 = self.c2[self.low:] self.p1 = self.p1[self.low:] self.p2 = self.p2[self.low:] self.s1 = self.s1[self.low:] self.s2 = self.s2[self.low:] pastrm = self.rm[:self.low] self.rm = self.rm[self.low:] self.high = self.high-self.low self.N = self.N - self.low if self.returnData == 1: self.low = 0 return ret if self.keep_parent_id == 1: # Return parent readIDs alongside with duplicates mask: pastidx = self.parent_idxs[:self.low] self.low = 0 return pastrm, pastidx self.low = 0 return pastrm def _run(self, finish=False): cdef int finishing = 0 cdef int extraCondition if finish: finishing = 1 while True: if self.low == self.N: break if self.high == self.N: if finishing == 1: self.low += 1 self.high = self.low + 1 continue else: break if self.rm[self.low] == 1: self.low += 1 self.high = self.low+1 continue # if high already removed, just continue if self.rm[self.high] == 1: self.high += 1 continue # if we jumped too far, continue if ((self.c1[self.high] != self.c1[self.low]) or (self.p1[self.high] - self.p1[self.low] > self.max_mismatch) or (self.p1[self.high] - self.p1[self.low] < 0 )): self.low += 1 self.high = self.low + 1 # restart high continue if self.methodid == 0: extraCondition = max( abs(self.p1[self.low] - self.p1[self.high]), abs(self.p2[self.low] - self.p2[self.high])) <= self.max_mismatch elif self.methodid == 1: # sum of distances <= max_mismatch extraCondition = ( abs(self.p1[self.low] - self.p1[self.high]) + abs(self.p2[self.low] - self.p2[self.high]) <= self.max_mismatch ) else: raise ValueError( "Unknown method id, this should not happen. " "Check code of this function.") if ((self.c2[self.low] == self.c2[self.high]) and (self.s1[self.low] == self.s1[self.high]) and (self.s2[self.low] == self.s2[self.high]) and extraCondition): self.rm[self.high] = 1 if self.keep_parent_id == 1: self.parent_idxs[self.high] = self.low self.high += 1 continue self.high += 1 return self._shrink() def push(self, c1, c2, p1, p2, s1, s2): self.c1 = np.concatenate([self.c1, c1]) self.c2 = np.concatenate([self.c2, c2]) self.p1 = np.concatenate([self.p1, p1]) self.p2 = np.concatenate([self.p2, p2]) self.s1 = np.concatenate([self.s1, s1]) self.s2 = np.concatenate([self.s2, s2]) self.rm = np.concatenate([self.rm, np.zeros(len(c1), dtype=np.int8)]) if self.keep_parent_id == 1: self.parent_idxs = np.concatenate([self.parent_idxs, np.zeros(len(c1), dtype=np.int32)]) self.N = self.N + len(c1) return self._run(finish=False) def finish(self): return self._run(finish=True) def getLen(self): return int(self.N)pairtools-1.0.3/pairtools/lib/fileio.py000066400000000000000000000201161452673171500201450ustar00rootroot00000000000000import shutil import pipes import subprocess import sys class ParseError(Exception): pass def auto_open(path, mode, nproc=1, command=None): """Guess the file format from the extension and use the corresponding binary to open it for reading or writing. If the extension is not known, open the file as text. If the binary allows parallel execution, specify the number of threads with `nproc`. If `command` is supplied, use it to open the file instead of auto-guessing. The command must accept the filename as the last argument, accept input through stdin and print output into stdout. Supported extensions and binaries (with comments): .bam - samtools view (allows parallel writing) .gz - pbgzip if available, otherwise bgzip .lz4 - lz4c (does not support parallel execution) """ # Empty filepath or False provided if not path or path == "-": if mode == "r": return sys.stdin if mode == "w": return sys.stdout if command: if mode == "w": t = pipes.Template() t.append(command, "--") f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append(command, "--") f = t.open(path, "r") else: raise ValueError("Unknown mode : {}".format(mode)) return f elif path.endswith(".bam"): if shutil.which("samtools") is None: raise ValueError( { "w": "samtools is not found, cannot compress output", "r": "samtools is not found, cannot decompress input", }[mode] ) if mode == "w": t = pipes.Template() t.append( "samtools view -bS {} -".format( "-@ " + str(nproc - 1) if nproc > 1 else "" ), "--", ) f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append("samtools view -h", "--") f = t.open(path, "r") else: raise ValueError("Unknown mode for .bam : {}".format(mode)) return f elif path.endswith(".gz"): if shutil.which("pbgzip") is not None: if mode == "w": t = pipes.Template() t.append("pbgzip -c -n {}".format(nproc), "--") f = t.open(path, "w") elif mode == "a": t = pipes.Template() t.append("pbgzip -c -n {} $IN >> $OUT".format(nproc), "ff") f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append("pbgzip -dc -n {}".format(nproc), "--") f = t.open(path, "r") else: raise ValueError("Unknown mode for .gz : {}".format(mode)) elif shutil.which("bgzip") is not None: if mode == "w": t = pipes.Template() t.append("bgzip -c -@ {}".format(nproc), "--") f = t.open(path, "w") elif mode == "a": t = pipes.Template() t.append("bgzip -c -@ {} $IN >> $OUT".format(nproc), "ff") f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append("bgzip -dc -@ {}".format(nproc), "--") f = t.open(path, "r") else: raise ValueError("Unknown mode for .gz : {}".format(mode)) elif shutil.which("gzip") is not None: if mode == "w": t = pipes.Template() t.append("gzip -c", "--") f = t.open(path, "w") elif mode == "a": t = pipes.Template() t.append("gzip -c $IN >> $OUT", "ff") f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append("gzip -dc", "--") f = t.open(path, "r") else: raise ValueError("Unknown mode for .gz : {}".format(mode)) else: raise ValueError( { "w": "pbgzip, bgzip and gzip are not found, cannot compress output", "a": "pbgzip, bgzip and gzip are is not found, cannot compress output", "r": "pbgzip, bgzip and gzip are is not found, cannot decompress input", }[mode] ) return f elif path.endswith(".lz4"): if shutil.which("lz4c") is None: raise ValueError( { "w": "lz4c is not found, cannot compress output", "a": "lz4c is not found, cannot compress output", "r": "lz4c is not found, cannot decompress input", }[mode] ) if mode == "w": t = pipes.Template() t.append("lz4c -cz", "--") f = t.open(path, "w") elif mode == "a": t = pipes.Template() t.append("lz4c -cz $IN >> $OUT", "ff") f = t.open(path, "w") elif mode == "r": t = pipes.Template() t.append("lz4c -cd", "--") f = t.open(path, "r") else: raise ValueError("Unknown mode : {}".format(mode)) return f else: return open(path, mode) class PipedIO: def __init__(self, file_or_path, command, mode="r"): """ An experimental class that reads/writes a file, piping the contents through another process. Parameters ---------- file_or_path : file-like object or str A path to the input/output file or an already opened file-like object. command : str A command to launch a reading/writing process. If mode is 'w', the process must accept input via stdin. If mode is 'r', the process must put output into stdout. If mode is 'r' and file_or_path is str, the path will be appended to the command as the last argument. mode : str The mode for opening, same as in open(mode=). Returns ------- file: a file-like object """ if issubclass(type(command), str): command = command.split(" ") self._command = command self._mode = mode if mode.startswith("r"): if issubclass(type(file_or_path), str): self._proc = subprocess.Popen( command + [file_or_path], universal_newlines=True, stdout=subprocess.PIPE, ) else: self._proc = subprocess.Popen( command, universal_newlines=True, stdin=file_or_path, stdout=subprocess.PIPE, ) self._stream = self._proc.stdout self._close_stream = self._proc.stdout.close elif mode.startswith("w") or mode.startswith("a"): f = ( open(file_or_path, mode=mode) if issubclass(type(file_or_path), str) else file_or_path ) self._proc = subprocess.Popen( command, universal_newlines=True, stdin=subprocess.PIPE, stdout=f ) self._stream = self._proc.stdin self.buffer = self._stream.buffer self.closed = self._stream.closed self.flush = self._stream.flush self.fileno = self._stream.fileno self.read = self._stream.read self.readline = self._stream.readline self.readlines = self._stream.readlines self.seek = self._stream.seek self.seekable = self._stream.seekable self.truncate = self._stream.truncate self.tell = self._stream.tell self.writable = self._stream.writable self.write = self._stream.write self.writelines = self._stream.writelines def close(self, timeout=None): self._stream.close() retcode = self._proc.wait(timeout=timeout) return retcode pairtools-1.0.3/pairtools/lib/filterbycov.py000066400000000000000000000173761452673171500212440ustar00rootroot00000000000000import numpy as np import warnings from .dedup import mark_split_pair_as_dup from . import pairsam_format def fetchadd(key, mydict): key = key.strip() if key not in mydict: mydict[key] = len(mydict) return mydict[key] def ar(mylist, val): return np.array(mylist, dtype={8: np.int8, 16: np.int16, 32: np.int32}[val]) def _filterbycov(c1_in, p1_in, c2_in, p2_in, max_dist, method): """ This is a slow version of the filtering code used for testing purposes only Use cythonized version in the future!! """ c1 = np.asarray(c1_in, dtype=int) p1 = np.asarray(p1_in, dtype=int) c2 = np.asarray(c2_in, dtype=int) p2 = np.asarray(p2_in, dtype=int) M = np.r_[ np.c_[c1, p1], np.c_[c2, p2] ] # M is a table of (chrom, pos) with 2*N rows assert c1.shape[0] == c2.shape[0] N = 2 * c1.shape[0] ind_sorted = np.lexsort((M[:, 1], M[:, 0])) # sort by chromosomes, then positions # M[ind_sorted] # ind_sorted # M, M[ind_sorted] if method == "sum": proximity_count = np.zeros( N ) # keeps track of how many molecules each framgent end is close to elif method == "max": proximity_count = np.zeros(N) else: raise ValueError("Unknown method: {}".format(method)) low = 0 high = 1 while True: # boundary case finish if low == N: break # boundary case - CHECK if high == N: low += 1 high = low + 1 continue # check if "high" is proximal enough to "low" # first, if chromosomes not equal, we have gone too far, and the positions are not proximal if M[ind_sorted[low], 0] != M[ind_sorted[high], 0]: low += 1 high = low + 1 # restart high continue # next, if positions are not proximal, increase low, and continue elif np.abs(M[ind_sorted[high], 1] - M[ind_sorted[low], 1]) > max_dist: low += 1 high = low + 1 # restart high continue # if on the same chromosome, and the distance is "proximal enough", add to count of both "low" and "high" positions else: proximity_count[low] += 1 proximity_count[high] += 1 high += 1 # unsort proximity count # proximity_count = proximity_count[ind_sorted] proximity_count[ind_sorted] = np.copy(proximity_count) # print(M) # print(proximity_count) # if method is sum of pairs if method == "sum": pcounts = proximity_count[0 : N // 2] + proximity_count[N // 2 :] + 1 elif method == "max": pcounts = np.maximum( proximity_count[0 : N // 2] + 1, proximity_count[N // 2 :] + 1 ) else: raise ValueError("Unknown method: {}".format(method)) return pcounts def streaming_filterbycov( method, max_dist, max_cov, sep, c1ind, c2ind, p1ind, p2ind, s1ind, s2ind, unmapped_chrom, instream, outstream, outstream_high, outstream_unmapped, out_stat, mark_multi, ): # doing everything in memory maxind = max(c1ind, c2ind, p1ind, p2ind, s1ind, s2ind) # if we do stats in the dedup, we need PAIR_TYPE # i do not see way around this: if out_stat: ptind = pairsam_format.COL_PTYPE maxind = max(maxind, ptind) c1 = [] c2 = [] p1 = [] p2 = [] s1 = [] s2 = [] line_buffer = [] cols_buffer = [] chromDict = {} strandDict = {} n_unmapped = 0 n_high = 0 n_low = 0 instream = iter(instream) while True: rawline = next(instream, None) stripline = rawline.strip() if rawline else None # take care of empty lines not at the end of the file separately if rawline and (not stripline): warnings.warn("Empty line detected not at the end of the file") continue if stripline: cols = stripline.split(sep) if len(cols) <= maxind: raise ValueError( "Error parsing line {}: ".format(stripline) + " expected {} columns, got {}".format(maxind, len(cols)) ) if (cols[c1ind] == unmapped_chrom) or (cols[c2ind] == unmapped_chrom): if outstream_unmapped: outstream_unmapped.write(stripline) # don't forget terminal newline outstream_unmapped.write("\n") # add a pair to PairCounter if stats output is requested: if out_stat: out_stat.add_pair( cols[c1ind], int(cols[p1ind]), cols[s1ind], cols[c2ind], int(cols[p2ind]), cols[s2ind], cols[ptind], ) else: line_buffer.append(stripline) cols_buffer.append(cols) c1.append(fetchadd(cols[c1ind], chromDict)) c2.append(fetchadd(cols[c2ind], chromDict)) p1.append(int(cols[p1ind])) p2.append(int(cols[p2ind])) s1.append(fetchadd(cols[s1ind], strandDict)) s2.append(fetchadd(cols[s2ind], strandDict)) else: # when everything is loaded in memory... res = _filterbycov(c1, p1, c2, p2, max_dist, method) for i in range(len(res)): # not high-frequency interactor pairs: if not res[i] > max_cov: outstream.write(line_buffer[i]) # don't forget terminal newline outstream.write("\n") if out_stat: out_stat.add_pair( cols_buffer[i][c1ind], int(cols_buffer[i][p1ind]), cols_buffer[i][s1ind], cols_buffer[i][c2ind], int(cols_buffer[i][p2ind]), cols_buffer[i][s2ind], cols_buffer[i][ptind], ) # high-frequency interactor pairs: else: if out_stat: out_stat.add_pair( cols_buffer[i][c1ind], int(cols_buffer[i][p1ind]), cols_buffer[i][s1ind], cols_buffer[i][c2ind], int(cols_buffer[i][p2ind]), cols_buffer[i][s2ind], "FF", ) if outstream_high: outstream_high.write( # DD-marked pair: sep.join(mark_split_pair_as_dup(cols_buffer[i])) if mark_multi # pair as is: else line_buffer[i] ) # don't forget terminal newline outstream_high.write("\n") # flush buffers and perform necessary checks here: c1 = [] c2 = [] p1 = [] p2 = [] s1 = [] s2 = [] line_buffer = line_buffer[len(res) :] cols_buffer = cols_buffer[len(res) :] if not stripline: if len(line_buffer) != 0: raise ValueError( "{} lines left in the buffer, ".format(len(line_buffer)) + "should be none;" + "something went terribly wrong" ) break break pairtools-1.0.3/pairtools/lib/headerops.py000066400000000000000000000573201452673171500206570ustar00rootroot00000000000000from collections import defaultdict import sys import copy import itertools import warnings import numpy as np import pandas as pd from .. import __version__ from . import pairsam_format from .fileio import ParseError from .._logging import get_logger logger = get_logger() PAIRS_FORMAT_VERSION = "1.0.0" SEP_COLS = " " SEP_CHROMS = " " COMMENT_CHAR = "#" def get_stream_handlers(instream): # get peekable buffer for the instream readline_f, peek_f = None, None if hasattr(instream, "buffer"): peek_f = instream.buffer.peek readline_f = instream.buffer.readline elif hasattr(instream, "peek"): peek_f = instream.peek readline_f = instream.readline else: raise ValueError("Cannot find the peek() function of the provided stream!") return readline_f, peek_f def get_header(instream, comment_char=COMMENT_CHAR, ignore_warning=False): """Returns a header from the stream and an the reaminder of the stream with the actual data. Parameters ---------- instream : a file object An input stream. comment_char : str The character prepended to header lines (use '@' when parsing sams, '#' when parsing pairsams). ignore_warning : bool If True, then no warning will be generated if header of pairs file is empty. Returns ------- header : list The header lines, stripped of terminal spaces and newline characters. remainder_stream : stream/file-like object Stream with the remaining lines. """ header = [] if not comment_char: raise ValueError("Please, provide a comment char!") comment_byte = comment_char.encode() readline_f, peek_f = get_stream_handlers(instream) current_peek = peek_f(1) while current_peek.startswith(comment_byte): # consuming a line from buffer guarantees # that the remainder of the buffer starts # with the beginning of the line. line = readline_f() if isinstance(line, bytes): line = line.decode() # append line to header, since it does start with header header.append(line.rstrip('\n')) # peek into the remainder of the instream current_peek = peek_f(1) # apparently, next line does not start with the comment # return header and the instream, advanced to the beginning of the data if len(header) == 0 and not ignore_warning: logger.warning( "Headerless input, please, add the header by `pairtools header generate` or `pairtools header transfer`" ) return header, instream def extract_fields(header, field_name, save_rest=False): """ Extract the specified fields from the pairs header and return a list of corresponding values, even if a single field was found. Additionally, can return the list of intact non-matching entries. """ fields = [] rest = [] for l in header: if l.lstrip(COMMENT_CHAR).startswith(field_name + ":"): fields.append(l.split(":", 1)[1].rstrip('\n').lstrip()) elif save_rest: rest.append(l) if save_rest: return fields, rest else: return fields def extract_column_names(header): """ Extract column names from header lines. """ columns = extract_fields(header, "columns") if len(columns) != 0: return columns[0].split(SEP_COLS) else: return [] def validate_cols(stream, columns): """ Validate that the number of columns coincides between stream and columns. Checks only the first line in the pairs stream! Note that it irreversibly removes the header from the stream. Parameters ---------- stream: input stream, body or full .pairs file columns: columns to validate against Returns ------- True if the number of columns is identical between file and columns """ comment_byte = COMMENT_CHAR.encode() readline_f, peek_f = get_stream_handlers(stream) current_peek = peek_f(1) while current_peek.startswith(comment_byte): # consuming a line from buffer guarantees # that the remainder of the buffer starts # with the beginning of the line. line = readline_f() # peek into the remainder of the instream current_peek = peek_f(1) line = readline_f() if isinstance(line, bytes): line = line.decode() ncols_body = len(line.split(pairsam_format.PAIRSAM_SEP)) ncols_reference = ( len(columns) if isinstance(columns, list) else columns.split(SEP_COLS) ) return ncols_body == ncols_reference def validate_header_cols(stream, header): """Validate that the number of columns corresponds between the stream and header""" columns = extract_column_names(header) return validate_cols(stream, header) def is_empty_header(header): if len(header) == 0: return True if not header[0].startswith("##"): return True else: return False def extract_chromsizes(header): """ Extract chromosome sizes from header lines. """ chromsizes_str = extract_fields(header, "chromsize") chromsizes_str = list(zip(*[s.split(SEP_CHROMS) for s in chromsizes_str])) chromsizes = pd.Series(data=chromsizes_str[1], index=chromsizes_str[0]).astype( np.int64 ) return chromsizes def get_chromsizes_from_pysam_header(samheader): """Convert pysam header to pairtools chromosomes dict (ordered by Python default since 3.7). Example of pysam header converted to dict: dict([ ('SQ', [{'SN': 'chr1', 'LN': 248956422}, {'SN': 'chr10', 'LN': 133797422}, {'SN': 'chr11', 'LN': 135086622}, {'SN': 'chr12', 'LN': 133275309}]), ('PG', [{'ID': 'bwa', 'PN': 'bwa', 'VN': '0.7.17-r1188', 'CL': 'bwa mem -t 8 -SP -v1 hg38.fa test_1.1.fastq.gz test_2.1.fastq.gz'}]) ]) """ SQs = samheader.to_dict()["SQ"] chromsizes = [(sq["SN"], int(sq["LN"])) for sq in SQs] return dict(chromsizes) def get_chromsizes_from_file(chroms_file): """ Produce an "enumeration" of chromosomes based on the list of chromosomes """ chrom_sizes = dict() with open(chroms_file, "rt") as f: for line in f: chrom, size = line.strip().split("\t") chrom_sizes[chrom] = int(size) return chrom_sizes def get_chromsizes_from_pysam_header(samheader): """Convert pysam header to pairtools chromosomes (ordered dict). Example of pysam header converted to dict: dict([ ('SQ', [{'SN': 'chr1', 'LN': 248956422}, {'SN': 'chr10', 'LN': 133797422}, {'SN': 'chr11', 'LN': 135086622}, {'SN': 'chr12', 'LN': 133275309}]), ('PG', [{'ID': 'bwa', 'PN': 'bwa', 'VN': '0.7.17-r1188', 'CL': 'bwa mem -t 8 -SP -v1 hg38.fa test_1.1.fastq.gz test_2.1.fastq.gz'}]) ]) """ SQs = samheader.to_dict()["SQ"] chromsizes = [(sq["SN"], int(sq["LN"])) for sq in SQs] return dict(chromsizes) def get_chrom_order(chroms_file, sam_chroms=None): """ Produce an "enumeration" of chromosomes based on the list of chromosomes """ chrom_enum = dict() i = 1 with open(chroms_file, "rt") as f: for line in f: chrom = line.strip().split("\t")[0] if chrom and ((not sam_chroms) or (chrom in sam_chroms)): chrom_enum[chrom] = i i += 1 if sam_chroms: remaining = sorted( chrom for chrom in sam_chroms if chrom not in chrom_enum.keys() ) for chrom in remaining: chrom_enum[chrom] = i i += 1 return chrom_enum def make_standard_pairsheader( assembly=None, chromsizes=None, columns=pairsam_format.COLUMNS, shape="upper triangle", ): header = [] header.append("## pairs format v{}".format(PAIRS_FORMAT_VERSION)) header.append("#shape: {}".format(shape)) header.append( "#genome_assembly: {}".format(assembly if assembly is not None else "unknown") ) if chromsizes is not None: try: chromsizes = chromsizes.items() except AttributeError: pass for chrom, length in chromsizes: header.append("#chromsize: {} {}".format(chrom, length)) header.append("#columns: " + SEP_COLS.join(columns)) return header def subset_chroms_in_pairsheader(header, chrom_subset): new_header = [] for line in header: if line.startswith("#chromsize:"): if line.strip().split()[1] in chrom_subset: new_header.append(line) elif line.startswith("#chromosomes:"): line = SEP_CHROMS.join( ["#chromosomes:"] + [c for c in line.strip().split()[1:] if c in chrom_subset] ) new_header.append(line) else: new_header.append(line) return new_header def insert_samheader(header, samheader): """Insert samheader into header.""" new_header = [l for l in header if not l.startswith("#columns")] if samheader: new_header += ["#samheader: " + l for l in samheader] new_header += [l for l in header if l.startswith("#columns")] return new_header def insert_samheader_pysam(header, samheader): """Insert samheader into header,pysam version.""" new_header = [l for l in header if not l.startswith("#columns")] if samheader: new_header += ["#samheader: " + l for l in str(samheader).strip().split("\n")] new_header += [l for l in header if l.startswith("#columns")] return new_header def mark_header_as_sorted(header): header = copy.deepcopy(header) if is_empty_header(header): raise Exception("Input file is not valid .pairs, has no header or is empty.") if not any([l.startswith("#sorted") for l in header]): if header[0].startswith("##"): header.insert(1, "#sorted: chr1-chr2-pos1-pos2") else: header.insert(0, "#sorted: chr1-chr2-pos1-pos2") for i in range(len(header)): if header[i].startswith("#chromosomes"): chroms = header[i][12:].strip().split(SEP_CHROMS) header[i] = "#chromosomes: {}".format(SEP_CHROMS.join(sorted(chroms))) return header def append_new_pg(header, ID="", PN="", VN=None, CL=None, force=False): header = copy.deepcopy(header) if is_empty_header(header): raise Exception("Input file is not valid .pairs, has no header or is empty.") samheader, other_header = extract_fields(header, "samheader", save_rest=True) new_samheader = _add_pg_to_samheader(samheader, ID, PN, VN, CL, force) new_header = insert_samheader(other_header, new_samheader) return new_header def _update_header_entry(header, field, new_value): header = copy.deepcopy(header) found = False newline = "#{}: {}".format(field, new_value) for i in range(len(header)): if header[i].startswith(COMMENT_CHAR + field): header[i] = newline found = True if not found: if header[-1].startswith("#columns"): header.insert(-1, newline) else: header.append(newline) return header def _add_pg_to_samheader(samheader, ID="", PN="", VN=None, CL=None, force=False): """Append a @PG record to an existing sam header. If the header comes from a merged file and thus has multiple chains of @PG, append the provided PG to all of the chains, adding the numerical suffix of the branch to the ID. Parameters ---------- header : list of str ID, PN, VN, CL : std The keys of a new @PG record. If absent, VN is the version of pairtools and CL is taken from sys.argv. force : bool If True, ignore the inconsistencies among @PG records of the existing header. Returns ------- new_header : list of str A list of new headers lines, stripped of newline characters. """ if VN is None: VN = __version__ if CL is None: CL = " ".join(sys.argv) pre_pg_header = [ line.strip() for line in samheader if line.startswith("@HD") or line.startswith("@SQ") or line.startswith("@RG") ] post_pg_header = [ line.strip() for line in samheader if not line.startswith("@HD") and (not line.startswith("@SQ")) and (not line.startswith("@RG")) and (not line.startswith("@PG")) ] pg_chains = _parse_pg_chains(samheader, force=force) for i, br in enumerate(pg_chains): new_pg = {"ID": ID, "PN": PN, "VN": VN, "CL": CL} new_pg["PP"] = br[-1]["ID"] if len(pg_chains) > 1: new_pg["ID"] = new_pg["ID"] + "-" + str(i + 1) + "." + str(len(br) + 1) new_pg["raw"] = _format_pg(**new_pg) br.append(new_pg) new_header = ( pre_pg_header + [pg["raw"] for br in pg_chains for pg in br] + post_pg_header ) return new_header def _format_pg(**kwargs): out = ["@PG"] + [ "{}:{}".format(field, kwargs[field]) for field in ["ID", "PN", "CL", "PP", "DS", "VN"] if field in kwargs ] return "\t".join(out) def _parse_pg_chains(header, force=False): pg_chains = [] parsed_pgs = [] for l in header: if l.startswith("@PG"): tag_value_pairs = l.strip().split("\t")[1:] if not all(":" in tvp for tvp in tag_value_pairs): warnings.warn( f"Skipping the following @PG line, as it does not follow the SAM header standard of TAG:VALUE: {l}" ) continue parsed_tvp = dict( [tvp.split(":", maxsplit=1) for tvp in tag_value_pairs if ":" in tvp] ) if parsed_tvp: parsed_tvp["raw"] = l.strip() parsed_pgs.append(parsed_tvp) while True: if len(parsed_pgs) == 0: break for i in range(len(parsed_pgs)): pg = parsed_pgs[i] if "PP" not in pg: pg_chains.append([pg]) parsed_pgs.pop(i) break else: matching_chains = [ branch for branch in pg_chains if branch[-1]["ID"] == pg["PP"] ] if len(matching_chains) > 1: if force: matching_chains[0].append(pg) parsed_pgs.pop(i) break else: raise ParseError( "Multiple @PG records with the IDs identical to the PP field of another record:\n" + "\n".join([br[-1]["raw"] for br in matching_chains]) + "\nvs\n" + pg["raw"] ) if len(matching_chains) == 1: matching_chains[0].append(pg) parsed_pgs.pop(i) break if force: pg_chains.append([pg]) parsed_pgs.pop(i) break else: raise ParseError( "Cannot find the parental @PG record for the @PG records:\n" + "\n".join([pg["raw"] for pg in parsed_pgs]) ) return pg_chains def _toposort(dag, tie_breaker): """ Topological sort on a directed acyclic graph Uses Kahn's algorithm with a custom tie-breaking option. The dictionary ``dag`` can be interpreted in two ways: 1. A dependency graph (i.e. arcs point from values to keys), and the generator yields items with no dependences followed by items that depend on previous ones. 2. Arcs point from keys to values, in which case the generator produces a **reverse** topological ordering of the nodes. Parameters ---------- dag: dict of nodes to sets of nodes Directed acyclic graph encoded as a dictionary. tie_breaker: callable Function that picks a tie breaker from a set of nodes with no unprocessed dependences. Returns ------- Generator Notes ----- See . Based in part on activestate recipe: by Sam Denton (MIT licensed). """ # Drop self-edges. for k, v in dag.items(): v.discard(k) # Find all nodes that don't depend on anything # and include them with empty dependencies. indep_nodes = set.union(*dag.values()) - set(dag.keys()) dag.update({node: set() for node in indep_nodes}) while True: if not indep_nodes: break out = tie_breaker(indep_nodes) indep_nodes.discard(out) del dag[out] yield out for node, deps in dag.items(): deps.discard(out) if len(deps) == 0: indep_nodes.add(node) if len(dag) != 0: raise ValueError("Circular dependencies exist: {} ".format(list(dag.items()))) def merge_chrom_lists(*lsts): sentinel = "!NONE!" g = defaultdict(set) for lst in lsts: if len(lst) == 1: g[lst[0]].add(sentinel) for a, b in zip(lst[:-1], lst[1:]): g[b].add(a) if len(g) == 0: return [] chrom_list = list(_toposort(g.copy(), tie_breaker=min)) if sentinel in chrom_list: chrom_list.remove(sentinel) chrom_list = sorted(chrom_list) return chrom_list def _merge_samheaders(samheaders, force=False): # first, append an HD line if it is present in any files # if different lines are present, raise an error HDs = set.union( *[ set(line for line in samheader if line.startswith("@HD")) for samheader in samheaders ] ) if len(HDs) > 1 and not force: raise ParseError("More than one unique @HD line is found in samheaders!") HDs = [list(HDs)[0]] if HDs else [] # second, confirm that all files had the same SQ lines # add SQs from the first file, keeping its order SQs = [ set(line for line in samheader if line.startswith("@SQ")) for samheader in samheaders ] common_SQs = set.intersection(*SQs) SQs_same = all([len(samheader) == len(common_SQs) for samheader in SQs]) if not SQs_same and not (force): raise ParseError("The SQ (sequence) lines of the sam headers are not identical") SQs = [line for line in samheaders[0] if line.startswith("@SQ")] # third, append _all_ PG chains, adding a unique index according to the # provided merging order PGs = [] for i, samheader in enumerate(samheaders): for line in samheader: if line.startswith("@PG"): split_line = line.split("\t") for j in range(len(split_line)): if split_line[j].startswith("ID:") or split_line[j].startswith( "PP:" ): split_line[j] = split_line[j] + "-" + str(i + 1) PGs.append("\t".join(split_line)) # finally, add all residual unique lines rest = sum( [ list( set( line for line in samheader if (not line.startswith("@HD")) and (not line.startswith("@SQ")) and (not line.startswith("@PG")) ) ) for samheader in samheaders ], [], ) new_header = [] new_header += HDs new_header += SQs new_header += PGs new_header += rest return new_header def _merge_pairheaders(pairheaders, force=False): new_header = [] # first, add all keys that are expected to be the same among all headers keys_expected_identical = [ "## pairs format", "#sorted:", "#shape:", "#genome_assembly:", "#columns:", ] keys_orginal = [l.split()[0] for header in pairheaders for l in header] for k in keys_expected_identical: lines = [[l for l in header if l.startswith(k)] for header in pairheaders] same = all([l == lines[0] for l in lines]) if not (same or force): raise ParseError( "The following header entries must be the same " "the merged files: {}".format(k) ) new_header += lines[0] # second, merge and add the chromsizes fields. chrom_lists = [] chromsizes = {} for header in pairheaders: chromlist = [] for line in header: if line.startswith("#chromsize:"): chrom, length = line.strip("#chromsize:").split() chromsizes[chrom] = length chromlist.append(chrom) chrom_lists.append(chromlist) chroms_merged = merge_chrom_lists(*chrom_lists) if "#chromosomes:" in keys_orginal: chrom_line = "#chromosomes: {}".format(" ".join(chroms_merged)) new_header.extend([chrom_line]) chromsize_lines = [ "#chromsize: {} {}".format(chrom, chromsizes[chrom]) for chrom in chroms_merged ] new_header.extend(chromsize_lines) # finally, add a sorted list of other unique fields other_lines = sorted( set( l for h in pairheaders for l in h if not any( l.startswith(k) for k in keys_expected_identical + ["#chromosomes", "#chromsize"] ) ) ) if other_lines: if new_header[-1].startswith("#columns"): new_header = new_header[:-1] + other_lines + [new_header[-1]] else: new_header = new_header + other_lines return new_header def all_same_columns(pairheaders): key_target = "#columns:" lines = [[l for l in header if l.startswith(key_target)] for header in pairheaders] all_same = all([l == lines[0] for l in lines]) return all_same def merge_headers(headers, force=False): samheaders, pairheaders = zip( *[extract_fields(h, "samheader", save_rest=True) for h in headers] ) # HD headers contain information that becomes invalid after processing # with distiller. Do not print into the output. new_pairheader = _merge_pairheaders(pairheaders, force=False) new_samheader = _merge_samheaders(samheaders, force=force) new_header = insert_samheader(new_pairheader, new_samheader) return new_header def append_columns(header, columns): """ Appends columns to the header, separated by SEP_COLS Parameters ---------- header: Previous header columns: List of column names to append Returns ------- Modified header (appended columns to the field "#columns") """ for i in range(len(header)): if header[i].startswith("#columns: "): header[i] += SEP_COLS + SEP_COLS.join(columns) return header def get_colnames(header): """ Get column names of the header, separated by SEP_COLS Parameters ---------- header: Previous header Returns ------- List of column names """ for i in range(len(header)): if header[i].startswith("#columns: "): columns = header[i].split(SEP_COLS)[1:] return columns return [] def set_columns(header, columns): """ Set columns to the header, separated by SEP_COLS Parameters ---------- header: Previous header columns: List of column names to append Returns ------- Modified header (appended columns to the field "#columns") """ for i in range(len(header)): if header[i].startswith("#columns:"): header[i] = "#columns:" + SEP_COLS + SEP_COLS.join(columns) return header # def _guess_genome_assembly(samheader): # PG = [l for l in samheader if l.startswith('@PG') and '\tID:bwa' in l][0] # CL = [field for field in PG.split('\t') if field.startswith('CL:')] # # return ga pairtools-1.0.3/pairtools/lib/pairsam_format.py000066400000000000000000000022271452673171500217050ustar00rootroot00000000000000PAIRSAM_FORMAT_VERSION = "1.0.0" PAIRSAM_SEP = "\t" PAIRSAM_SEP_ESCAPE = r"\t" SAM_SEP = "\031" SAM_SEP_ESCAPE = r"\031" INTER_SAM_SEP = "\031NEXT_SAM\031" COL_READID = 0 COL_C1 = 1 COL_P1 = 2 COL_C2 = 3 COL_P2 = 4 COL_S1 = 5 COL_S2 = 6 COL_PTYPE = 7 COL_SAM1 = 8 COL_SAM2 = 9 COLUMNS = [ "readID", "chrom1", "pos1", "chrom2", "pos2", "strand1", "strand2", "pair_type", "sam1", "sam2", "walk_pair_index", "walk_pair_type", ] # Required columns for formats: COLUMNS_PAIRSAM = [ "readID", "chrom1", "pos1", "chrom2", "pos2", "strand1", "strand2", "pair_type", "sam1", "sam2", ] COLUMNS_PAIRS = [ "readID", "chrom1", "pos1", "chrom2", "pos2", "strand1", "strand2", "pair_type", ] UNMAPPED_CHROM = "!" UNMAPPED_POS = 0 UNMAPPED_STRAND = "-" UNANNOTATED_RFRAG = -1 EXTRA_COLUMNS = [ "mapq", "pos5", "pos3", "cigar", "read_len", "matched_bp", "algn_ref_span", "algn_read_span", "dist_to_5", "dist_to_3", "seq", "mismatches", # Format: "{ref_letter}:{mut_letter}:{phred}:{ref_position}:{read_position}" ] pairtools-1.0.3/pairtools/lib/parse.py000066400000000000000000001560061452673171500200200ustar00rootroot00000000000000""" Set of functions used for pairsam parse, migrated from pairtools/pairtools_parse.py Parse operates with several basic data types: I. pysam-based: 1. **sam entry** is a continuous aligned fragment of the read mapped to certain location in the genome. Because we read sam entries from .sam/.bam files automatically with modified pysam, each sam entry is in fact special AlignedSegmentPairtoolized Cython object that has alignment attributes and can be easily accessed from Python. Sam entries are gathered into reads by `push_pysam` function. 2. **read** is a collection of sam entries corresponding to a single Hi-C molecule. It is represented by three variables: readID, sams1 and sams2, which keep left and right sam entries, correspondingly. Read is populated from the stream of sam entries on a fly, the process happenning in `streaming_classify` function. II. python-based data types are parsed from pysam-based ones: 1. **alignment** is a continuous aligned fragment represented as dictionary with relevant fields, such as "chrom", "pos5", "pos3", "strand", "type", etc. `empty_alignment` creates empty alignment, `parse_pysam_entry` create new alignments from pysam entries, `mask_alignment` clears some fields of the alignment to match the default "unmapped" state. `flip_alignment`, `flip_orientation` and `flip_ends` are useful functions that help to orient alignments. 2. **pair** of two alignments is represented by three variables: algn1 (left alignment), algn2 (right alignment) and pair_index. Pairs are obtained by `parse_read` or `parse2_read`. Additionally, these functions also output all alignments for each side. """ from . import pairsam_format from .parse_pysam import get_mismatches_c def streaming_classify( instream, outstream, chromosomes, out_alignments_stream, out_stat, **kwargs ): """ Parse input sam file into individual reads, pairs, walks, then write to the outstream(s). Additional kwargs: min_mapq, drop_readid, drop_seq, drop_sam, add_pair_index, add_columns, # comma-separated list report_alignment_end, max_inter_align_gap parse: max_molecule_size walks_policy parse2: single_end: indicator whether single-end data is provided report_position, one of: "outer", "junction", "read", "walk" report_orientation, one of: "pair", "junction", "read", "walk" dedup_max_mismatch: For intramolecular deduplication max_insert_size: maximum insert size when searching for overlapping ends of R1 and R2 expand: perform combinatorial expansion or not max_expansion_depth: maximum expansion depth, works in combination with expand=True """ parse2 = kwargs.get("parse2", False) ### Store output parameters in a usable form: chrom_enum = dict( zip( [pairsam_format.UNMAPPED_CHROM] + list(chromosomes), range(len(chromosomes) + 1), ) ) add_columns = kwargs.get("add_columns", "") if isinstance(add_columns, str) and len(add_columns) > 0: add_columns = add_columns.split(",") elif len(add_columns) == 0: add_columns = [] elif not isinstance(add_columns, list): raise ValueError(f"Unknown type of add_columns: {type(add_columns)}") sam_tags = [col for col in add_columns if len(col) == 2 and col.isupper()] store_seq = "seq" in add_columns ### Compile readID transformation: readID_transform = kwargs.get("readid_transform", None) if readID_transform is not None: readID_transform = compile(readID_transform, "", "eval") ### Prepare for iterative parsing of the input stream # Each read is represented by readID, sams1 (left alignments) and sams2 (right alignments) readID = "" # Read id of the current read sams1 = [] # Placeholder for the left alignments sams2 = [] # Placeholder for the right alignments # Each read is comprised of multiple alignments, or sam entries: sam_entry = "" # Placeholder for each aligned segment # Keep the id of the previous sam entry to detect when the read is completely populated: prev_readID = "" # Placeholder for the read id ### Iterate over input pysam: instream = iter(instream) while sam_entry is not None: sam_entry = next(instream, None) readID = sam_entry.query_name if sam_entry else None if readID_transform is not None and readID is not None: readID = eval(readID_transform) # Read is fully populated, then parse and write: if not (sam_entry) or ((readID != prev_readID) and prev_readID): ### Parse if not parse2: # regular parser: pairstream, all_algns1, all_algns2 = parse_read( sams1, sams2, min_mapq=kwargs["min_mapq"], max_molecule_size=kwargs["max_molecule_size"], max_inter_align_gap=kwargs["max_inter_align_gap"], walks_policy=kwargs["walks_policy"], sam_tags=sam_tags, store_seq=store_seq, report_mismatches=True if "mismatches" in add_columns else False, ) else: # parse2 parser: pairstream, all_algns1, all_algns2 = parse2_read( sams1, sams2, min_mapq=kwargs["min_mapq"], max_inter_align_gap=kwargs["max_inter_align_gap"], max_insert_size=kwargs.get("max_insert_size", 500), single_end=kwargs["single_end"], report_position=kwargs["report_position"], report_orientation=kwargs["report_orientation"], sam_tags=sam_tags, dedup_max_mismatch=kwargs["dedup_max_mismatch"], store_seq=store_seq, expand=kwargs["expand"], max_expansion_depth=kwargs["max_expansion_depth"], report_mismatches=True if "mismatches" in add_columns else False, ) ### Write: read_has_alignments = False for (algn1, algn2, pair_index) in pairstream: read_has_alignments = True # Alignment end defaults to 5' if report_alignment_end is unspecified: if kwargs.get("report_alignment_end", "5") == "5": algn1["pos"] = algn1["pos5"] algn2["pos"] = algn2["pos5"] else: algn1["pos"] = algn1["pos3"] algn2["pos"] = algn2["pos3"] if kwargs["flip"]: flip_pair = not check_pair_order(algn1, algn2, chrom_enum) if flip_pair: algn1, algn2 = algn2, algn1 sams1, sams2 = sams2, sams1 write_pairsam( algn1, algn2, readID=prev_readID, pair_index=pair_index, sams1=sams1, sams2=sams2, out_file=outstream, drop_readid=kwargs["drop_readid"], drop_seq=kwargs["drop_seq"], drop_sam=kwargs["drop_sam"], add_pair_index=kwargs["add_pair_index"], add_columns=add_columns, ) # add a pair to PairCounter for stats output: if out_stat: out_stat.add_pair( algn1["chrom"], int(algn1["pos"]), algn1["strand"], algn2["chrom"], int(algn2["pos"]), algn2["strand"], algn1["type"] + algn2["type"], ) # write all alignments: if out_alignments_stream and read_has_alignments: write_all_algnments( prev_readID, all_algns1, all_algns2, out_alignments_stream ) # Empty read after writing: sams1.clear() sams2.clear() if sam_entry is not None: push_pysam(sam_entry, sams1, sams2) prev_readID = readID ############################ ### Alignment utilities: ### ############################ def push_pysam(sam_entry, sams1, sams2): """Parse pysam AlignedSegment (sam) into pairtools sams entry""" flag = sam_entry.flag if (flag & 0x40) != 0: sams1.append(sam_entry) # left read, or first read in a pair else: sams2.append(sam_entry) # right read, or mate pair return def empty_alignment(): return { "chrom": pairsam_format.UNMAPPED_CHROM, "pos5": pairsam_format.UNMAPPED_POS, "pos3": pairsam_format.UNMAPPED_POS, "pos": pairsam_format.UNMAPPED_POS, "strand": pairsam_format.UNMAPPED_STRAND, "dist_to_5": 0, "dist_to_3": 0, "mapq": 0, "is_unique": False, "is_mapped": False, "is_linear": True, "cigar": "*", "algn_ref_span": 0, "algn_read_span": 0, "matched_bp": 0, "clip3_ref": 0, "clip5_ref": 0, "read_len": 0, "type": "N", "mismatches": "", } def parse_pysam_entry( sam, min_mapq, sam_tags=None, store_seq=False, report_3_alignment_end=False, report_mismatches=False, ): """Parse alignments from pysam AlignedSegment entry :param sam: input pysam AlignedSegment entry :param min_mapq: minimal MAPQ to consider as a proper alignment :param sam_tags: list of sam tags to store :param store_seq: if True, the sequence will be parsed and stored in the output :param report_3_alignment_end: if True, 3'-end of alignment will be reported as position (will be deprecated) :param report_mismatches: if True, mismatches will be parsed from MD field :return: parsed aligned entry (dictionary) """ flag = sam.flag is_mapped = (flag & 0x04) == 0 mapq = sam.mapq is_unique = sam.is_unique(min_mapq) is_linear = sam.is_linear cigar = sam.cigar_dict if is_mapped: if (flag & 0x10) == 0: strand = "+" dist_to_5 = cigar["clip5_ref"] dist_to_3 = cigar["clip3_ref"] else: strand = "-" dist_to_5 = cigar["clip3_ref"] dist_to_3 = cigar["clip5_ref"] if is_unique: chrom = sam.reference_name if strand == "+": # Note that pysam output is zero-based, thus add +1: pos5 = sam.reference_start + 1 pos3 = sam.reference_start + cigar["algn_ref_span"] else: pos5 = sam.reference_start + cigar["algn_ref_span"] # Note that pysam output is zero-based, thus add +1: pos3 = sam.reference_start + 1 # Get number of matches: if not sam.has_tag("MD") or not report_mismatches: mismatches = "" else: seq = sam.query_sequence.upper() quals = sam.query_qualities aligned_pairs = sam.get_aligned_pairs(with_seq=True, matches_only=True) mismatches = get_mismatches_c(seq, quals, aligned_pairs) mismatches = ",".join( [ f"{original}:{mutated}:{phred}:{ref}:{read}" for original, mutated, phred, ref, read in mismatches ] ) # n_matches = len(aligned_pairs) else: chrom = pairsam_format.UNMAPPED_CHROM strand = pairsam_format.UNMAPPED_STRAND pos5 = pairsam_format.UNMAPPED_POS pos3 = pairsam_format.UNMAPPED_POS mismatches = "" else: chrom = pairsam_format.UNMAPPED_CHROM strand = pairsam_format.UNMAPPED_STRAND pos5 = pairsam_format.UNMAPPED_POS pos3 = pairsam_format.UNMAPPED_POS dist_to_5 = 0 dist_to_3 = 0 mismatches = "" algn = { "chrom": chrom, "pos5": pos5, "pos3": pos3, "strand": strand, "mapq": mapq, "is_mapped": is_mapped, "is_unique": is_unique, "is_linear": is_linear, "dist_to_5": dist_to_5, "dist_to_3": dist_to_3, "type": ("N" if not is_mapped else ("M" if not is_unique else "U")), "mismatches": mismatches, } algn.update(cigar) algn["pos"] = algn["pos3"] if report_3_alignment_end else algn["pos5"] ### Add tags to the alignment: if sam_tags: tags = sam.tags for tag in sam_tags: algn[tag] = "" for col, value in tags: for tag in sam_tags: if col == tag: algn[tag] = value continue if store_seq: algn["seq"] = sam.seq return algn def mask_alignment(algn): """ Reset the coordinates of an alignment. """ algn["chrom"] = pairsam_format.UNMAPPED_CHROM algn["pos5"] = pairsam_format.UNMAPPED_POS algn["pos3"] = pairsam_format.UNMAPPED_POS algn["pos"] = pairsam_format.UNMAPPED_POS algn["strand"] = pairsam_format.UNMAPPED_STRAND return algn def flip_alignment(hic_algn): """ Flip a single alignment as if it was sequenced from the opposite end :param hic_algn: Alignment to be modified :return: """ hic_algn = dict(hic_algn) # overwrite the variable with the copy of dictionary hic_algn["pos5"], hic_algn["pos3"] = hic_algn["pos3"], hic_algn["pos5"] hic_algn["strand"] = "+" if (hic_algn["strand"] == "-") else "-" return hic_algn def flip_orientation(hic_algn): """ Flip orientation of a single alignment :param hic_algn: Alignment to be modified :return: """ hic_algn = dict(hic_algn) # overwrite the variable with the copy of dictionary hic_algn["strand"] = "+" if (hic_algn["strand"] == "-") else "-" return hic_algn def flip_position(hic_algn): """ Flip ends of a single alignment :param hic_algn: Alignment to be modified :return: """ hic_algn = dict(hic_algn) # overwrite the variable with the copy of dictionary hic_algn["pos5"], hic_algn["pos3"] = hic_algn["pos3"], hic_algn["pos5"] return hic_algn #################### ### Parsing utilities: #################### def parse_read( sams1, sams2, min_mapq, max_molecule_size, max_inter_align_gap, walks_policy, sam_tags, store_seq, report_mismatches=False, ): """ Parse sam entries corresponding to a single read (or Hi-C molecule) into pairs of alignments. Returns ------- stream: iterator Each element is a triplet: (algn1, aldn2, pair_index) algn1, algn2: dict Two alignments selected for reporting as a Hi-C pair. pair_index pair index of a pair in the molecule. algns1, algns2: lists All alignments, sorted according to their order in on a read. """ # Check if there is at least one sam entry per side: if walks_policy == "all": is_empty = (len(sams1) == 0 and len(sams2) < 2) or ( len(sams2) == 0 and len(sams1) < 2 ) else: is_empty = (len(sams1) == 0) or (len(sams2) == 0) if is_empty: algns1 = [empty_alignment()] algns2 = [empty_alignment()] algns1[0]["type"] = "X" algns2[0]["type"] = "X" pair_index = (1, "R1-2") return iter([(algns1[0], algns2[0], pair_index)]), algns1, algns2 # Generate a sorted, gap-filled list of all alignments algns1 = [ parse_pysam_entry( sam, min_mapq, sam_tags, store_seq, report_mismatches=report_mismatches ) for sam in sams1 ] algns2 = [ parse_pysam_entry( sam, min_mapq, sam_tags, store_seq, report_mismatches=report_mismatches ) for sam in sams2 ] if len(algns1) > 0: algns1 = sorted(algns1, key=lambda algn: algn["dist_to_5"]) else: algns1 = [empty_alignment()] # Empty alignment dummy if len(algns2) > 0: algns2 = sorted(algns2, key=lambda algn: algn["dist_to_5"]) else: algns2 = [empty_alignment()] # Empty alignment dummy if max_inter_align_gap is not None: _convert_gaps_into_alignments(algns1, max_inter_align_gap) _convert_gaps_into_alignments(algns2, max_inter_align_gap) # By default, assume each molecule is a single pair with single unconfirmed pair: hic_algn1 = algns1[0] hic_algn2 = algns2[0] pair_index = (1, "R1-2") # Define the type of alignment on each side: is_chimeric_1 = len(algns1) > 1 is_chimeric_2 = len(algns2) > 1 # Parse chimeras if is_chimeric_1 or is_chimeric_2: # Report all the linear alignments in a read pair if walks_policy == "all": # Report linear alignments after deduplication of complex walks with default settings: return ( parse_complex_walk( algns1, algns2, max_molecule_size, report_position="outer", report_orientation="pair", ), algns1, algns2, ) elif walks_policy in ["mask", "5any", "5unique", "3any", "3unique"]: # Report only two alignments for a read pair rescued_linear_side = rescue_walk(algns1, algns2, max_molecule_size) # Walk was rescued as a simple walk: if rescued_linear_side is not None: pair_index = (1, "R1" if rescued_linear_side == 1 else "R2") # Walk is unrescuable: else: if walks_policy == "mask": hic_algn1 = mask_alignment(dict(hic_algn1)) hic_algn2 = mask_alignment(dict(hic_algn2)) hic_algn1["type"] = "W" hic_algn2["type"] = "W" elif walks_policy == "5any": hic_algn1 = algns1[0] hic_algn2 = algns2[0] elif walks_policy == "5unique": hic_algn1 = algns1[0] for algn in algns1: if algn["is_mapped"] and algn["is_unique"]: hic_algn1 = algn break hic_algn2 = algns2[0] for algn in algns2: if algn["is_mapped"] and algn["is_unique"]: hic_algn2 = algn break elif walks_policy == "3any": hic_algn1 = algns1[-1] hic_algn2 = algns2[-1] elif walks_policy == "3unique": hic_algn1 = algns1[-1] for algn in algns1[::-1]: if algn["is_mapped"] and algn["is_unique"]: hic_algn1 = algn break hic_algn2 = algns2[-1] for algn in algns2[::-1]: if algn["is_mapped"] and algn["is_unique"]: hic_algn2 = algn break # lower-case reported walks on the chimeric side if walks_policy != "mask": if is_chimeric_1: hic_algn1 = dict(hic_algn1) hic_algn1["type"] = hic_algn1["type"].lower() if is_chimeric_2: hic_algn2 = dict(hic_algn2) hic_algn2["type"] = hic_algn2["type"].lower() else: raise ValueError(f"Walks policy {walks_policy} is not supported.") return iter([(hic_algn1, hic_algn2, pair_index)]), algns1, algns2 def parse2_read( sams1, sams2, min_mapq, max_inter_align_gap, max_insert_size, single_end, report_position="outer", report_orientation="pair", sam_tags=[], dedup_max_mismatch=3, store_seq=False, report_mismatches=False, expand=False, max_expansion_depth=None, ): """ Parse sam entries corresponding to a Hi-C molecule into alignments in parse2 mode for a Hi-C pair. Returns ------- stream: iterator Each element is a triplet: (algn1, aldn2, pair_index) algn1, algn2: dict Two alignments selected for reporting as a Hi-C pair. pair_index pair index of a pair in the molecule, a tuple: (1, "R1-2") algns1, algns2: lists All alignments, sorted according to their order in on a read. """ # Single-end mode: if single_end: # Generate a sorted, gap-filled list of all alignments algns1 = [ parse_pysam_entry( sam, min_mapq, sam_tags, store_seq, report_mismatches=report_mismatches ) for sam in sams2 # note sams2, that's how these reads are typically parsed ] algns1 = sorted(algns1, key=lambda algn: algn["dist_to_5"]) if max_inter_align_gap is not None: _convert_gaps_into_alignments(algns1, max_inter_align_gap) algns2 = [empty_alignment()] # Empty alignment dummy if len(algns1) > 1: # Look for ligation pair, and report linear alignments after deduplication of complex walks: # (Note that coordinate system for single-end reads does not change the behavior) output = parse_complex_walk( algns1, algns2, max_insert_size, report_position, report_orientation, dedup_max_mismatch, ) output = [x for x in output if x[-1][-1] != "R1-2"] return (output, algns1, algns2) elif len(algns1) == 1: # If no additional information, we assume each molecule is a single ligation with single unconfirmed pair: algn2 = empty_alignment() pair_index = (1, "R1") return iter([(algns1[0], algn2, pair_index)]), algns1, algns2 else: # If no additional information, we assume each molecule is a single ligation with single unconfirmed pair: algn1 = empty_alignment() algn2 = empty_alignment() pair_index = (1, "R1") return iter([(algn1, algn2, pair_index)]), algns1, algns2 # Paired-end mode: else: # Check if there is at least one SAM entry per side: is_empty = (len(sams1) == 0 and len(sams2) < 2) or ( len(sams2) == 0 and len(sams1) < 2 ) if is_empty: algns1 = [empty_alignment()] algns2 = [empty_alignment()] algns1[0]["type"] = "X" algns2[0]["type"] = "X" pair_index = (1, "R1-2") return iter([(algns1[0], algns2[0], pair_index)]), algns1, algns2 # Generate a sorted, gap-filled list of all alignments algns1 = [ parse_pysam_entry( sam, min_mapq, sam_tags, store_seq, report_mismatches=report_mismatches ) for sam in sams1 ] algns2 = [ parse_pysam_entry( sam, min_mapq, sam_tags, store_seq, report_mismatches=report_mismatches ) for sam in sams2 ] # Sort alignments by the distance to the 5'-end: if len(algns1) > 0: algns1 = sorted(algns1, key=lambda algn: algn["dist_to_5"]) else: algns1 = [empty_alignment()] # Empty alignment dummy if len(algns2) > 0: algns2 = sorted(algns2, key=lambda algn: algn["dist_to_5"]) else: algns2 = [empty_alignment()] # Empty alignment dummy # Convert alignment gaps to alignments: if max_inter_align_gap is not None: _convert_gaps_into_alignments(algns1, max_inter_align_gap) _convert_gaps_into_alignments(algns2, max_inter_align_gap) is_chimeric_1 = len(algns1) > 1 is_chimeric_2 = len(algns2) > 1 if is_chimeric_1 or is_chimeric_2: # If at least one side is chimera, we must look for ligation pair, and # report linear alignments after deduplication of complex walks: return ( parse_complex_walk( algns1, algns2, max_insert_size, report_position, report_orientation, dedup_max_mismatch, expand, max_expansion_depth, ), algns1, algns2, ) else: # If no additional information, we assume each molecule is a single ligation with single unconfirmed pair: algn2 = algns2[0] if report_orientation == "walk": algn2 = flip_orientation(algn2) if report_position == "walk": algn2 = flip_position(algn2) pair_index = (1, "R1-2") return iter([(algns1[0], algn2, pair_index)]), algns1, algns2 #################### ### Walks utilities: #################### def rescue_walk(algns1, algns2, max_molecule_size): """ Rescue a single ligation that appears as a walk. Checks if a molecule with three alignments could be formed via a single ligation between two fragments, where one fragment was so long that it got sequenced on both sides. Uses three criteria: 1) the 3'-end alignment on one side maps to the same chromosome as the alignment fully covering the other side (i.e. the linear alignment) 2) the two alignments point towards each other on the chromosome 3) the distance between the outer ends of the two alignments is below the specified threshold. Alternatively, a single ligation get rescued when the 3' sub-alignment maps to multiple locations or no locations at all. In the case of a successful rescue, tags the 3' sub-alignment with type='X' and the linear alignment on the other side with type='R'. Returns ------- linear_side : int If the case of a successful rescue, returns the index of the side with a linear alignment. """ # If both sides have one alignment or none, no need to rescue! n_algns1 = len(algns1) n_algns2 = len(algns2) if (n_algns1 <= 1) and (n_algns2 <= 1): return None # Can rescue only pairs with one chimeric alignment with two parts. if not ( ((n_algns1 == 1) and (n_algns2 == 2)) or ((n_algns1 == 2) and (n_algns2 == 1)) ): return None first_read_is_chimeric = n_algns1 > 1 chim5_algn = algns1[0] if first_read_is_chimeric else algns2[0] chim3_algn = algns1[1] if first_read_is_chimeric else algns2[1] linear_algn = algns2[0] if first_read_is_chimeric else algns1[0] # the linear alignment must be uniquely mapped if not (linear_algn["is_mapped"] and linear_algn["is_unique"]): return None can_rescue = True # we automatically rescue chimeric alignments with null and non-unique # alignments at the 3' side if chim3_algn["is_mapped"] and chim5_algn["is_unique"]: # 1) in rescued walks, the 3' alignment of the chimeric alignment must be on # the same chromosome as the linear alignment on the opposite side of the # molecule can_rescue &= chim3_algn["chrom"] == linear_algn["chrom"] # 2) in rescued walks, the 3' supplemental alignment of the chimeric # alignment and the linear alignment on the opposite side must point # towards each other can_rescue &= chim3_algn["strand"] != linear_algn["strand"] if linear_algn["strand"] == "+": can_rescue &= linear_algn["pos5"] < chim3_algn["pos5"] else: can_rescue &= linear_algn["pos5"] > chim3_algn["pos5"] # 3) in single ligations appearing as walks, we can infer the size of # the molecule and this size must be smaller than the maximal size of # Hi-C molecules after the size selection step of the Hi-C protocol if linear_algn["strand"] == "+": molecule_size = ( chim3_algn["pos5"] - linear_algn["pos5"] + chim3_algn["dist_to_5"] + linear_algn["dist_to_5"] ) else: molecule_size = ( linear_algn["pos5"] - chim3_algn["pos5"] + chim3_algn["dist_to_5"] + linear_algn["dist_to_5"] ) can_rescue &= molecule_size <= max_molecule_size if can_rescue: # changing the type of the 3' alignment on side 1, does not show up in the output: if first_read_is_chimeric: algns1[1]["type"] = "X" algns2[0]["type"] = "R" return 1 # changing the type of the 3' alignment on side 2, does not show up in the output: else: algns1[0]["type"] = "R" algns2[1]["type"] = "X" return 2 else: return None def _convert_gaps_into_alignments(sorted_algns, max_inter_align_gap): """ Inplace conversion of gaps longer than max_inter_align_gap into alignments """ if (len(sorted_algns) == 1) and (not sorted_algns[0]["is_mapped"]): return last_5_pos = 0 for i in range(len(sorted_algns)): algn = sorted_algns[i] if algn["dist_to_5"] - last_5_pos > max_inter_align_gap: new_algn = empty_alignment() new_algn["dist_to_5"] = last_5_pos new_algn["algn_read_span"] = algn["dist_to_5"] - last_5_pos new_algn["read_len"] = algn["read_len"] new_algn["dist_to_3"] = new_algn["read_len"] - algn["dist_to_5"] last_5_pos = algn["dist_to_5"] + algn["algn_read_span"] sorted_algns.insert(i, new_algn) i += 2 else: last_5_pos = max(last_5_pos, algn["dist_to_5"] + algn["algn_read_span"]) i += 1 def parse_complex_walk( algns1, algns2, max_insert_size, report_position, report_orientation, dedup_max_mismatch=3, expand=False, max_expansion_depth=None, ): """ Parse a set of ligations that appear as a complex walk. This procedure is equivalent to intramolecular deduplication that preserved pair order in a walk. :param algns1: List of sequential lefts alignments :param algns2: List of sequential right alignments :param max_insert_size: maximum insert size when searching for overlapping ends of R1 and R2 :param report_position: one of "outer", "junction", "read", "walk"; sets pos5 and pos3 :param report_orientation: one of "pair", "junction", "read", "walk"; sets strand :param dedup_max_mismatch: allowed mismatch between intramolecular alignments to detect readthrough duplicates :param expand: perform combinatorial expansion of pairs or not :param max_expansion_depth: maximum depth (number of segments separating pair). All by default. :return: iterator with parsed pairs **Intramolecular deduplication** Forward read (left): right read (right): 5'------------------------->3' 3'<--------------------------5' algns1 algns2 <5---3><5---3><5---3><5---3> <3---5><3---5><3---5><3---5> l0 l1 l2 l3 r3 r2 r1 r0 Alignment - bwa mem reported hit or alignment after gaps conversion. Left and right alignments (algns1: [l0, l1, l2, l3], algns2: [r0, r1, r2, r3]) - alignments on left and right reads reported from 5' to 3' orientation. Intramolecular deduplication consists of two steps: I. iterative search of overlapping alignment pairs (aka overlap), II. if no overlaps or search not possible (less than 2 alignments on either sides), search for overlap of end alignments (aka partial overlap). III. report pairs before the overlap, deduplicated pairs of overlap and pairs after that. Iterative search of overlap is in fact scanning of the right read pairs for the hit with the 3'-most pair of the left read: 1. Initialize. Start from 3' of left and right reads. Set `current_left_pair` and `current_right_pair` pointers 2. Initial compare. Compare pairs l2-l3 and r3-r2 by `pairs_overlap`. If successful, we found the overlap, go to reporting. If unsuccessful, continue search. 3. Increment. Shift `current_right_pair` pointer by one (e.g., take the pair r2-r1). 4. Check. Check that this pair can form a potential overlap with left alignments: the number of pairs downstream from l2-l3 on left read should not be less than the number of pairs upstream from r2-r1 on right read. If overlap cannot be formed, no other overlap in this complex walk is possible, safely exit. If the potential overlap can be formed, continue comparison. 5. Compare. Compare the current pair of pairs on left and right reads. If comparison fails, go to step 3. If comparison is successful, go to 6. 6. Verify. Check that downstream pairs on the left read overlap with the upstream pairs on the right read. If yes, exit. If not, we do not have an overlap, go to step 3. """ AVAILABLE_REPORT_POSITION = ["outer", "junction", "read", "walk"] assert report_position in AVAILABLE_REPORT_POSITION, ( f"Cannot report position {report_position}, as it is not implemented" f'Available choices are: {", ".join(AVAILABLE_REPORT_POSITION)}' ) AVAILABLE_REPORT_ORIENTATION = ["pair", "junction", "read", "walk"] assert report_orientation in AVAILABLE_REPORT_ORIENTATION, ( f"Cannot report orientation {report_orientation}, as it is not implemented" f'Available choices are: {", ".join(AVAILABLE_REPORT_ORIENTATION)}' ) output_pairs = [] # Initialize (step 1). n_algns1 = len(algns1) n_algns2 = len(algns2) current_left_pair = current_right_pair = 1 remaining_left_pairs = ( n_algns1 - 1 ) # Number of possible pairs remaining on left read remaining_right_pairs = ( n_algns2 - 1 ) # Number of possible pairs remaining on right read checked_right_pairs = ( 0 # Number of checked pairs on right read (from the end of read) ) is_overlap = False # I. Iterative search of overlap, at least two alignments on each side: if (n_algns1 >= 2) and (n_algns2 >= 2): # Iteration includes check (step 4): while (remaining_left_pairs > checked_right_pairs) and ( remaining_right_pairs > 0 ): pair1 = (algns1[-current_left_pair - 1], algns1[-current_left_pair]) pair2 = (algns2[-current_right_pair - 1], algns2[-current_right_pair]) # Compare (initial or not, step 2 or 5): is_overlap = pairs_overlap( pair1, pair2, dedup_max_mismatch=dedup_max_mismatch ) if is_overlap: last_idx_left_temp = current_left_pair last_idx_right_temp = current_right_pair checked_right_temp = checked_right_pairs # Verify (step 6): while is_overlap and (checked_right_temp > 0): last_idx_left_temp += 1 last_idx_right_temp -= 1 pair1 = ( algns1[-last_idx_left_temp - 1], algns1[-last_idx_left_temp], ) pair2 = ( algns2[-last_idx_right_temp - 1], algns2[-last_idx_right_temp], ) is_overlap &= pairs_overlap( pair1, pair2, dedup_max_mismatch=dedup_max_mismatch ) checked_right_temp -= 1 if is_overlap: # exit current_right_pair += 1 break # Increment pointers (step 3) current_right_pair += 1 checked_right_pairs += 1 remaining_right_pairs -= 1 # No overlap found, roll the current_idx_right back to the initial value: if not is_overlap: current_right_pair = 1 # II. Search of partial overlap if there are less than 2 alignments at either sides, or no overlaps found if current_right_pair == 1: last_reported_alignment_left = last_reported_alignment_right = 1 if partial_overlap( algns1[-1], algns2[-1], max_insert_size=max_insert_size, dedup_max_mismatch=dedup_max_mismatch, ): if ( n_algns1 >= 2 ): # single alignment on right read and multiple alignments on left pair_index = (len(algns1) - 1, "R1") output_pairs.append( format_pair( algns1[-2], algns1[-1], pair_index=pair_index, algn2_pos3=algns2[-1]["pos5"], report_position=report_position, report_orientation=report_orientation, ) ) last_reported_alignment_left = 2 # set the pointer for reporting if ( n_algns2 >= 2 ): # single alignment on left read and multiple alignments on right pair_index = (len(algns1), "R2") output_pairs.append( format_pair( algns2[-1], algns2[-2], pair_index=pair_index, algn1_pos3=algns1[-1]["pos5"], report_position=report_position, report_orientation=report_orientation, ) ) last_reported_alignment_right = 2 # set the pointer for reporting # Note that if n_algns1==n_algns2==1 and alignments overlap, then we don't need to check, # it's a non-ligated DNA fragment that we don't report. else: # end alignments do not overlap, report regular pair: pair_index = (len(algns1), "R1-2") output_pairs.append( format_pair( algns1[-1], algns2[-1], pair_index=pair_index, report_position=report_position, report_orientation=report_orientation, ) ) else: # there was an overlap, set some pointers: last_reported_alignment_left = ( last_reported_alignment_right ) = current_right_pair # III. Report all remaining alignments. # Report all unique alignments on left read (sequential): for i in range(0, n_algns1 - last_reported_alignment_left): pair_index = (i + 1, "R1") output_pairs.append( format_pair( algns1[i], algns1[i + 1], pair_index=pair_index, report_position=report_position, report_orientation=report_orientation, ) ) # Report the pairs where both left alignments overlap right: for i_overlapping in range(current_right_pair - 1): idx_left = n_algns1 - current_right_pair + i_overlapping idx_right = n_algns2 - 1 - i_overlapping pair_index = (idx_left + 1, "R1&2") output_pairs.append( format_pair( algns1[idx_left], algns1[idx_left + 1], pair_index=pair_index, algn2_pos3=algns2[idx_right - 1]["pos5"], report_position=report_position, report_orientation=report_orientation, ) ) # Report all the sequential chimeric pairs in the right read, but not the overlap: reporting_order = range( 0, min(current_right_pair, n_algns2 - last_reported_alignment_right) ) for i in reporting_order: # Determine the pair index depending on what is the overlap: shift = -1 if current_right_pair > 1 else 0 pair_index = ( ( n_algns1 + min(current_right_pair, n_algns2 - last_reported_alignment_right) - i + shift ), "R2", ) output_pairs.append( format_pair( algns2[i + 1], algns2[i], pair_index=pair_index, report_position=report_position, report_orientation=report_orientation, ) ) # Sort the pairs according to the pair index: output_pairs.sort(key=lambda x: int(x[-1][0])) if expand: output_pairs = expand_pairs(output_pairs, max_expansion_depth) return iter(output_pairs) ### Additional functions for pairs ### def expand_pairs(pairs_list, max_expansion_depth=None): """ Perform combinatorial expansion of the pairs. Parameters ---------- pairs_list: List of formatted pairs (triplets: algn1, algn2, pair_index). max_expansion_depth: maximum depth of expansion; all by default (None), number will enforce only pairs from the same strand. Returns ------- list of expanded pairs """ for algn1, _algn1, pair_index1 in pairs_list: for _algn2, algn2, pair_index2 in pairs_list: if pair_index1 > pair_index2: continue elif pair_index1 == pair_index2: # output regular pair with no change yield algn1, _algn1, pair_index1 else: pair_order1, pair_type1 = pair_index1 pair_order2, pair_type2 = pair_index2 separated_by = pair_order2 - pair_order1 if ( pair_type1 == "R1-2" or pair_type2 == "R1-2" or (pair_type1 == "R1" and pair_type2 == "R2") ): pair_type = "R1-2" elif pair_type1 == pair_type2: pair_type = pair_type1 elif pair_type1 == "R1&2": pair_type = pair_type2 elif pair_type2 == "R1&2": pair_type = pair_type1 else: raise ValueError( f"Unexpected error, pair types: {pair_type1}, {pair_type2}" ) same_read = pair_type != "R1-2" if (max_expansion_depth is None) or ( (separated_by <= max_expansion_depth) and same_read ): pair_type = f"E{separated_by}_{pair_type}" yield algn1, algn2, (pair_order1, pair_type) ### Additional functions for complex walks rescue ### def partial_overlap(algn1, algn2, max_insert_size=500, dedup_max_mismatch=5): """ Two ends of alignments overlap if: 1) they are from the same chromosome, 2) map in the opposite directions, 3) the distance between the outer ends of the two alignments is below the specified max_insert_size, 4) the distance between the outer ends of the two alignments is above the maximum alignment size. (4) guarantees that the alignments point towards each other on the chromosomes. Allowed mismatch between intramolecular alignments to detect readthrough duplicates. Return: 1 if the alignments overlap or both have troubles with unique mapping, 0 if they do not overlap or if we do not have enough information (e.g. only one of the alignments have troubles with being mapped). """ # Alignments with no match or with multiple matches are counted as overlaps if not (algn1["is_mapped"] and algn1["is_unique"]): if not (algn2["is_mapped"] and algn2["is_unique"]): return 1 # We assume that successful alignment cannot be an overlap with unmapped or multi-mapped region if not (algn1["is_mapped"] and algn1["is_unique"]): return 0 if not (algn2["is_mapped"] and algn2["is_unique"]): return 0 # Both alignments are mapped and unique do_overlap = True do_overlap &= algn1["chrom"] == algn2["chrom"] do_overlap &= algn1["strand"] != algn2["strand"] if algn1["strand"] == "+": min_algn_size = max( algn1["pos3"] - algn1["pos5"], algn2["pos5"] - algn2["pos3"] ) distance_outer_ends = algn2["pos5"] - algn1["pos5"] else: min_algn_size = max( algn1["pos5"] - algn1["pos3"], algn2["pos3"] - algn2["pos5"] ) distance_outer_ends = algn1["pos5"] - algn2["pos5"] do_overlap &= distance_outer_ends <= max_insert_size + dedup_max_mismatch do_overlap &= distance_outer_ends >= min_algn_size - dedup_max_mismatch if do_overlap: return 1 return 0 def pairs_overlap(algns1, algns2, dedup_max_mismatch=3): """ We assume algns1 originate from left read, and algns2 originate from right read: left read: right read: ----------------------------> <---------------------------- algns1 algns2 5------------3_5------------3 3------------5_3------------5' left_5'-algn left_3'-algn right_3'-algn right_5'-algn Two pairs of alignments overlap if: 1) chromosomes/mapping/strand of left_5'-algn and right_3'-algn are the same, 2) chromosomes/mapping/strand of left_3'-algn and right_5'-algn are the same, 3) pos3 of left_5'-algn is close to pos5 of right_3'-algn (with dedup_max_mismatch), and 4) pos5 of left_3'-algn is close to pos3 of right_5'-algn. Return: 1 of the pairs of alignments overlap, 0 otherwise. """ left5_algn = algns1[0] left3_algn = algns1[1] right5_algn = algns2[0] right3_algn = algns2[1] # We assume that successful alignment cannot be an overlap with unmapped or multi-mapped region: mapped_left5_algn = left5_algn["is_mapped"] and left5_algn["is_unique"] mapped_left3_algn = left3_algn["is_mapped"] and left3_algn["is_unique"] mapped_right5_algn = right5_algn["is_mapped"] and right5_algn["is_unique"] mapped_right3_algn = right3_algn["is_mapped"] and right3_algn["is_unique"] if not mapped_left5_algn and not mapped_right3_algn: left_overlap = True elif not mapped_left5_algn and mapped_right3_algn: left_overlap = False elif mapped_left5_algn and not mapped_right3_algn: left_overlap = False else: left_overlap = True left_overlap &= left5_algn["chrom"] == right3_algn["chrom"] left_overlap &= left5_algn["strand"] != right3_algn["strand"] if not mapped_left3_algn and not mapped_right5_algn: right_overlap = True elif not mapped_left3_algn and mapped_right5_algn: right_overlap = False elif mapped_left3_algn and not mapped_right5_algn: right_overlap = False else: right_overlap = True right_overlap &= left3_algn["chrom"] == right5_algn["chrom"] right_overlap &= left3_algn["strand"] != right5_algn["strand"] same_pair = True same_pair &= abs(left5_algn["pos3"] - right3_algn["pos5"]) <= dedup_max_mismatch same_pair &= abs(left3_algn["pos5"] - right5_algn["pos3"]) <= dedup_max_mismatch if left_overlap & right_overlap & same_pair: return 1 else: return 0 def format_pair( hic_algn1, hic_algn2, pair_index, report_position="outer", report_orientation="pair", algn1_pos5=None, algn1_pos3=None, algn2_pos5=None, algn2_pos3=None, ): """ Return a triplet: pair of formatted alignments and pair_index in a walk :param hic_algn1: Left alignment forming a pair :param hic_algn2: Right alignment forming a pair :param algns1: All left read alignments for formal reporting :param algns2: All right read alignments for formal reporting :param pair_index: Index of the pair :param algn1_pos5: Replace reported 5'-position of the alignment 1 with this value :param algn1_pos3: Replace reported 3'-position of the alignment 1 with this value :param algn2_pos5: Replace reported 5'-position of the alignment 2 with this value :param algn2_pos3: Replace reported 3'-position of the alignment 2 with this value """ # Make sure the original data is not modified: hic_algn1, hic_algn2 = dict(hic_algn1), dict(hic_algn2) # Adjust the 5' and 3'-ends: hic_algn1["pos5"] = algn1_pos5 if not algn1_pos5 is None else hic_algn1["pos5"] hic_algn1["pos3"] = algn1_pos3 if not algn1_pos3 is None else hic_algn1["pos3"] hic_algn2["pos5"] = algn2_pos5 if not algn2_pos5 is None else hic_algn2["pos5"] hic_algn2["pos3"] = algn2_pos3 if not algn2_pos3 is None else hic_algn2["pos3"] hic_algn1["type"] = ( "N" if not hic_algn1["is_mapped"] else "M" if not hic_algn1["is_unique"] else "U" ) hic_algn2["type"] = ( "N" if not hic_algn2["is_mapped"] else "M" if not hic_algn2["is_unique"] else "U" ) # Change orientation and positioning of pair for reporting: # AVAILABLE_REPORT_POSITION = ["outer", "pair", "read", "walk"] # AVAILABLE_REPORT_ORIENTATION = ["pair", "pair", "read", "walk"] pair_type = pair_index[1] if report_orientation == "read": pass elif report_orientation == "walk": if pair_type == "R2": hic_algn1 = flip_orientation(hic_algn1) hic_algn2 = flip_orientation(hic_algn2) elif pair_type == "R1-2": hic_algn2 = flip_orientation(hic_algn2) elif report_orientation == "pair": if pair_type == "R1" or pair_type == "R1&R2": hic_algn2 = flip_orientation(hic_algn2) elif pair_type == "R2": hic_algn1 = flip_orientation(hic_algn1) elif report_orientation == "junction": if pair_type == "R1" or pair_type == "R1&R2": hic_algn1 = flip_orientation(hic_algn1) elif pair_type == "R2": hic_algn2 = flip_orientation(hic_algn2) else: hic_algn1 = flip_orientation(hic_algn1) hic_algn2 = flip_orientation(hic_algn2) if report_position == "read": pass elif report_position == "walk": if pair_type == "R2": hic_algn1 = flip_position(hic_algn1) hic_algn2 = flip_position(hic_algn2) elif pair_type == "R1-2": hic_algn2 = flip_position(hic_algn2) elif report_position == "outer": if pair_type == "R1" or pair_type == "R1&R2": hic_algn2 = flip_position(hic_algn2) elif pair_type == "R2": hic_algn1 = flip_position(hic_algn1) elif report_position == "junction": if pair_type == "R1" or pair_type == "R1&R2": hic_algn1 = flip_position(hic_algn1) elif pair_type == "R2": hic_algn2 = flip_position(hic_algn2) else: hic_algn1 = flip_position(hic_algn1) hic_algn2 = flip_position(hic_algn2) return [hic_algn1, hic_algn2, pair_index] def check_pair_order(algn1, algn2, chrom_enum): """ Check if a pair of alignments has the upper-triangular order or has to be flipped. """ # First, the pair is flipped according to the type of mapping on its sides. # Later, we will check it is mapped on both sides and, if so, flip the sides # according to these coordinates. has_correct_order = (algn1["is_mapped"], algn1["is_unique"]) <= ( algn2["is_mapped"], algn2["is_unique"], ) # If a pair has coordinates on both sides, it must be flipped according to # its genomic coordinates. if (algn1["chrom"] != pairsam_format.UNMAPPED_CHROM) and ( algn2["chrom"] != pairsam_format.UNMAPPED_CHROM ): has_correct_order = (chrom_enum[algn1["chrom"]], algn1["pos"]) <= ( chrom_enum[algn2["chrom"]], algn2["pos"], ) return has_correct_order ###################### ### Output utilities: ###################### def write_all_algnments(readID, all_algns1, all_algns2, out_file): """ Debug utility that outputs all alignments in .bam file before parsing walks/pairs """ for side_idx, all_algns in enumerate((all_algns1, all_algns2)): out_file.write(readID) out_file.write("\t") out_file.write(str(side_idx + 1)) out_file.write("\t") for algn in sorted(all_algns, key=lambda x: x["dist_to_5"]): out_file.write(algn["chrom"]) out_file.write("\t") out_file.write(str(algn["pos5"])) out_file.write("\t") out_file.write(algn["strand"]) out_file.write("\t") out_file.write(str(algn["mapq"])) out_file.write("\t") out_file.write(str(algn["cigar"])) out_file.write("\t") out_file.write(str(algn["dist_to_5"])) out_file.write("\t") out_file.write(str(algn["dist_to_5"] + algn["algn_read_span"])) out_file.write("\t") out_file.write(str(algn["matched_bp"])) out_file.write("\t") out_file.write("\n") def write_pairsam( algn1, algn2, readID, pair_index, sams1, sams2, out_file, drop_readid, drop_seq, drop_sam, add_pair_index, add_columns, ): """ Write output pairsam. Note: SAM is already tab-separated and any printable character between ! and ~ may appear in the PHRED field! (http://www.ascii-code.com/) Thus, use the vertical tab character to separate fields! """ cols = [ "." if drop_readid else readID, algn1["chrom"], str(algn1["pos"]), algn2["chrom"], str(algn2["pos"]), algn1["strand"], algn2["strand"], algn1["type"] + algn2["type"], ] if not drop_sam: for sams in [sams1, sams2]: if drop_seq: for sam in sams: sam.query_qualities = "" sam.query_sequence = "" cols.append( pairsam_format.INTER_SAM_SEP.join( [ sam.to_string().replace( "\t", pairsam_format.SAM_SEP ) # String representation of pysam alignment + pairsam_format.SAM_SEP + "Yt:Z:" + algn1["type"] + algn2["type"] for sam in sams ] ) ) if add_pair_index: cols.append(str(pair_index[0])) cols.append(pair_index[1]) for col in add_columns: # use get b/c empty alignments would not have sam tags (NM, AS, etc) cols.append(str(algn1.get(col, ""))) cols.append(str(algn2.get(col, ""))) out_file.write(pairsam_format.PAIRSAM_SEP.join(cols) + "\n") pairtools-1.0.3/pairtools/lib/parse_pysam.pyx000066400000000000000000000110151452673171500214070ustar00rootroot00000000000000from pysam.libcalignmentfile cimport AlignmentFile from pysam.libcalignedsegment cimport AlignedSegment, AlignmentHeader from pysam.libchtslib cimport * from pysam.libcutils cimport array_to_qualitystring cdef class AlignmentFilePairtoolized(AlignmentFile): """ Modified class that loads each entry as pairtoolozed alignment. """ def __next__(self): cdef int ret = self.cnext() if (ret >= 0): # Redefine the constructed object: return makeAlignedSegmentPairtoolized(self.b, self.header) elif ret == -2: raise IOError('truncated file') else: raise StopIteration cdef AlignedSegmentPairtoolized makeAlignedSegmentPairtoolized(bam1_t *src, AlignmentHeader header): '''return an AlignedSegmentPairtoolized object constructed from `src`''' # note that the following does not call __init__ # Redefine the constructed object: cdef AlignedSegmentPairtoolized dest = AlignedSegmentPairtoolized.__new__(AlignedSegmentPairtoolized) dest._delegate = bam_dup1(src) dest.header = header return dest cdef class AlignedSegmentPairtoolized(AlignedSegment): """ In the pairtoolized class we inherit everything and add some useful properties and functions on top of that. """ def is_unique(self, min_mapq): """true if read is unique mapping (by mapq)""" return self.mapq >= min_mapq property is_linear: """true if read is linear (SA is present in tages)""" def __get__(self): if self.has_tag('SA'): return False # for tag in self.tags: # if 'SA'==tag[0]: # return False return True property cigar_dict: """Parsed CIGAR as dictionary with interpretable fields""" def __get__(self): """Parse cigar tuples reported as cigartuples of pysam read entry. Reports alignment span, clipped nucleotides and more. See https://pysam.readthedocs.io/en/latest/api.html#pysam.AlignedSegment.cigartuples """ matched_bp = 0 algn_ref_span = 0 algn_read_span = 0 read_len = 0 clip5_ref = 0 clip3_ref = 0 cigarstring = self.cigarstring cigartuples = self.cigartuples if cigartuples is not None: for operation, length in cigartuples: if operation == 0: # M, match matched_bp += length algn_ref_span += length algn_read_span += length read_len += length elif operation == 1: # I, insertion algn_read_span += length read_len += length elif operation == 2: # D, deletion algn_ref_span += length elif ( operation == 4 or operation == 5 ): # S and H, soft clip and hard clip, respectively read_len += length if matched_bp == 0: clip5_ref = length else: clip3_ref = length return { "clip5_ref": clip5_ref, "clip3_ref": clip3_ref, "cigar": cigarstring, "algn_ref_span": algn_ref_span, "algn_read_span": algn_read_span, "read_len": read_len, "matched_bp": matched_bp } from cpython cimport array import cython cimport cython cpdef list get_mismatches_c(str seq, array.array quals, list aligned_pairs): ''' This function takes a SAM alignment and, for every mismatch between the read and reference sequences, returns a tuple (the reference bp, the read bp, PHRED quality of the bp, reference position, read position). Reference: https://github.com/gerlichlab/scshic_pipeline/blob/master/bin/seq_mismatches.pyx ''' cdef cython.int read_pos, ref_pos cdef str orig_bp, orig_bp_upper cdef list mismatches = [] for read_pos, ref_pos, orig_bp in aligned_pairs: orig_bp_upper = orig_bp.upper() if (seq[read_pos] != orig_bp_upper): mismatches.append( (orig_bp_upper, seq[read_pos], quals[read_pos], ref_pos, read_pos) ) return mismatchespairtools-1.0.3/pairtools/lib/phase.py000066400000000000000000000050111452673171500177730ustar00rootroot00000000000000def get_chrom_phase(chrom, phase_suffixes): if chrom.endswith(phase_suffixes[0]): return "0", chrom[: -len(phase_suffixes[0])] elif chrom.endswith(phase_suffixes[1]): return "1", chrom[: -len(phase_suffixes[1])] else: return "!", chrom def phase_side_XB(chrom, XB, AS, XS, phase_suffixes): phase, chrom_base = get_chrom_phase(chrom, phase_suffixes) XBs = [i for i in XB.split(";") if len(i) > 0] S1, S2, S3 = AS, XS, -1 # -1 if the second hit was not reported if AS > XS: # Primary hit has higher score than the secondary return phase, chrom_base, S1, S2, S3 elif len(XBs) >= 1: if len(XBs) >= 2: alt2_chrom, alt2_pos, alt2_CIGAR, alt2_NM, alt2_AS, alt_mapq = XBs[1].split( "," ) S3 = int(alt2_AS) if int(alt2_AS) == XS == AS: return "!", "!", S1, S2, S3 alt_chrom, alt_pos, alt_CIGAR, alt_NM, alt_AS, alt_mapq = XBs[0].split(",") alt_phase, alt_chrom_base = get_chrom_phase(alt_chrom, phase_suffixes) alt_is_homologue = (chrom_base == alt_chrom_base) and ( ((phase == "0") and (alt_phase == "1")) or ((phase == "1") and (alt_phase == "0")) ) if alt_is_homologue: return ".", chrom_base, S1, S2, S3 return "!", "!", S1, S2, S3 def phase_side_XA(chrom, XA, AS, XS, NM, phase_suffixes): phase, chrom_base = get_chrom_phase(chrom, phase_suffixes) XAs = [i for i in XA.split(";") if len(i.strip()) > 0] if len(XAs) >= 1: alt_chrom, alt_pos, alt_CIGAR, alt_NM = XAs[0].split(",") M1, M2, M3 = NM, int(alt_NM), -1 else: M1, M2, M3 = NM, -1, -1 # -1 if the second hit was not reported if AS > XS: # Primary hit has higher score than the secondary return phase, chrom_base, M1, M2, M3 elif len(XAs) >= 1: if len(XAs) >= 2: alt2_chrom, alt2_pos, alt2_CIGAR, alt2_NM = XAs[1].split(",") M3 = int(alt2_NM) if int(alt2_NM) == int(alt_NM) == NM: return "!", "!", M1, M2, M3 alt_chrom, alt_pos, alt_CIGAR, alt_NM = XAs[0].split(",") alt_phase, alt_chrom_base = get_chrom_phase(alt_chrom, phase_suffixes) alt_is_homologue = (chrom_base == alt_chrom_base) and ( ((phase == "0") and (alt_phase == "1")) or ((phase == "1") and (alt_phase == "0")) ) if alt_is_homologue: return ".", chrom_base, M1, M2, M3 return "!", "!", M1, M2, M3 pairtools-1.0.3/pairtools/lib/regions.pyx000066400000000000000000000030651452673171500205400ustar00rootroot00000000000000""" Moved from pairlib, library for fast regions assignment """ from cython.operator cimport dereference, postincrement, postdecrement from cpython cimport array import cython from libcpp.map cimport map from libcpp.algorithm cimport lower_bound, upper_bound from libcpp.string cimport string from libcpp.vector cimport vector import numpy as np cimport numpy as np cpdef np.ndarray assign_regs_c(np.ndarray chroms, np.ndarray pos, dict reg_dict): assert len(chroms) == len(pos) cdef int n = len(chroms) cdef np.ndarray[np.int64_t, ndim=2] result = -1 * np.ones((n, 3), dtype=np.int64) cdef map[string, vector[int]] reg_map = reg_dict cdef map[string, vector[int]].iterator reg_map_it = reg_map.begin() cdef map[string, vector[int]].iterator reg_map_end = reg_map.end() cdef vector[int].iterator lo_b, up_b cdef int position, reg_boundary_idx # this can be parallelized with prange for i in range(n): reg_map_it = reg_map.find(chroms[i]) if reg_map_it != reg_map_end: position = pos[i] up_b = upper_bound( dereference(reg_map_it).second.begin(), dereference(reg_map_it).second.end(), position) reg_boundary_idx = up_b - dereference(reg_map_it).second.begin() if reg_boundary_idx % 2 == 1: lo_b = up_b postdecrement(lo_b) result[i, 0] = (reg_boundary_idx - 1) // 2 result[i, 1] = dereference(lo_b) result[i, 2] = dereference(up_b) return resultpairtools-1.0.3/pairtools/lib/restrict.py000066400000000000000000000015231452673171500205360ustar00rootroot00000000000000from . import pairsam_format import warnings def find_rfrag(rfrags, chrom, pos): # Return empty if chromosome is unmapped: if chrom == pairsam_format.UNMAPPED_CHROM: return ( pairsam_format.UNANNOTATED_RFRAG, pairsam_format.UNMAPPED_POS, pairsam_format.UNMAPPED_POS, ) try: rsites_chrom = rfrags[chrom] except ValueError as e: warnings.warn( f"Chomosome {chrom} does not have annotated restriction fragments, return empty." ) return ( pairsam_format.UNANNOTATED_RFRAG, pairsam_format.UNMAPPED_POS, pairsam_format.UNMAPPED_POS, ) idx = min( max(0, rsites_chrom.searchsorted(pos, "right") - 1), len(rsites_chrom) - 2 ) return idx, rsites_chrom[idx], rsites_chrom[idx + 1] pairtools-1.0.3/pairtools/lib/scaling.py000066400000000000000000000333171452673171500203250ustar00rootroot00000000000000import numpy as np import pandas as pd from .regions import assign_regs_c import bioframe def geomprog(factor, start=1): yield start while True: start *= factor yield start def _geomrange(start, end, factor, endpoint): prev = np.nan for i in geomprog(factor, start): x = int(round(i)) if x > end: break if x == prev: continue prev = x yield x if endpoint and prev != end: yield end def geomrange(start, end, factor, endpoint=False): return np.fromiter(_geomrange(start, end, factor, endpoint), dtype=int) def geomspace(start, end, num=50, endpoint=True): factor = (end / start) ** (1 / num) return geomrange(start, end, factor, endpoint=endpoint) def _to_float(arr_or_scalar): if np.isscalar(arr_or_scalar): return float(arr_or_scalar) else: return np.asarray(arr_or_scalar).astype(float) def assign_regs(chroms, pos, regs): gb_regs = regs.sort_values(["chrom", "start", "end"]).groupby(["chrom"]) regs_dict = { chrom.encode(): regs_per_chrom[["start", "end"]] .values.flatten() .astype(np.int64) for chrom, regs_per_chrom in gb_regs } return assign_regs_c(np.asarray(chroms).astype("bytes"), np.asarray(pos), regs_dict) def cartesian_df_product(df1, df2, suffixes=["1", "2"]): return pd.merge( left=df1.assign(cartesian_product_dummy=1), right=df2.assign(cartesian_product_dummy=1), on=["cartesian_product_dummy"], how="outer", suffixes=suffixes, ).drop("cartesian_product_dummy", axis="columns") def make_empty_scaling(regions, dist_bins, multiindex=True): if dist_bins[0] != 0: dist_bins = np.r_[0, dist_bins] if dist_bins[-1] != np.iinfo(np.int64).max: dist_bins = np.r_[dist_bins, np.iinfo(np.int64).max] strands_table = pd.DataFrame( {"strand1": ["+", "+", "-", "-"], "strand2": ["+", "-", "+", "-"]} ) dists_table = pd.DataFrame( list(zip(dist_bins[:-1], dist_bins[1:])), columns=["min_dist", "max_dist"] ) out = regions.join(regions, on=None, lsuffix="1", rsuffix="2") out = cartesian_df_product(out, strands_table) out = cartesian_df_product(out, dists_table) if multiindex: index_by = [ "chrom1", "start1", "end1", "chrom2", "start2", "end2", "strand1", "strand2", "min_dist", "max_dist", ] out.set_index(index_by, inplace=True) return out def make_empty_cross_region_table( regions, drop_same_reg=True, split_by_strand=True, multiindex=True ): out = cartesian_df_product(regions, regions) if split_by_strand: strands_table = pd.DataFrame( {"strand1": ["+", "+", "-", "-"], "strand2": ["+", "-", "+", "-"]} ) out = cartesian_df_product(out, strands_table) if drop_same_reg: out = out[ (out["chrom1"] != out["chrom2"]) | (out["start1"] != out["start2"]) | (out["end1"] != out["end2"]) ] if multiindex: index_by = ["chrom1", "start1", "end1", "chrom2", "start2", "end2"] if split_by_strand: index_by += ["strand1", "strand2"] out.set_index(index_by, inplace=True) return out def bins_pairs_by_distance( pairs_df, dist_bins, regions=None, chromsizes=None, ignore_trans=False, keep_unassigned=False, ): dist_bins = np.r_[dist_bins, np.iinfo(np.int64).max] if regions is None: if chromsizes is None: chroms = sorted( set.union(set(pairs_df.chrom1.unique()), set(pairs_df.chrom2.unique())) ) regions = pd.DataFrame({"chrom": chroms, "start": 0, "end": -1}) regions = regions[["chrom", "start", "end"]] region_starts1, region_starts2 = 0, 0 region_ends1, region_ends2 = -1, -1 else: region_ends1 = pairs_df.chrom1.map(chromsizes).fillna(-1).astype(np.int64) region_ends2 = pairs_df.chrom2.map(chromsizes).fillna(-1).astype(np.int64) region_starts1 = np.where(region_ends1 > 0, 0, -1) region_starts2 = np.where(region_ends2 > 0, 0, -1) regions = pd.DataFrame( [ {"chrom": chrom, "start": 0, "end": length} for chrom, length in chromsizes.items() ] ) regions = regions[["chrom", "start", "end"]] try: regions = bioframe.from_any(regions) except Exception as e: raise ValueError(f"Invalid viewframe created from pairs file, {e}") else: if not bioframe.is_viewframe(regions): try: regions = bioframe.from_any(regions) except Exception as e: raise ValueError( f"Provided regions cannot be converted to viewframe, {e}" ) regions = regions[["chrom", "start", "end"]] _, region_starts1, region_ends1 = assign_regs( pairs_df.chrom1.values, pairs_df.pos1.values, regions ).T _, region_starts2, region_ends2 = assign_regs( pairs_df.chrom2.values, pairs_df.pos2.values, regions ).T pairs_reduced_df = pd.DataFrame( { "chrom1": pairs_df.chrom1.values, "start1": region_starts1, "end1": region_ends1, "chrom2": pairs_df.chrom2.values, "start2": region_starts2, "end2": region_ends2, "strand1": pairs_df.strand1.values, "strand2": pairs_df.strand2.values, "dist_bin_idx": np.searchsorted( dist_bins, np.abs(pairs_df.pos1 - pairs_df.pos2), side="right" ), "n_pairs": 1, }, copy=False, ) if not keep_unassigned: pairs_reduced_df = (pairs_reduced_df .query('(start1 >= 0) and (end1 > 0) and (start2 >= 0) and (end2 > 0)') .reset_index(drop=True)) pairs_reduced_df["min_dist"] = np.where( pairs_reduced_df["dist_bin_idx"] > 0, dist_bins[pairs_reduced_df["dist_bin_idx"] - 1], 0, ) pairs_reduced_df["max_dist"] = np.where( pairs_reduced_df["dist_bin_idx"] < len(dist_bins)-1, dist_bins[pairs_reduced_df["dist_bin_idx"]], np.iinfo(np.int64).max, ) # importantly, in the future, we may want to extend the function to plot scalings # for pairs from different regions! pairs_for_scaling_mask = ( (pairs_reduced_df.chrom1 == pairs_reduced_df.chrom2) & (pairs_reduced_df.start1 == pairs_reduced_df.start2) & (pairs_reduced_df.end1 == pairs_reduced_df.end2) & (pairs_reduced_df.min_dist > 0) & (pairs_reduced_df.max_dist < np.iinfo(np.int64).max) ) pairs_for_scaling_df = pairs_reduced_df.loc[pairs_for_scaling_mask] pairs_for_scaling_counts = pairs_for_scaling_df.groupby( by=[ "chrom1", "start1", "end1", "chrom2", "start2", "end2", "strand1", "strand2", "min_dist", "max_dist", ] ).agg({"n_pairs": "sum"}) pairs_for_scaling_counts = ( make_empty_scaling(regions, dist_bins) .assign(n_pairs=0) .add(pairs_for_scaling_counts, fill_value=0) ) pairs_for_scaling_counts["n_pairs"] = pairs_for_scaling_counts["n_pairs"].astype( np.int64 ) if ignore_trans: pairs_no_scaling_counts = None else: pairs_no_scaling_df = pairs_reduced_df.loc[~pairs_for_scaling_mask] pairs_no_scaling_counts = pairs_no_scaling_df.groupby( by=[ "chrom1", "start1", "end1", "chrom2", "start2", "end2", "strand1", "strand2", ] ).agg({"n_pairs": "sum"}) pairs_no_scaling_counts = ( make_empty_cross_region_table(regions) .assign(n_pairs=0) .add(pairs_no_scaling_counts, fill_value=0) ) pairs_no_scaling_counts["n_pairs"] = pairs_no_scaling_counts["n_pairs"].astype( np.int64 ) return pairs_for_scaling_counts, pairs_no_scaling_counts def contact_areas_same_reg(min_dist, max_dist, region_length): min_dist = _to_float(min_dist) max_dist = _to_float(max_dist) scaffold_length = _to_float(region_length) outer_areas = np.maximum(region_length - min_dist, 0) ** 2 inner_areas = np.maximum(region_length - max_dist, 0) ** 2 return 0.5 * (outer_areas - inner_areas) def _contact_areas_diff_reg( min_dist, max_dist, region_start1, region_end1, region_start2, region_end2 ): return ( contact_areas_same_reg(min_dist, max_dist, np.abs(region_end2 - region_start1)) + contact_areas_same_reg( min_dist, max_dist, np.abs(region_end1 - region_start2) ) - contact_areas_same_reg( min_dist, max_dist, np.abs(region_start1 - region_start2) ) - contact_areas_same_reg(min_dist, max_dist, np.abs(region_end1 - region_end2)) ) def _contact_areas_trans(min_dist, max_dist, region_length1, region_length2): return ( contact_areas_same_reg(min_dist, max_dist, region_length1 + region_length2) - contact_areas_same_reg(min_dist, max_dist, region_length1) - contact_areas_same_reg(min_dist, max_dist, region_length2) ) def compute_scaling( pairs, regions=None, chromsizes=None, dist_range=(int(1e1), int(1e9)), n_dist_bins=8 * 8, chunksize=int(1e7), ignore_trans=False, keep_unassigned=False, filter_f=None, nproc_in=1, cmd_in=None, ): """ Main function for computing scaling. Parameters ---------- pairs: pd.DataFrame, stream of fiel paht with pairs. regions: bioframe viewframe, anything that can serve as input to bioframe.from_any, or None chromsizes: additional dataframe with chromosome sizes, if different from regions dist_range: (int, int) tuple with distance ranges that will be split into windows n_dist_bins: number of logarithmic bins chunksize: size of chunks for calculations ignore_trans: bool, ignore trans or not keep_unassigned: bool, keep pairs that are not assigned to any region filter_f: filter function that can be applied to each chunk nproc_in cmd_in Returns ------- """ dist_bins = geomspace(dist_range[0], dist_range[1], n_dist_bins) if isinstance(pairs, pd.DataFrame): pairs_df = pairs elif isinstance(pairs, str) or hasattr(pairs, "buffer") or hasattr(pairs, "peek"): from . import fileio, headerops pairs_stream = ( fileio.auto_open( pairs, mode="r", nproc=nproc_in, command=cmd_in, ) if isinstance(pairs, str) else pairs ) header, pairs_body = headerops.get_header(pairs_stream) cols = headerops.extract_column_names(header) if chromsizes is None: chromsizes = headerops.extract_chromsizes(header) pairs_df = pd.read_csv( pairs_body, header=None, names=cols, chunksize=chunksize, sep="\t", dtype={"chrom1": str, "chrom2": str}, ) else: raise ValueError( "pairs must be either a path to a pairs file or a pd.DataFrame" ) sc, trans_counts = None, None for pairs_chunk in [pairs_df] if isinstance(pairs_df, pd.DataFrame) else pairs_df: if filter_f: pairs_chunk = filter_f(pairs_chunk) sc_chunk, trans_counts_chunk = bins_pairs_by_distance( pairs_chunk, dist_bins, regions=regions, chromsizes=chromsizes, ignore_trans=ignore_trans, keep_unassigned=keep_unassigned ) sc = sc_chunk if sc is None else sc.add(sc_chunk, fill_value=0) trans_counts = ( trans_counts_chunk if trans_counts is None else trans_counts.add(trans_counts_chunk, fill_value=0) ) # if not (isinstance(regions, pd.DataFrame) and # (set(regions.columns) == set(['chrom', 'start','end']))): # raise ValueError('regions must be provided as a dict or chrom-indexed Series of chromsizes or as a bedframe.') sc.reset_index(inplace=True) sc["n_bp2"] = contact_areas_same_reg( sc["min_dist"], sc["max_dist"], sc["end1"] - sc["start1"] ) if not ignore_trans: trans_counts.reset_index(inplace=True) trans_counts["n_bp2"] = (trans_counts["end1"] - trans_counts["start1"]) * ( trans_counts["end2"] - trans_counts["start2"] ) return sc, trans_counts def norm_scaling_factor(bins, cfreqs, anchor=1.0, binwindow=(0, 3)): i = np.searchsorted(bins, anchor) return cfreqs[i + binwindow[0] : i + binwindow[1]].mean() def norm_scaling(bins, cfreqs, anchor=1.0, binwindow=(0, 3)): return cfreqs / norm_scaling_factor(bins, cfreqs, anchor, binwindow) def unity_norm_scaling(bins, cfreqs, norm_range=(1e4, 1e9)): bin_lens = np.diff(bins) bin_mids = np.sqrt(bins[1:] * bins[:-1]) if norm_range is None: norm_cfreqs = cfreqs / np.sum(1.0 * (bin_lens * cfreqs)[np.isfinite(cfreqs)]) else: norm_cfreqs = cfreqs / np.sum( 1.0 * (bin_lens * cfreqs)[ np.isfinite(cfreqs) & (bin_mids > norm_range[0]) & (bin_mids < norm_range[1]) ] ) return norm_cfreqs pairtools-1.0.3/pairtools/lib/select.py000066400000000000000000000101101452673171500201460ustar00rootroot00000000000000from ..lib import fileio, pairsam_format, headerops import re, fnmatch # Create environment of important functions: wildcard_library = {} def wildcard_match(x, wildcard): if wildcard not in wildcard_library: regex = fnmatch.translate(wildcard) reobj = re.compile(regex) wildcard_library[wildcard] = reobj return wildcard_library[wildcard].fullmatch(x) csv_library = {} def csv_match(x, csv): if csv not in csv_library: csv_library[csv] = set(csv.split(",")) return x in csv_library[csv] regex_library = {} def regex_match(x, regex): if regex not in regex_library: reobj = re.compile(regex) regex_library[regex] = reobj return regex_library[regex].fullmatch(x) # Define default data types: TYPES = {"pos1": "int", "pos2": "int", "mapq1": "int", "mapq2": "int"} def evaluate_stream( headerless_stream, condition, column_names, type_cast=(), startup_code=None ): """ Evaluate expression for the input headerless stream. Parameters ---------- headerless_stream condition type_cast: Cast a given column to a given type. By default, only pos and mapq are cast to int, other columns are kept as str. Type: tupe of two strings. startup_code: An auxiliary code to execute before filtering. Use to define functions that can be evaluated in the CONDITION statement ======== Writes the output to one of two streams (regular or rest) """ # Define data types: TYPES.update(dict(type_cast)) # Execute startup code: if startup_code is not None: exec(startup_code, globals()) for i, col in enumerate(column_names): if col in TYPES: col_type = TYPES[col] condition = re.sub(r"\b%s\b" % col , "{}(COLS[{}])".format(col_type, i), condition) #condition.replace(col, "{}(COLS[{}])".format(col_type, i)) else: condition = re.sub(r"\b%s\b" % col, "COLS[{}]".format(i), condition) #condition = condition.replace(col, "COLS[{}]".format(i)) # Compile the filtering expression: match_func = compile(condition, "", "eval") for line in headerless_stream: COLS = line.rstrip().split(pairsam_format.PAIRSAM_SEP) # Evaluate filtering expression: filter_passed = eval(match_func) # Produce the output: yield filter_passed, line def evaluate_df(df, condition, type_cast=(), startup_code=None, engine="pandas"): """ Evaluate expression for the input headerless stream. Parameters ---------- df: input dataframe for evaluation condition: condition to evaluate type_cast: additional types transformations, if different from default startup_code: An auxiliary code to execute before filtering. Use to define functions that can be evaluated in the CONDITION statement ======== Writes the output to one of two streams (regular or rest) """ # Define data types: TYPES.update(dict(type_cast)) # Execute startup code: if startup_code is not None: exec(startup_code, globals()) # Set up the column formats: for col in df.columns: if col in TYPES.keys(): if not str(df.dtypes[col]) != TYPES[col]: df[col] = df[col].astype(TYPES[col]) if engine == "pandas": try: filter_passed_output = df.eval(condition) except ValueError as e: raise ValueError(f"Try passing engine python to fix this: {e}") else: # Set up the columns indexing for i, col in enumerate(df.columns): condition = re.sub(r"\b%s\b" % col, "COLS[{}]".format(i), condition) #condition = condition.replace(col, "COLS[{}]".format(i)) filter_passed_output = [] match_func = compile(condition, "", "eval") for i, r in df.iterrows(): COLS = r.values # Evaluate filtering expression: filter_passed = eval(match_func) filter_passed_output.append(True if filter_passed else False) return filter_passed_output pairtools-1.0.3/pairtools/lib/stats.py000066400000000000000000001146621452673171500200460ustar00rootroot00000000000000import numpy as np import pandas as pd from scipy import special from collections.abc import Mapping import sys import yaml from . import fileio from .select import evaluate_df from .._logging import get_logger logger = get_logger() class PairCounter(Mapping): """ A Counter for Hi-C pairs that accumulates various statistics. PairCounter implements two interfaces to access multi-level statistics: 1. as a nested dict, e.g. pairCounter['pair_types']['LL'] 2. as a flat dict, with the level keys separated by '/', e.g. pairCounter['pair_types/LL'] Other features: -- PairCounters can be saved into/loaded from a file -- multiple PairCounters can be merged via addition. """ _SEP = "\t" _KEY_SEP = "/" def __init__( self, min_log10_dist=0, max_log10_dist=9, log10_dist_bin_step=0.25, bytile_dups=False, filters=None, **kwargs, ): # Define filters and parameters for filters evaluation: if filters is not None: self.filters = filters else: self.filters = {"no_filter": ""} self.startup_code = kwargs.get("startup_code", "") self.type_cast = kwargs.get("type_cast", ()) self.engine = kwargs.get("engine", "pandas") # Define default filter: if "no_filter" not in self.filters: self.filters["no_filter"] = "" self._stat = {key: {} for key in self.filters} # some variables used for initialization: # genomic distance bining for the ++/--/-+/+- distribution self._dist_bins = np.r_[ 0, np.round( 10 ** np.arange( min_log10_dist, max_log10_dist + 0.001, log10_dist_bin_step ) ).astype(np.int_), ] # establish structure of an empty _stat: for key in self.filters: self._stat[key]["filter_expression"] = self.filters[key] self._stat[key]["total"] = 0 self._stat[key]["total_unmapped"] = 0 self._stat[key]["total_single_sided_mapped"] = 0 # total_mapped = total_dups + total_nodups self._stat[key]["total_mapped"] = 0 self._stat[key]["total_dups"] = 0 self._stat[key]["total_nodups"] = 0 ######################################## # the rest of stats are based on nodups: ######################################## self._stat[key]["cis"] = 0 self._stat[key]["trans"] = 0 self._stat[key]["pair_types"] = {} # to be removed: self._stat[key]["dedup"] = {} self._stat[key]["cis_1kb+"] = 0 self._stat[key]["cis_2kb+"] = 0 self._stat[key]["cis_4kb+"] = 0 self._stat[key]["cis_10kb+"] = 0 self._stat[key]["cis_20kb+"] = 0 self._stat[key]["cis_40kb+"] = 0 self._stat[key]["summary"] = dict( [ ("frac_cis", 0), ("frac_cis_1kb+", 0), ("frac_cis_2kb+", 0), ("frac_cis_4kb+", 0), ("frac_cis_10kb+", 0), ("frac_cis_20kb+", 0), ("frac_cis_40kb+", 0), ("frac_dups", 0), ("complexity_naive", 0), ] ) self._stat[key]["chrom_freq"] = {} self._stat[key]["dist_freq"] = { "+-": {bin.item(): 0 for bin in self._dist_bins}, "-+": {bin.item(): 0 for bin in self._dist_bins}, "--": {bin.item(): 0 for bin in self._dist_bins}, "++": {bin.item(): 0 for bin in self._dist_bins}, } self._stat[key]["chromsizes"] = {} # Summaries are derived from other stats and are recalculated on merge self._save_bytile_dups = bytile_dups if self._save_bytile_dups: self._bytile_dups = pd.DataFrame( index=pd.MultiIndex( levels=[[], []], codes=[[], []], names=["tile", "parent_tile"] ) ) self._summaries_calculated = False def __getitem__(self, key, filter="no_filter"): if isinstance(key, str): # let's strip any unintentional '/' # from either side of the key key = key.strip("/") if self._KEY_SEP in key: # multi-key to access nested elements k_fields = key.split(self._KEY_SEP) else: # single-key access flat part of PairCounter # or to access highest level of hierarchy return self._stat[filter][key] else: # clearly an error: raise ValueError("{} is not a valid key: must be str".format(key)) # K_FIELDS: # process multi-key case: # in this case key must be in ['pair_types','chrom_freq','dist_freq','dedup'] # get the first 'k' and keep the remainders in 'k_fields' k = k_fields.pop(0) if k in ["pair_types", "dedup"]: # assert there is only one element in key_fields left: # 'pair_types' and 'dedup' treated the same if len(k_fields) == 1: return self._stat[filter][k][k_fields[0]] else: raise ValueError( "{} is not a valid key: {} section implies 1 identifier".format( key, k ) ) elif k == "chrom_freq": # assert remaining key_fields == [chr1, chr2]: if len(k_fields) == 2: return self._stat[filter][k][tuple(k_fields)] else: raise ValueError( "{} is not a valid key: {} section implies 2 identifiers".format( key, k ) ) elif k == "dist_freq": # assert that last element of key_fields is the 'directions' # THIS IS DONE FOR CONSISTENCY WITH .stats FILE # SHOULD THAT BE CHANGED IN .stats AND HERE AS WELL? if len(k_fields) == 2: # assert 'dirs' in ['++','--','+-','-+'] dirs = k_fields.pop() # there is only genomic distance range of the bin that's left: (bin_range,) = k_fields # extract left border of the bin "1000000+" or "1500-6000": dist_bin_left = ( bin_range.strip("+") if bin_range.endswith("+") else bin_range.split("-")[0] ) # get the index of that bin: bin_idx = ( np.searchsorted(self._dist_bins, int(dist_bin_left), "right") - 1 ) # store corresponding value: return self._stat[filter]["dist_freq"][dirs][bin_idx] else: raise ValueError( "{} is not a valid key: {} section implies 2 identifiers".format( key, k ) ) else: raise ValueError("{} is not a valid key".format(k)) def __iter__(self): return iter(self._stat) def __len__(self): return len(self._stat) def calculate_summaries(self): """calculate summary statistics (fraction of cis pairs at different cutoffs, complexity estimate) based on accumulated counts. Results are saved into self._stat["filter_name"]['summary"] """ for key in self.filters.keys(): self._stat[key]["summary"]["frac_dups"] = ( (self._stat[key]["total_dups"] / self._stat[key]["total_mapped"]) if self._stat[key]["total_mapped"] > 0 else 0 ) for cis_count in ( "cis", "cis_1kb+", "cis_2kb+", "cis_4kb+", "cis_10kb+", "cis_20kb+", "cis_40kb+", ): self._stat[key]["summary"][f"frac_{cis_count}"] = ( (self._stat[key][cis_count] / self._stat[key]["total_nodups"]) if self._stat[key]["total_nodups"] > 0 else 0 ) self._stat[key]["summary"][ "complexity_naive" ] = estimate_library_complexity( self._stat[key]["total_mapped"], self._stat[key]["total_dups"], 0 ) if key == "no_filter" and self._save_bytile_dups: # Estimate library complexity with information by tile, if provided: if self._bytile_dups.shape[0] > 0: self._stat[key]["dups_by_tile_median"] = int( round( self._bytile_dups["dup_count"].median() * self._bytile_dups.shape[0] ) ) if "dups_by_tile_median" in self._stat[key].keys(): self._stat[key]["summary"][ "complexity_dups_by_tile_median" ] = estimate_library_complexity( self._stat[key]["total_mapped"], self._stat[key]["total_dups"], self._stat[key]["total_dups"] - self._stat[key]["dups_by_tile_median"], ) self._summaries_calculated = True @classmethod def from_file(cls, file_handle): """create instance of PairCounter from file Parameters ---------- file_handle: file handle Returns ------- PairCounter new PairCounter filled with the contents of the input file """ # fill in from file - file_handle: default_filter = "no_filter" stat_from_file = cls() for l in file_handle: fields = l.strip().split(cls._SEP) if len(fields) == 0: # skip empty lines: continue if len(fields) != 2: # expect two _SEP separated values per line: raise fileio.ParseError( "{} is not a valid stats file".format(file_handle.name) ) # extract key and value, then split the key: putative_key, putative_val = fields[0], fields[1] key_fields = putative_key.split(cls._KEY_SEP) # we should impose a rigid structure of .stats or redo it: if len(key_fields) == 1: key = key_fields[0] if key in stat_from_file._stat[default_filter]: stat_from_file._stat[default_filter][key] = int(fields[1]) else: raise fileio.ParseError( "{} is not a valid stats file: unknown field {} detected".format( file_handle.name, key ) ) else: # in this case key must be in ['pair_types','chrom_freq','dist_freq','dedup', 'summary'] # get the first 'key' and keep the remainders in 'key_fields' key = key_fields.pop(0) if key in ["pair_types", "dedup", "summary", "chromsizes"]: # assert there is only one element in key_fields left: # 'pair_types', 'dedup', 'summary' and 'chromsizes' treated the same if len(key_fields) == 1: try: stat_from_file._stat[default_filter][key][ key_fields[0] ] = int(fields[1]) except ValueError: stat_from_file._stat[default_filter][key][ key_fields[0] ] = float(fields[1]) else: raise fileio.ParseError( "{} is not a valid stats file: {} section implies 1 identifier".format( file_handle.name, key ) ) elif key == "chrom_freq": # assert remaining key_fields == [chr1, chr2]: if len(key_fields) == 2: stat_from_file._stat[default_filter][key][ tuple(key_fields) ] = int(fields[1]) else: raise fileio.ParseError( "{} is not a valid stats file: {} section implies 2 identifiers".format( file_handle.name, key ) ) elif key == "dist_freq": # assert that last element of key_fields is the 'directions' if len(key_fields) == 2: # assert 'dirs' in ['++','--','+-','-+'] dirs = key_fields.pop() # there is only genomic distance range of the bin that's left: (bin_range,) = key_fields # extract left border of the bin "1000000+" or "1500-6000": dist_bin_left = ( bin_range.strip("+") if bin_range.endswith("+") else bin_range.split("-")[0] ) # get the index of that bin: bin_idx = ( np.searchsorted( stat_from_file._dist_bins, int(dist_bin_left), "right" ) - 1 ) # store corresponding value: stat_from_file._stat[default_filter][key][dirs][bin_idx] = int( fields[1] ) else: raise fileio.ParseError( "{} is not a valid stats file: {} section implies 2 identifiers".format( file_handle.name, key ) ) else: raise fileio.ParseError( "{} is not a valid stats file: unknown field {} detected".format( file_handle.name, key ) ) # return PairCounter from a non-empty dict: return stat_from_file @classmethod def from_yaml(cls, file_handle): """create instance of PairCounter from file Parameters ---------- file_handle: file handle Returns ------- PairCounter new PairCounter filled with the contents of the input file """ # fill in from file - file_handle: stat_from_file = cls() stat = yaml.safe_load(file_handle) for key, filter in stat.items(): chromdict = {} for chroms in stat[key]["chrom_freq"].keys(): chromdict[tuple(chroms.split(cls._KEY_SEP))] = stat[key]["chrom_freq"][ chroms ] stat[key]["chrom_freq"] = chromdict stat_from_file._stat = stat return stat_from_file def add_pair( self, chrom1, pos1, strand1, chrom2, pos2, strand2, pair_type, filter="no_filter", ): """Gather statistics for a Hi-C pair and add to the PairCounter. Parameters ---------- chrom1: str chromosome of the first read pos1: int position of the first read strand1: str strand of the first read chrom2: str chromosome of the first read pos2: int position of the first read strand2: str strand of the first read pair_type: str type of the mapped pair of reads """ self._stat[filter]["total"] += 1 # collect pair type stats including DD: self._stat[filter]["pair_types"][pair_type] = ( self._stat[filter]["pair_types"].get(pair_type, 0) + 1 ) if chrom1 == "!" and chrom2 == "!": self._stat[filter]["total_unmapped"] += 1 elif chrom1 != "!" and chrom2 != "!": self._stat[filter]["total_mapped"] += 1 # only mapped ones can be duplicates: if pair_type == "DD": self._stat[filter]["total_dups"] += 1 else: self._stat[filter]["total_nodups"] += 1 self._stat[filter]["chrom_freq"][(chrom1, chrom2)] = ( self._stat[filter]["chrom_freq"].get((chrom1, chrom2), 0) + 1 ) if chrom1 == chrom2: self._stat[filter]["cis"] += 1 dist = np.abs(pos2 - pos1) bin = self._dist_bins[ np.searchsorted(self._dist_bins, dist, "right") - 1 ] self._stat[filter]["dist_freq"][strand1 + strand2][bin] += 1 if dist >= 1000: self._stat[filter]["cis_1kb+"] += 1 if dist >= 2000: self._stat[filter]["cis_2kb+"] += 1 if dist >= 4000: self._stat[filter]["cis_4kb+"] += 1 if dist >= 10000: self._stat[filter]["cis_10kb+"] += 1 if dist >= 20000: self._stat[filter]["cis_20kb+"] += 1 if dist >= 40000: self._stat[filter]["cis_40kb+"] += 1 else: self._stat[filter]["trans"] += 1 else: self._stat[filter]["total_single_sided_mapped"] += 1 def add_pairs_from_dataframe(self, df, unmapped_chrom="!"): """Gather statistics for Hi-C pairs in a dataframe and add to the PairCounter. Parameters ---------- df: pd.DataFrame DataFrame with pairs. Needs to have columns: 'chrom1', 'pos1', 'chrom2', 'pos2', 'strand1', 'strand2', 'pair_type' """ for key in self.filters.keys(): if key == "no_filter": df_filtered = df.copy() else: condition = self.filters[key] filter_passed = evaluate_df( df, condition, type_cast=self.type_cast, startup_code=self.startup_code, engine=self.engine, ) df_filtered = df.loc[filter_passed, :].reset_index(drop=True) total_count = df_filtered.shape[0] self._stat[key]["total"] += total_count # collect pair type stats including DD: for pair_type, type_count in ( df_filtered["pair_type"].value_counts().items() ): self._stat[key]["pair_types"][pair_type] = ( self._stat[key]["pair_types"].get(pair_type, 0) + type_count ) # Count the unmapped by the "unmapped" chromosomes (debatable, as WW are also marked as ! and they might be mapped): unmapped_count = np.logical_and( df_filtered["chrom1"] == unmapped_chrom, df_filtered["chrom2"] == unmapped_chrom, ).sum() self._stat[key]["total_unmapped"] += int(unmapped_count) # Count the mapped: df_mapped = df_filtered.loc[ (df_filtered["chrom1"] != unmapped_chrom) & (df_filtered["chrom2"] != unmapped_chrom), :, ] mapped_count = df_mapped.shape[0] self._stat[key]["total_mapped"] += mapped_count self._stat[key]["total_single_sided_mapped"] += int( total_count - (mapped_count + unmapped_count) ) # Count the duplicates: if "duplicate" in df_mapped.columns: mask_dups = df_mapped["duplicate"] else: mask_dups = df_mapped["pair_type"] == "DD" df_dups = df_mapped[mask_dups] dups_count = df_dups.shape[0] self._stat[key]["total_dups"] += int(dups_count) self._stat[key]["total_nodups"] += int(mapped_count - dups_count) df_nodups = df_mapped.loc[~mask_dups, :] mask_cis = df_nodups["chrom1"] == df_nodups["chrom2"] df_cis = df_nodups.loc[mask_cis, :].copy() # Count pairs per chromosome: for (chrom1, chrom2), chrom_count in ( df_nodups[["chrom1", "chrom2"]].value_counts().items() ): self._stat[key]["chrom_freq"][(chrom1, chrom2)] = ( self._stat[key]["chrom_freq"].get((chrom1, chrom2), 0) + chrom_count ) # Count cis-trans by pairs: self._stat[key]["cis"] += df_cis.shape[0] self._stat[key]["trans"] += df_nodups.shape[0] - df_cis.shape[0] dist = np.abs(df_cis["pos2"].values - df_cis["pos1"].values) df_cis.loc[:, "bin_idx"] = ( np.searchsorted(self._dist_bins, dist, "right") - 1 ) for (strand1, strand2, bin_id), strand_bin_count in ( df_cis[["strand1", "strand2", "bin_idx"]].value_counts().items() ): self._stat[key]["dist_freq"][strand1 + strand2][ self._dist_bins[bin_id].item() ] += strand_bin_count self._stat[key]["cis_1kb+"] += int(np.sum(dist >= 1000)) self._stat[key]["cis_2kb+"] += int(np.sum(dist >= 2000)) self._stat[key]["cis_4kb+"] += int(np.sum(dist >= 4000)) self._stat[key]["cis_10kb+"] += int(np.sum(dist >= 10000)) self._stat[key]["cis_20kb+"] += int(np.sum(dist >= 20000)) self._stat[key]["cis_40kb+"] += int(np.sum(dist >= 40000)) ### Add by-tile dups if key == "no_filter" and self._save_bytile_dups and (df_dups.shape[0] > 0): bytile_dups = analyse_bytile_duplicate_stats(df_dups) self._bytile_dups = self._bytile_dups.add( bytile_dups, fill_value=0 ).astype(int) def add_chromsizes(self, chromsizes): """Add chromsizes field to the output stats Parameters ---------- chromsizes: Dataframe with chromsizes, read by headerops.chromsizes """ chromsizes = chromsizes.to_dict() for filter in self._stat.keys(): self._stat[filter]["chromsizes"] = chromsizes return def __add__(self, other, filter="no_filter"): # both PairCounter are implied to have a list of common fields: # # 'total', 'total_unmapped', 'total_single_sided_mapped', 'total_mapped', # 'cis', 'trans', 'pair_types', 'cis_1kb+', 'cis_2kb+', # 'cis_10kb+', 'cis_20kb+', 'chrom_freq', 'dist_freq', 'dedup' # # If 'chromsizes' are present, they must be identical # # initialize empty PairCounter for the result of summation: sum_stat = PairCounter() # use the empty PairCounter to iterate over: for k, v in sum_stat._stat[filter].items(): if k != "chromsizes" and ( k not in self._stat[filter] or k not in other._stat[filter] ): # Skip any missing fields and warn logger.warning( f"{k} not found in at least one of the input stats, skipping" ) continue # not nested fields are summed trivially: if isinstance(v, int): sum_stat._stat[filter][k] = ( self._stat[filter][k] + other._stat[filter][k] ) # sum nested dicts/arrays in a context dependet manner: else: if k in ["pair_types", "dedup", "summary"]: # handy function for summation of a pair of dicts: # https://stackoverflow.com/questions/10461531/merge-and-sum-of-two-dictionaries sum_dicts = lambda dict_x, dict_y: { key: dict_x.get(key, 0) + dict_y.get(key, 0) for key in set(dict_x) | set(dict_y) } # sum a pair of corresponding dicts: sum_stat._stat[filter][k] = sum_dicts( self._stat[filter][k], other._stat[filter][k] ) elif k == "chrom_freq": # union list of keys (chr1,chr2) with potential duplicates: union_keys_with_dups = list(self._stat[filter][k].keys()) + list( other._stat[filter][k].keys() ) # dict.fromkeys will take care of keys' order and duplicates in a consistent manner: # https://stackoverflow.com/questions/1720421/how-to-concatenate-two-lists-in-python # last comment to the 3rd Answer sum_stat._stat[filter][k] = dict.fromkeys(union_keys_with_dups) # perform a summation: for union_key in sum_stat._stat[filter][k]: sum_stat._stat[filter][k][union_key] = self._stat[filter][ k ].get(union_key, 0) + other._stat[filter][k].get(union_key, 0) elif k == "dist_freq": for dirs in sum_stat[k]: from functools import reduce def reducer(accumulator, element): for key, value in element.items(): accumulator[key] = accumulator.get(key, 0) + value return accumulator sum_stat[k][dirs] = reduce( reducer, [self._stat[filter][k][dirs], other._stat[filter][k][dirs]], {}, ) # sum_stat[k][dirs] = self._stat[filter][k][dirs] + other._stat[filter][k][dirs] elif k == "chromsizes": if k in self._stat[filter] and k in other._stat[filter]: if self._stat[filter][k] == other._stat[filter][k]: sum_stat._stat[filter][k] = self._stat[filter][k] elif ( len(self._stat[filter][k]) == 0 or len(other._stat[filter][k]) == 0 ): logger.warning( "One of the stats has no chromsizes recorded," "writing the one that is present to the output" ) if len(self._stat[filter][k]) > 0: sum_stat._stat[filter][k] = self._stat[filter][k] else: sum_stat._stat[filter][k] = other._stat[filter][k] else: raise ValueError( "Can't merge stats with different chromsizes" ) else: logger.warning( "One or both stats don't have chromsizes recorded" ) return sum_stat # we need this to be able to sum(list_of_PairCounters) def __radd__(self, other): if other == 0: return self else: return self.__add__(other) def flatten(self, filter="no_filter"): """return a flattened dict (formatted same way as .stats file) Performed for a single filter.""" # dict for flat store: flat_stat = {} # Storing statistics for k, v in self._stat[filter].items(): if isinstance(v, int): flat_stat[k] = v # store nested dicts/arrays in a context dependet manner: # nested categories are stored only if they are non-trivial else: if (k == "dist_freq") and v: for i in range(len(self._dist_bins)): for dirs, freqs in v.items(): # last bin is treated differently: "100000+" vs "1200-3000": if i != len(self._dist_bins) - 1: dist = self._dist_bins[i] dist_next = self._dist_bins[i + 1] formatted_key = self._KEY_SEP.join( ["{}", "{}-{}", "{}"] ).format(k, dist, dist_next, dirs) else: formatted_key = self._KEY_SEP.join( ["{}", "{}+", "{}"] ).format(k, dist, dirs) # store key,value pair: flat_stat[formatted_key] = freqs[dist] elif (k in ["pair_types", "dedup", "chromsizes"]) and v: # 'pair_types' and 'dedup' are simple dicts inside, # treat them the exact same way: for k_item, freq in v.items(): formatted_key = self._KEY_SEP.join(["{}", "{}"]).format( k, k_item ) # store key,value pair: flat_stat[formatted_key] = freq elif (k == "chrom_freq") and v: for (chrom1, chrom2), freq in v.items(): formatted_key = self._KEY_SEP.join(["{}", "{}", "{}"]).format( k, chrom1, chrom2 ) # store key,value pair: flat_stat[formatted_key] = freq elif (k == "summary") and v: for key, frac in v.items(): formatted_key = self._KEY_SEP.join(["{}", "{}"]).format(k, key) # store key,value pair: flat_stat[formatted_key] = frac # return flattened dict return flat_stat def format_yaml(self, filter="no_filter"): """return a formatted dict (for the yaml output) Performed for all filters at once.""" from copy import deepcopy formatted_stat = {key: {} for key in self.filters.keys()} # Storing statistics for each filter for key in self.filters.keys(): for k, v in self._stat[key].items(): if isinstance(v, int): formatted_stat[key][k] = v # store nested dicts/arrays in a context dependet manner: # nested categories are stored only if they are non-trivial else: if (k != "chrom_freq") and v: # simple dicts inside # treat them the exact same way: formatted_stat[key][k] = deepcopy(v) elif (k == "chrom_freq") and v: # need to convert tuples of chromosome names to str freqs = {} for (chrom1, chrom2), freq in sorted(v.items()): freqs[ self._KEY_SEP.join(["{}", "{}"]).format(chrom1, chrom2) ] = freq # store key,value pair: formatted_stat[key][k] = deepcopy(freqs) # return formatted dict return formatted_stat def save(self, outstream, yaml=False, filter="no_filter"): """save PairCounter to tab-delimited text file. Flattened version of PairCounter is stored in the file. Parameters ---------- outstream: file handle yaml: is output in yaml format or table filter: filter to output in tsv mode Note ---- The order of the keys is not guaranteed Merging several .stats is not associative with respect to key order: merge(A,merge(B,C)) != merge(merge(A,B),C). Theys shou5ld match exactly, however, when soprted: sort(merge(A,merge(B,C))) == sort(merge(merge(A,B),C)) """ if not self._summaries_calculated: self.calculate_summaries() # write flattened version of the PairCounter to outstream, # will output all the filters if yaml: import yaml data = self.format_yaml() yaml.dump(data, outstream, default_flow_style=False, sort_keys=False) else: # will output a single filter data = self.flatten(filter=filter) for k, v in data.items(): outstream.write("{}{}{}\n".format(k, self._SEP, v)) def save_bytile_dups(self, outstream): """save bytile duplication counts to a tab-delimited text file. Parameters ---------- outstream: file handle """ if self._save_bytile_dups: self._bytile_dups.reset_index().to_csv(outstream, sep="\t", index=False) else: logger.error("Bytile dups are not calculated, cannot save.") def __repr__(self): return str(self._stat) ################## # Other functions: def do_merge(output, files_to_merge, **kwargs): # Parse all stats files. stats = [] for stat_file in files_to_merge: f = fileio.auto_open( stat_file, mode="r", nproc=kwargs.get("nproc_in"), command=kwargs.get("cmd_in", None), ) # use a factory method to instanciate PairCounter if kwargs.get("yaml", False): stat = PairCounter.from_yaml(f) else: stat = PairCounter.from_file(f) stats.append(stat) f.close() # combine stats from several files (files_to_merge): out_stat = sum(stats) # Save merged stats. outstream = fileio.auto_open( output, mode="w", nproc=kwargs.get("nproc_out"), command=kwargs.get("cmd_out", None), ) # save statistics to file ... out_stat.save(outstream) if outstream != sys.stdout: outstream.close() def estimate_library_complexity(nseq, ndup, nopticaldup=0): """Estimate library complexity accounting for optical/clustering duplicates Parameters ---------- nseq : int Total number of sequences ndup : int Total number of duplicates nopticaldup : int, optional Number of non-PCR duplicates, by default 0 Returns ------- float Estimated complexity """ nseq = nseq - nopticaldup if nseq == 0: logger.warning("Empty of fully duplicated library, can't estimate complexity") return 0 ndup = ndup - nopticaldup u = (nseq - ndup) / nseq if u == 0: logger.warning( "All the sequences are duplicates. Do you run complexity estimation on duplicates file?" ) return 0 seq_to_complexity = special.lambertw(-np.exp(-1 / u) / u).real + 1 / u complexity = float(nseq / seq_to_complexity) # clean np.int64 data type return complexity def analyse_bytile_duplicate_stats(df_dups, tile_dup_regex=False): """Count by-tile duplicates Parameters ---------- dups : pd.DataFrame Dataframe with duplicates that contains pared read IDs tile_dup_regex : bool, optional See extract_tile_info for details, by default False Returns ------- pd.DataFrame Grouped multi-indexed dataframe of pairwise by-tile duplication counts """ df_dups = df_dups.copy() df_dups["tile"] = extract_tile_info(df_dups["readID"], regex=tile_dup_regex) df_dups["parent_tile"] = extract_tile_info( df_dups["parent_readID"], regex=tile_dup_regex ) df_dups["same_tile"] = df_dups["tile"] == df_dups["parent_tile"] bytile_dups = ( df_dups.groupby(["tile", "parent_tile"]) .size() .reset_index(name="dup_count") .sort_values(["tile", "parent_tile"]) ) bytile_dups[["tile", "parent_tile"]] = np.sort( bytile_dups[["tile", "parent_tile"]].values, axis=1 ) bytile_dups = bytile_dups.groupby(["tile", "parent_tile"]).sum() return bytile_dups def extract_tile_info(series, regex=False): """Extract the name of the tile for each read name in the series Parameters ---------- series : pd.Series Series containing read IDs regex : bool, optional Regex to extract fields from the read IDs that correspond to tile IDs. By default False, uses a faster predefined approach for typical Illumina read names Example: r"(?:\w+):(?:\w+):(\w+):(\w+):(\w+):(?:\w+):(?:\w+)" Returns ------- Series Series containing tile IDs as strings """ if regex: split = series.str.extractall(regex).unstack().droplevel(1, axis=1) if split.shape[1] < 4: raise ValueError( f"Unable to convert tile names, does your readID have the tile information?\nHint: SRA removes tile information from readID.\nSample of your readIDs:\n{series.head()}" ) return split[0] + ":" + split[1] + ":" + split[2] else: try: split = [":".join(name.split(":")[2:5]) for name in series] except: raise ValueError( f"Unable to convert tile names, does your readID have the tile information?\nHint: SRA removes tile information from readID.\nSample of your readIDs:\n{series.head()}" ) return split def yaml2pandas(yaml_path): """Generate a pandas DataFrame with stats from a yaml file Formats the keys within each filter using the PairCounter.flatten() method, to achieve same naming as in non-yaml stats files. Parameters ---------- yaml_path : str Path to a yaml-formatted file with stats Returns ------- pd.DataFrame Dataframe with filter names in the index and stats in columns """ counter = PairCounter.from_yaml(open(yaml_path, "r")) stats = pd.concat( [ pd.DataFrame(counter.flatten(filter=filter), index=[filter]) for filter in counter.filters ] ) return stats pairtools-1.0.3/pytest.ini000066400000000000000000000003331452673171500155720ustar00rootroot00000000000000[pytest] addopts = --cov pairtools --cov-config .coveragerc --cov-report term-missing --cov-report html --cov-report xml filterwarnings = ignore::PendingDeprecationWarning testpaths = tests pairtools-1.0.3/readthedocs.yml000066400000000000000000000002021452673171500165440ustar00rootroot00000000000000 # .readthedocs.yml build: image: latest python: version: 3.8 pip_install: true requirements_file: requirements_doc.txt pairtools-1.0.3/requirements-dev.txt000066400000000000000000000000641452673171500176020ustar00rootroot00000000000000-r requirements.txt pytest pytest-flake8 pytest-cov pairtools-1.0.3/requirements.txt000066400000000000000000000001351452673171500170250ustar00rootroot00000000000000cython numpy>=1.10 click>=6.6 scipy>=1.7.0 pandas>=1.3.4 pysam>=0.15.0 pyyaml bioframe>=0.3.3pairtools-1.0.3/requirements_doc.txt000066400000000000000000000002331452673171500176510ustar00rootroot00000000000000Cython numpy nose scipy pandas pysam bioframe click>=7.0 git+https://github.com/golobor/sphinx-click ipython nbsphinx Sphinx sphinx_rtd_theme docutils>0.16pairtools-1.0.3/setup.py000066400000000000000000000077271452673171500152710ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import io import os import re import glob from setuptools import find_packages, setup from setuptools.extension import Extension try: from Cython.Distutils import build_ext as _build_ext from Cython.Build import cythonize HAVE_CYTHON = True except ImportError: from setuptools.command.build_ext import build_ext as _build_ext HAVE_CYTHON = False classifiers = """\ Development Status :: 4 - Beta Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 """ def _read(*parts, **kwargs): filepath = os.path.join(os.path.dirname(__file__), *parts) encoding = kwargs.pop("encoding", "utf-8") with io.open(filepath, encoding=encoding) as fh: text = fh.read() return text def get_version(): version = re.search( r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', _read("pairtools", "__init__.py"), re.MULTILINE, ).group(1) return version long_description = _read("README.md") install_requires = [l for l in _read("requirements.txt").split("\n") if l] def get_ext_modules(): ext = ".pyx" if HAVE_CYTHON else ".c" src_files = glob.glob( os.path.join(os.path.dirname(__file__), "pairtools", "lib", "*" + ext) ) ext_modules = [] for src_file in src_files: name = "pairtools.lib." + os.path.splitext(os.path.basename(src_file))[0] if not "pysam" in name and not "regions" in name: ext_modules.append(Extension(name, [src_file])) elif "regions" in name: ext_modules.append( Extension( name, [src_file], language="c++", ) ) else: import pysam ext_modules.append( Extension( name, [src_file], extra_link_args=pysam.get_libraries(), include_dirs=pysam.get_include(), define_macros=pysam.get_defines(), #extra_objects=pysam.get_libraries(), ) ) if HAVE_CYTHON: # .pyx to .c ext_modules = cythonize(ext_modules) # , annotate=True return ext_modules class build_ext(_build_ext): # Extension module build configuration def finalize_options(self): _build_ext.finalize_options(self) # Fix to work with bootstrapped numpy installation # http://stackoverflow.com/a/21621689/579416 # Prevent numpy from thinking it is still in its setup process: __builtins__.__NUMPY_SETUP__ = False import numpy self.include_dirs.append(numpy.get_include()) def run(self): # Import numpy here, only when headers are needed import numpy # Add numpy headers to include_dirs self.include_dirs.append(numpy.get_include()) # Call original build_ext command _build_ext.run(self) setup( name="pairtools", author="Open2C", author_email="open.chromosome.collective@gmail.com", version=get_version(), license="MIT", description="CLI tools to process mapped Hi-C data", long_description=long_description, long_description_content_type="text/markdown", keywords=["genomics", "bioinformatics", "Hi-C", "contact"], url="https://github.com/open2c/pairtools", ext_modules=get_ext_modules(), cmdclass={"build_ext": build_ext}, zip_safe=False, classifiers=[s.strip() for s in classifiers.split("\n") if s], install_requires=install_requires, python_requires=">=3.7", entry_points={ "console_scripts": [ "pairtools = pairtools.cli:cli", #'pairsamtools = pairtools.cli:cli', ] }, packages=find_packages(), )pairtools-1.0.3/tests/000077500000000000000000000000001452673171500147045ustar00rootroot00000000000000pairtools-1.0.3/tests/data/000077500000000000000000000000001452673171500156155ustar00rootroot00000000000000pairtools-1.0.3/tests/data/mock.2.pairsam000066400000000000000000000021301452673171500202600ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:100 #samheader: @SQ SN:chr2 LN:100 #samheader: @SQ SN:chr3 LN:100 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr2 chr3 chr1 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2 readid01 chr1 1 chr2 25 + + UU readid01129chr1160101Mchr2250CGFFXS:i:0Yt:Z:UU readid0165chr22560101Mchr110ATIIXS:i:0Yt:Z:UU readid02 chr1 1 chr1 40 + + UU readid02129chr1160101Mchr1400CGFFXS:i:0Yt:Z:UU readid0265chr14060101Mchr110ATIIXS:i:0Yt:Z:UU readid03 chr1 1 chr1 3 + + UR readid03129chr1160101Mchr130CGFFXS:i:0Yt:Z:UR readid0365chr1360101Mchr110ATIIXS:i:0Yt:Z:UR readid04 ! 0 chr1 3 - + NU readid04129chr1160101Mchr130CGFFXS:i:0Yt:Z:NU readid0465chr1360101Mchr110ATIIXS:i:0Yt:Z:NU readid05 ! 0 ! 0 - - NN readid05129chr1160101Mchr130CGFFXS:i:0Yt:Z:NN readid0565chr1360101Mchr110ATIIXS:i:0Yt:Z:NNpairtools-1.0.3/tests/data/mock.4dedup.pairsam000066400000000000000000000010731452673171500213110ustar00rootroot00000000000000## pairs format v1.0.0 #sorted: chr1-chr2-pos1-pos2 #shape: upper triangle #genome_assembly: unknown #chromosomes: chr1 chr2 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2 readid1 ! 0 chr1 25 - + NU . . readid2 ! 0 chr1 25 - + NU . . readid3 chr1 1 chr1 20 + + UU . . readid4 chr1 1 chr1 20 + + UU . . readid5 chr1 1 chr1 25 + + UU . . readid6 chr1 1 chr1 27 + + UU . . readid7 chr1 1 chr1 28 + - UU . . readid8 chr1 1 chr1 28 + + UU . . readid9 chr1 1 chr1 50 + + UU . . readid10 chr1 2 chr1 21 + + UU . . readid11 chr1 1 chr2 25 + + UU . .pairtools-1.0.3/tests/data/mock.4filterbycov.pairs000066400000000000000000000013151452673171500222210ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:100 #samheader: @SQ SN:chr2 LN:100 #samheader: @SQ SN:chr3 LN:100 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr2 chr3 chr1 #chromsize: chr2 100 #chromsize: chr3 100 #chromsize: chr1 100 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2 readid01 chr2 40 chr3 2 + + UU readid02 chr1 6 chr1 9 + + UR readid03 chr1 1 chr2 20 + + UU readid04 chr1 50 chr1 1 + + UU readid05 chr1 1 chr1 5 + + UU readid06 chr1 20 chr1 30 + + UR readid07 ! 0 chr1 3 - + NU readid08 ! 0 chr1 3 - + MU readid09 ! 0 ! 0 - - WW pairtools-1.0.3/tests/data/mock.4flip.pairs000066400000000000000000000016131452673171500206240ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:10000 #samheader: @SQ SN:chr2 LN:10000 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr1 chr2 #chromsize: chr1 10000 #chromsize: chr2 10000 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2 readid01 chr1 1 chr1 2 + + UU readid02 chr1 1 chr2 2 + + UU readid03 chr1 2 chr1 1 + + UU readid04 chr1 21 chr1 2 + + UU readid05 chr2 2 chr1 1 + + UU readid06 chr2 1 chr1 2 + + UU readid07 chr1 2 chr1 1 - + UU readid08 chr1 2 chr1 1 + + RU readid09 ! 0 chr1 3 - + NU readid10 ! 0 chr1 3 - + MU readid11 ! 0 ! 0 + - WW readid12 chr1 1 chrU 1 + + UU readid13 chrU 1 chr1 1 + + UU readid14 chrU 100 chrU 1 + + UU readid15 chrU1 100 chrU 100 + + UU readid16 ! 0 chrU 100 + + NU readid17 chrU 0 ! 0 + + UN pairtools-1.0.3/tests/data/mock.4stats.pairs000066400000000000000000000013011452673171500210220ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:100 #samheader: @SQ SN:chr2 LN:100 #samheader: @SQ SN:chr3 LN:100 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr2 chr3 chr1 #chromsize: chr2 100 #chromsize: chr3 100 #chromsize: chr1 100 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type readid01 chr1 1 chr1 50 + + UU readid02 chr1 1 chr1 50 + + DD readid03 chr1 1 chr1 2 + + UU readid04 chr1 1 chr1 3 + + UR readid05 chr1 1 chr2 20 + + UU readid06 chr2 1 chr3 2 + + UU readid07 ! 0 chr1 3 - + NU readid08 ! 0 chr1 3 - + MU readid09 ! 0 ! 0 - - WW pairtools-1.0.3/tests/data/mock.chrom.sizes000066400000000000000000000000261452673171500207320ustar00rootroot00000000000000chr1 10000 chr2 10000 pairtools-1.0.3/tests/data/mock.pairsam000066400000000000000000000031101452673171500201170ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:100 #samheader: @SQ SN:chr2 LN:100 #samheader: @SQ SN:chr3 LN:100 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr2 chr3 chr1 #chromsize: chr2 100 #chromsize: chr3 100 #chromsize: chr1 100 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2 readid01 chr1 1 chr2 20 + + UU readid01129chr1160101Mchr2200CGFFXS:i:0Yt:Z:UU readid0165chr22060101Mchr110ATIIXS:i:0Yt:Z:UU readid02 chr1 1 chr1 50 + + UU readid02129chr1160101Mchr1500CGFFXS:i:0Yt:Z:UU readid0265chr15060101Mchr110ATIIXS:i:0Yt:Z:UU readid03 chr1 1 chr1 2 + + UU readid03129chr1160101Mchr120CGFFXS:i:0Yt:Z:UU readid0365chr1260101Mchr110ATIIXS:i:0Yt:Z:UU readid04 chr1 1 chr1 3 + + UR readid04129chr1160101Mchr130CGFFXS:i:0Yt:Z:UR readid0465chr1360101Mchr110ATIIXS:i:0Yt:Z:UR readid05 chr2 1 chr3 2 + + UU readid05129chr2160101Mchr320CGFFXS:i:0Yt:Z:UU readid0565chr3260101Mchr210ATIIXS:i:0Yt:Z:UU readid06 ! 0 chr1 3 - + NU readid06129chr1160101Mchr130CGFFXS:i:0Yt:Z:NU readid0665chr1360101Mchr110ATIIXS:i:0Yt:Z:NU readid07 ! 0 chr1 3 - + MU readid07129chr1160101Mchr130CGFFXS:i:0Yt:Z:NU readid0765chr1360101Mchr110ATIIXS:i:0Yt:Z:NU readid08 ! 0 ! 0 - - WW readid08129chr1160101Mchr130CGFFXS:i:0Yt:Z:WW readid0865chr1360101Mchr110ATIIXS:i:0Yt:Z:WW pairtools-1.0.3/tests/data/mock.parse-all.sam000066400000000000000000000265061452673171500211400ustar00rootroot00000000000000@SQ SN:chr1 LN:10000 @SQ SN:chr2 LN:10000 @PG ID:mock PN:mock VN:0.0.0 CL:mock readid01 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid01 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid02 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU,1,R1-2 readid02 145 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU,1,R1-2 readid03 65 chr1 10 60 1S49M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid03 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid04 81 chr1 10 60 49M1S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU,1,R1-2 readid04 161 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU,1,R1-2 readid05 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid05 145 chr1 200 60 1S49M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid06 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid06 145 chr1 200 60 49M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid07 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU,1,R1-2 readid07 145 chr1 200 60 1S48M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU,1,R1-2 readid08 105 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid08 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid09 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid09 169 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid10 77 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN,1,R1-2 readid10 141 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN,1,R1-2 readid11 105 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid11 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid12 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid12 169 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid13 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU,1,R1-2 readid13 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU,1,R1-2 readid14 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU,1,R1-2 readid14 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU,1,R1-2 readid15 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM,1,R1-2 readid15 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM,1,R1-2 readid16 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid16 2129 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid16 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid17 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|chr1,200,chr1,5324,+,-,UU,2,R1-2 readid17 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|chr1,200,chr1,5324,+,-,UU,2,R1-2 readid17 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|chr1,200,chr1,5324,+,-,UU,2,R1-2 readid18 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,200,chr1,300,+,+,UU,2,R1-2 readid18 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,200,chr1,300,+,+,UU,2,R1-2 readid18 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,300,+,+,UU,1,R1|chr1,200,chr1,300,+,+,UU,2,R1-2 readid19 81 chr1 300 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid19 2113 chr1 10 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr10,300,-,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid19 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1 readid20 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,300,chr1,2000,+,+,UU,2,R1-2|chr1,200,chr1,2024,+,-,UU,3,R2 readid20 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,300,chr1,2000,+,+,UU,2,R1-2|chr1,200,chr1,2024,+,-,UU,3,R2 readid20 129 chr1 200 60 25M25S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,300,chr1,2000,+,+,UU,2,R1-2|chr1,200,chr1,2024,+,-,UU,3,R2 readid20 2177 chr1 2000 60 25S25M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:chr1,10,chr1,324,+,-,UU,1,R1|chr1,300,chr1,2000,+,+,UU,2,R1-2|chr1,200,chr1,2024,+,-,UU,3,R2 readid21 105 chr1 10 60 25M25S * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,NU,2,R1-2 readid21 2169 chr1 5300 60 25M25H * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,NU,2,R1-2 readid21 141 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,NU,2,R1-2 readid22 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,MU,2,R1-2 readid22 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,MU,2,R1-2 readid22 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,MU,2,R1-2 readid23 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,XX,1,R1-2 readid24 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,NU,2,R1-2 readid24 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,5300,+,+,UU,1,R1|!,0,chr1,5324,-,-,NU,2,R1-2 pairtools-1.0.3/tests/data/mock.parse2.sam000066400000000000000000000265061452673171500204540ustar00rootroot00000000000000@SQ SN:chr1 LN:10000 @SQ SN:chr2 LN:10000 @PG ID:mock PN:mock VN:0.0.0 CL:mock readid01 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid01 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid02 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU,1,R1-2 readid02 145 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU,1,R1-2 readid03 65 chr1 10 60 1S49M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid03 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU,1,R1-2 readid04 81 chr1 10 60 49M1S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU,1,R1-2 readid04 161 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU,1,R1-2 readid05 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid05 145 chr1 200 60 1S49M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid06 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid06 145 chr1 200 60 49M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU,1,R1-2 readid07 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU,1,R1-2 readid07 145 chr1 200 60 1S48M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU,1,R1-2 readid08 105 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid08 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid09 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid09 169 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU,1,R1-2 readid10 77 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN,1,R1-2 readid10 141 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN,1,R1-2 readid11 105 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid11 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid12 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid12 169 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM,1,R1-2 readid13 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU,1,R1-2 readid13 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU,1,R1-2 readid14 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU,1,R1-2 readid14 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU,1,R1-2 readid15 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM,1,R1-2 readid15 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM,1,R1-2 readid16 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid16 2129 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid16 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid17 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|chr1,249,chr1,5300,+,-,UU,2,R1-2 readid17 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|chr1,249,chr1,5300,+,-,UU,2,R1-2 readid17 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|chr1,249,chr1,5300,+,-,UU,2,R1-2 readid18 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,249,chr1,324,+,+,UU,2,R1-2 readid18 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,249,chr1,324,+,+,UU,2,R1-2 readid18 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,249,chr1,324,+,+,UU,2,R1-2 readid19 81 chr1 300 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid19 2113 chr1 10 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr10,300,-,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid19 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,324,+,+,UU,1,R1 readid20 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,324,chr1,2024,+,+,UU,2,R1-2|chr1,224,chr1,2000,+,-,UU,3,R2 readid20 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,324,chr1,2024,+,+,UU,2,R1-2|chr1,224,chr1,2000,+,-,UU,3,R2 readid20 129 chr1 200 60 25M25S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,324,chr1,2024,+,+,UU,2,R1-2|chr1,224,chr1,2000,+,-,UU,3,R2 readid20 2177 chr1 2000 60 25S25M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:chr1,34,chr1,300,+,-,UU,1,R1|chr1,324,chr1,2024,+,+,UU,2,R1-2|chr1,224,chr1,2000,+,-,UU,3,R2 readid21 105 chr1 10 60 25M25S * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,NU,2,R1-2 readid21 2169 chr1 5300 60 25M25H * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,NU,2,R1-2 readid21 141 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,NU,2,R1-2 readid22 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,MU,2,R1-2 readid22 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,-,UU,1,R1|!,0,chr1,5300,-,-,MU,2,R1-2 readid22 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,5324,+,-,UU,1,R1|!,0,chr1,5300,-,-,MU,2,R1-2 readid23 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,XX,1,R1-2 readid24 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,NU,2,R1-2 readid24 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 CT:Z:SIMULATED:chr1,34,chr1,5324,+,+,UU,1,R1|!,0,chr1,5300,-,-,NU,2,R1-2 pairtools-1.0.3/tests/data/mock.rsites.bed000066400000000000000000000001011452673171500205220ustar00rootroot00000000000000chr1 0 100 chr1 100 500 chr1 500 10000 chr2 0 200 chr2 200 10000 pairtools-1.0.3/tests/data/mock.sam000066400000000000000000000235141452673171500172550ustar00rootroot00000000000000@SQ SN:chr1 LN:1000 @SQ SN:chr2 LN:1000 @PG ID:mock PN:mock VN:0.0.0 CL:mock readid01 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU readid01 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU readid02 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU readid02 145 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,249,+,-,UU readid03 65 chr1 10 60 1S49M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU readid03 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UU readid04 81 chr1 10 60 49M1S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU readid04 161 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,58,chr1,200,-,+,UU readid05 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU readid05 145 chr1 200 60 1S49M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU readid06 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU readid06 145 chr1 200 60 49M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,248,+,-,UU readid07 97 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU readid07 145 chr1 200 60 1S48M1S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,247,+,-,UU readid08 105 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU readid08 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU readid09 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU readid09 169 chr1 10 60 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,NU readid10 77 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN readid10 141 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NN readid11 105 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM readid11 149 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM readid12 85 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM readid12 169 chr1 10 0 50M = 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,NM readid13 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU readid13 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,200,-,+,MU readid14 65 chr1 10 60 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU readid14 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,chr1,10,-,+,MU readid15 65 chr1 10 0 50M chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM readid15 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,MM readid16 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,-,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid16 2129 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid16 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid17 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid17 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid17 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,WW readid18 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid18 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid18 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,WW readid19 81 chr1 300 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25H,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid19 2113 chr1 10 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr10,300,-,25M25S,60,0; CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid19 129 chr1 200 60 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:chr1,10,chr1,200,+,+,UR readid20 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,300,+,25M25H,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid20 2113 chr1 300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid20 129 chr1 200 60 25M25S chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:!,10,!,0,-,-,WW readid20 2177 chr1 2000 60 25S25M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,2000,+,25S25M,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid21 105 chr1 10 60 25M25S * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid21 2169 chr1 5300 60 25M25H * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid21 141 * 0 0 * chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,WW readid22 65 chr1 10 60 25M25S chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,5300,-,25M25H,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid22 2129 chr1 5300 60 25M25H chr1 200 0 AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 SA:Z:chr1,10,+,25M25S,60,0; CT:Z:SIMULATED:!,0,!,0,-,-,WW readid22 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,WW readid23 129 chr1 200 0 50M chr1 10 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NM:i:0 NM:i:0 CT:Z:SIMULATED:!,0,!,0,-,-,XX pairtools-1.0.3/tests/data/mock.test-restr.pairs000066400000000000000000000013161452673171500217220ustar00rootroot00000000000000## pairs format v1.0.0 #shape: upper triangle #genome_assembly: unknown #samheader: @SQ SN:chr1 LN:10000 #samheader: @SQ SN:chr2 LN:10000 #samheader: @PG ID:bwa PN:bwa VN:0.7.15-r1140 CL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz #chromosomes: chr1 chr2 #chromsize: chr1 10000 #chromsize: chr2 10000 #columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type rfrag_test1 rfrag_test2 readid01 chr1 1 chr2 20 + + UU 0 0 readid02 chr1 100 chr2 20 - + UU 0 0 readid03 chr1 100 chr2 20 + + UU 0 0 readid04 chr1 499 chr2 20 + + UU 1 0 readid05 chr1 600 chr2 20 + + UU 2 0 readid06 chr1 1 chr2 200 + + UU 0 0 readid07 chr1 1 chr2 500 + + UU 0 1 readid08 chr1 10001 chr2 10001 + + UU 2 1 pairtools-1.0.3/tests/test_dedup.py000066400000000000000000000114631452673171500174230ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest import tempfile testdir = os.path.dirname(os.path.realpath(__file__)) tmpdir = tempfile.TemporaryDirectory() tmpdir_name = tmpdir.name mock_pairsam_path_dedup = os.path.join(testdir, "data", "mock.4dedup.pairsam") dedup_path = os.path.join(tmpdir_name, "dedup.pairsam") unmapped_path = os.path.join(tmpdir_name, "unmapped.pairsam") dups_path = os.path.join(tmpdir_name, "dups.pairsam") dedup_max_path = os.path.join(tmpdir_name, "dedup_max.pairsam") unmapped_max_path = os.path.join(tmpdir_name, "unmapped_max.pairsam") dups_max_path = os.path.join(tmpdir_name, "dups_max.pairsam") dedup_markdups_path = os.path.join(tmpdir_name, "dedup.markdups.pairsam") unmapped_markdups_path = os.path.join(tmpdir_name, "unmapped.markdups.pairsam") dups_markdups_path = os.path.join(tmpdir_name, "dups.markdups.pairsam") max_mismatch = 1 @pytest.fixture def setup_dedup(): try: subprocess.check_output( [ "python", "-m", "pairtools", "dedup", mock_pairsam_path_dedup, "--output", dedup_path, "--output-dups", dups_path, "--output-unmapped", unmapped_path, "--max-mismatch", str(max_mismatch), ], ) subprocess.check_output( [ "python", "-m", "pairtools", "dedup", mock_pairsam_path_dedup, "--output", dedup_max_path, "--output-dups", dups_max_path, "--output-unmapped", unmapped_max_path, "--max-mismatch", str(max_mismatch), "--method", "max", ], ) subprocess.check_output( [ "python", "-m", "pairtools", "dedup", mock_pairsam_path_dedup, "--mark-dups", "--output", dedup_markdups_path, "--output-dups", dups_markdups_path, "--output-unmapped", unmapped_markdups_path, "--max-mismatch", str(max_mismatch), ], ) except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e def test_mock_pairsam(setup_dedup): pairsam_pairs = [ l.strip().split("\t") for l in open(mock_pairsam_path_dedup, "r") if not l.startswith("#") and l.strip() ] for (ddp, up, dp) in [ (dedup_path, unmapped_path, dups_path), (dedup_max_path, unmapped_max_path, dups_max_path), (dedup_markdups_path, unmapped_markdups_path, dups_markdups_path), ]: dedup_pairs = [ l.strip().split("\t") for l in open(ddp, "r") if not l.startswith("#") and l.strip() ] unmapped_pairs = [ l.strip().split("\t") for l in open(up, "r") if not l.startswith("#") and l.strip() ] dup_pairs = [ l.strip().split("\t") for l in open(dp, "r") if not l.startswith("#") and l.strip() ] # check that at least a few pairs remained in deduped and dup files assert len(dedup_pairs) > 0 assert len(dup_pairs) > 0 assert len(unmapped_pairs) > 0 import pandas as pd # check that all pairsam entries survived deduping: assert len(dedup_pairs) + len(unmapped_pairs) + len(dup_pairs) == len( pairsam_pairs ) def pairs_overlap(pair1, pair2, max_mismatch): overlap = ( (pair1[1] == pair2[1]) and (pair1[3] == pair2[3]) and (pair1[5] == pair2[5]) and (pair1[6] == pair2[6]) and (abs(int(pair1[2]) - int(pair2[2])) <= max_mismatch) and (abs(int(pair1[4]) - int(pair2[4])) <= max_mismatch) ) return overlap # check that deduped pairs do not overlap assert all( [ not pairs_overlap(pair1, pair2, max_mismatch) for i, pair1 in enumerate(dedup_pairs) for j, pair2 in enumerate(dedup_pairs) if i != j ] ) # check that the removed duplicates overlap with at least one of the # deduplicated entries assert all( [ any([pairs_overlap(pair1, pair2, 3) for pair2 in dedup_pairs]) for pair1 in dup_pairs ] ) tmpdir.cleanup() pairtools-1.0.3/tests/test_filterbycov.py000066400000000000000000000102041452673171500206420ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest import tempfile testdir = os.path.dirname(os.path.realpath(__file__)) mock_pairs_path_filterbycov = os.path.join(testdir, "data", "mock.4filterbycov.pairs") tmpdir = tempfile.TemporaryDirectory() tmpdir_name = tmpdir.name params = [ {"max_dist": 0, "max_cov": 3}, {"max_dist": 0, "max_cov": 2}, {"max_dist": 1, "max_cov": 1}, ] for p in params: p["lowcov_path"] = os.path.join( tmpdir_name, "lowcov.{}.{}.pairs".format(p["max_dist"], p["max_cov"]) ) p["highcov_path"] = os.path.join( tmpdir_name, "highcov.{}.{}.pairs".format(p["max_dist"], p["max_cov"]) ) p["unmapped_path"] = os.path.join( tmpdir_name, "unmapped.{}.{}.pairs".format(p["max_dist"], p["max_cov"]) ) @pytest.fixture def setup_filterbycov(): try: for p in params: subprocess.check_output( [ "python", "-m", "pairtools", "filterbycov", mock_pairs_path_filterbycov, "--output", p["lowcov_path"], "--output-highcov", p["highcov_path"], "--output-unmapped", p["unmapped_path"], "--max-dist", str(p["max_dist"]), "--max-cov", str(p["max_cov"]), ] ) except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e def test_mock_pairs(setup_filterbycov): all_pairs = [ l.strip().split("\t") for l in open(mock_pairs_path_filterbycov, "r") if not l.startswith("#") and l.strip() ] for p in params: lowcov_pairs = [ l.strip().split("\t") for l in open(p["lowcov_path"], "r") if not l.startswith("#") and l.strip() ] highcov_pairs = [ l.strip().split("\t") for l in open(p["highcov_path"], "r") if not l.startswith("#") and l.strip() ] unmapped_pairs = [ l.strip().split("\t") for l in open(p["unmapped_path"], "r") if not l.startswith("#") and l.strip() ] # check that at least a few pairs remained in deduped and dup files # assert len(lowcov_pairs) > 0 # assert len(highcov_pairs) > 0 # assert len(unmapped_pairs) > 0 # check that all pairs entries survived deduping: assert len(lowcov_pairs) + len(unmapped_pairs) + len(highcov_pairs) == len( all_pairs ) assert all([(pair[1] != "!" and pair[3] != "!") for pair in lowcov_pairs]) assert all([(pair[1] != "!" and pair[3] != "!") for pair in highcov_pairs]) assert all([(pair[1] == "!" or pair[3] == "!") for pair in unmapped_pairs]) def update_coverage(coverage, chrom, pos, max_dist): if chrom == "!": return coverage[chrom] = coverage.get(chrom, {}) for i in range(max(0, pos - max_dist), pos + max_dist + 1): coverage[chrom][i] = coverage[chrom].get(i, 0) + 1 coverage = {} for pair in all_pairs: update_coverage(coverage, pair[1], int(pair[2]), p["max_dist"]) update_coverage(coverage, pair[3], int(pair[4]), p["max_dist"]) for pair in lowcov_pairs: # print (p['max_cov'],p['max_dist']) # print (pair, coverage[pair[1]][int(pair[2])]) # print (pair, coverage[pair[3]][int(pair[4])]) assert coverage[pair[1]][int(pair[2])] <= p["max_cov"] assert coverage[pair[3]][int(pair[4])] <= p["max_cov"] for pair in highcov_pairs: # print (p['max_cov'],p['max_dist']) # print (pair, coverage[pair[1]][int(pair[2])]) # print (pair, coverage[pair[3]][int(pair[4])]) assert (coverage[pair[1]][int(pair[2])] > p["max_cov"]) or ( coverage[pair[3]][int(pair[4])] > p["max_cov"] ) tmpdir.cleanup() pairtools-1.0.3/tests/test_flip.py000066400000000000000000000036751452673171500172620ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest testdir = os.path.dirname(os.path.realpath(__file__)) mock_pairs_path = os.path.join(testdir, "data", "mock.4flip.pairs") mock_chromsizes_path = os.path.join(testdir, "data", "mock.chrom.sizes") def test_flip(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "flip", mock_pairs_path, "-c", mock_chromsizes_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e orig_pairs = [ l.strip().split("\t") for l in open(mock_pairs_path, "r") if not l.startswith("#") and l.strip() ] flipped_pairs = [ l.strip().split("\t") for l in result.split("\n") if not l.startswith("#") and l.strip() ] chrom_enum = {"!": 0, "chr1": 1, "chr2": 2, "chrU": 3, "chrU1": 4} # chrU stands for unannotated chromosome, which has less priority than annotated ones # chrU1 is another unannotated chromosome, which should go lexigographically after chrU for orig_pair, flipped_pair in zip(orig_pairs, flipped_pairs): has_correct_order = (chrom_enum[orig_pair[1]], int(orig_pair[2])) <= ( chrom_enum[orig_pair[3]], int(orig_pair[4]), ) if has_correct_order: assert all([c1 == c2 for c1, c2 in zip(orig_pair, flipped_pair)]) if not has_correct_order: assert orig_pair[1] == flipped_pair[3] assert orig_pair[2] == flipped_pair[4] assert orig_pair[3] == flipped_pair[1] assert orig_pair[4] == flipped_pair[2] assert orig_pair[5] == flipped_pair[6] assert orig_pair[6] == flipped_pair[5] assert orig_pair[7] == flipped_pair[7][::-1] pairtools-1.0.3/tests/test_header.py000066400000000000000000000026071452673171500175520ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import pytest import subprocess testdir = os.path.dirname(os.path.realpath(__file__)) def test_generate(): """Test generation of the header. Example run: pairtools header generate tests/data/mock.pairsam \ --chroms-path tests/data/mock.chrom.sizes --pairsam \ --sam-path tests/data/mock.sam """ mock_sam_path = os.path.join(testdir, "data", "mock.sam") mock_pairs_path = os.path.join(testdir, "data", "mock.pairsam") mock_chroms_path = os.path.join(testdir, "data", "mock.chrom.sizes") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "header", "generate", "--chroms-path", mock_chroms_path, "--sam-path", mock_sam_path, "--pairsam", mock_pairs_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly sam_header = [l.strip() for l in open(mock_sam_path, "r") if l.startswith("@")] pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in sam_header: assert any([l in l2 for l2 in pairsam_header]) pairtools-1.0.3/tests/test_headerops.py000066400000000000000000000105051452673171500202700ustar00rootroot00000000000000# -*- coding: utf-8 -*- from pairtools.lib import headerops import pytest def test_make_standard_header(): header = headerops.make_standard_pairsheader() assert any([l.startswith("## pairs format") for l in header]) assert any([l.startswith("#shape") for l in header]) assert any([l.startswith("#columns") for l in header]) header = headerops.make_standard_pairsheader( chromsizes=[("b", 100), ("c", 100), ("a", 100)] ) assert sum([l.startswith("#chromsize") for l in header]) == 3 def test_samheaderops(): header = headerops.make_standard_pairsheader() samheader = [ "@SQ\tSN:chr1\tLN:100", "@SQ\tSN:chr2\tLN:100", "@SQ\tSN:chr3\tLN:100", "@PG\tID:bwa\tPN:bwa\tCL:bwa", "@PG\tID:bwa-2\tPN:bwa\tCL:bwa\tPP:bwa", ] header_with_sam = headerops.insert_samheader(header, samheader) assert len(header_with_sam) == len(header) + len(samheader) for l in samheader: assert any([l2.startswith("#samheader") and l in l2 for l2 in header_with_sam]) # test adding new programs to the PG chain header_extra_pg = headerops.append_new_pg(header_with_sam, ID="test", PN="test") # test if all lines got transferred assert all([(old_l in header_extra_pg) for old_l in header_with_sam]) # test if one PG got added assert len(header_extra_pg) == len(header_with_sam) + 1 # test if the new PG has PP matching the ID of one of already existing PGs new_l = [l for l in header_extra_pg if l not in header_with_sam][0] pp = [f[3:] for f in new_l.split("\t") if f.startswith("PP:")][0] assert ( len( [ l for l in header_extra_pg if l.startswith("#samheader") and ("\tID:{}\t".format(pp) in l) ] ) == 1 ) def test_merge_pairheaders(): headers = [["## pairs format v1.0"], ["## pairs format v1.0"]] merged_header = headerops._merge_pairheaders(headers) assert merged_header == headers[0] headers = [["## pairs format v1.0", "#a"], ["## pairs format v1.0", "#b"]] merged_header = headerops._merge_pairheaders(headers) assert merged_header == ["## pairs format v1.0", "#a", "#b"] headers = [ ["## pairs format v1.0", "#chromsize: chr1 100", "#chromsize: chr2 200"], ["## pairs format v1.0", "#chromsize: chr1 100", "#chromsize: chr2 200"], ] merged_header = headerops._merge_pairheaders(headers) assert merged_header == headers[0] def test_merge_different_pairheaders(): with pytest.raises(Exception): headers = [["## pairs format v1.0"], ["## pairs format v1.1"]] merged_header = headerops._merge_pairheaders(headers) def test_force_merge_pairheaders(): headers = [ ["## pairs format v1.0", "#chromsize: chr1 100"], ["## pairs format v1.0", "#chromsize: chr2 200"], ] merged_header = headerops._merge_pairheaders(headers, force=True) assert merged_header == [ "## pairs format v1.0", "#chromsize: chr1 100", "#chromsize: chr2 200", ] def test_merge_samheaders(): headers = [ ["@HD\tVN:1"], ["@HD\tVN:1"], ] merged_header = headerops._merge_samheaders(headers) assert merged_header == headers[0] headers = [ [ "@HD\tVN:1", "@SQ\tSN:chr1\tLN:100", "@SQ\tSN:chr2\tLN:100", ], [ "@HD\tVN:1", "@SQ\tSN:chr1\tLN:100", "@SQ\tSN:chr2\tLN:100", ], ] merged_header = headerops._merge_samheaders(headers) assert merged_header == headers[0] headers = [ [ "@HD\tVN:1", "@PG\tID:bwa\tPN:bwa\tPP:cat", ], [ "@HD\tVN:1", "@PG\tID:bwa\tPN:bwa\tPP:cat", ], ] merged_header = headerops._merge_samheaders(headers) print(merged_header) assert merged_header == [ "@HD\tVN:1", "@PG\tID:bwa-1\tPN:bwa\tPP:cat-1", "@PG\tID:bwa-2\tPN:bwa\tPP:cat-2", ] def test_merge_headers(): headers = [ [ "## pairs format v1.0", "#samheader: @HD\tVN:1", "#samheader: @SQ\tSN:chr1\tLN:100", "#samheader: @SQ\tSN:chr2\tLN:100", ] ] * 2 merged_header = headerops.merge_headers(headers) assert merged_header == headers[0] pairtools-1.0.3/tests/test_markasdup.py000066400000000000000000000017111452673171500203040ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest testdir = os.path.dirname(os.path.realpath(__file__)) def test_mock_pairsam(): mock_pairsam_path = os.path.join(testdir, "data", "mock.pairsam") try: result = subprocess.check_output( ["python", "-m", "pairtools", "markasdup", mock_pairsam_path], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] # check that all pairsam entries survived sorting: assert len(pairsam_body) == len(output_body) # check that all pairtypes got changed to DD for l in output_body: assert l.split("\t")[7] == "DD" pairtools-1.0.3/tests/test_merge.py000066400000000000000000000072551452673171500174250ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest import tempfile testdir = os.path.dirname(os.path.realpath(__file__)) tmpdir = tempfile.TemporaryDirectory() tmpdir_name = tmpdir.name mock_pairsam_path_1 = os.path.join(testdir, "data", "mock.pairsam") mock_pairsam_path_2 = os.path.join(testdir, "data", "mock.2.pairsam") mock_sorted_pairsam_path_1 = os.path.join(tmpdir_name, "1.pairsam") mock_sorted_pairsam_path_2 = os.path.join(tmpdir_name, "2.pairsam") @pytest.fixture def setup_sort_two(): try: subprocess.check_output( [ "python", "-m", "pairtools", "sort", mock_pairsam_path_1, "--output", mock_sorted_pairsam_path_1, ], ) subprocess.check_output( [ "python", "-m", "pairtools", "sort", mock_pairsam_path_2, "--output", mock_sorted_pairsam_path_2, ], ) except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e def test_mock_pairsam(setup_sort_two): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "merge", mock_sorted_pairsam_path_1, mock_sorted_pairsam_path_2, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check that all pairsam entries survived sorting: pairsam_body_1 = [ l.strip() for l in open(mock_pairsam_path_1, "r") if not l.startswith("#") and l.strip() ] pairsam_body_2 = [ l.strip() for l in open(mock_pairsam_path_2, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert len(pairsam_body_1) + len(pairsam_body_2) == len(output_body) # check the sorting order of the output: prev_pair = None for l in output_body: cur_pair = l.split("\t")[1:8] if prev_pair is not None: assert cur_pair[0] >= prev_pair[0] if cur_pair[0] == prev_pair[0]: assert cur_pair[1] >= prev_pair[1] if cur_pair[1] == prev_pair[1]: assert cur_pair[2] >= prev_pair[2] if cur_pair[2] == prev_pair[2]: assert cur_pair[3] >= prev_pair[3] prev_pair = cur_pair # Check that the header is preserved: try: result = subprocess.check_output( [ "python", "-m", "pairtools", "merge", "--keep-first-header", mock_sorted_pairsam_path_1, mock_sorted_pairsam_path_2, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check the headers: pairsam_header_1 = [ l.strip() for l in open(mock_sorted_pairsam_path_1, "r") if l.startswith("#") and l.strip() ] pairsam_header_2 = [ l.strip() for l in open(mock_sorted_pairsam_path_2, "r") if l.startswith("#") and l.strip() ] output_header = [ l.strip() for l in result.split("\n") if l.startswith("#") and l.strip() ] assert len(pairsam_header_1) + 1 == len(output_header) tmpdir.cleanup() pairtools-1.0.3/tests/test_parse.py000066400000000000000000000065201452673171500174320ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import pytest import subprocess testdir = os.path.dirname(os.path.realpath(__file__)) def test_python_version(): assert sys.version_info[0] == 3, "Use Python 3!" def test_mock_pysam(): """Parse non-chimeric alignments with walks-policy mask with pysam backend.""" mock_sam_path = os.path.join(testdir, "data", "mock.sam") mock_chroms_path = os.path.join(testdir, "data", "mock.chrom.sizes") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "parse", "--walks-policy", "mask", "-c", mock_chroms_path, mock_sam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly sam_header = [l.strip() for l in open(mock_sam_path, "r") if l.startswith("@")] pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in sam_header: assert any([l in l2 for l2 in pairsam_header]) # check that the pairs got assigned properly for l in result.split("\n"): if l.startswith("#") or not l: continue print(l) assigned_pair = l.split("\t")[1:8] simulated_pair = l.split("CT:Z:SIMULATED:", 1)[1].split("\031", 1)[0].split(",") print(assigned_pair) print(simulated_pair) print() assert assigned_pair == simulated_pair def test_mock_pysam_parse_all(): """Parse all alignment in each read with walks-policy all and pysam backend.""" mock_sam_path = os.path.join(testdir, "data", "mock.parse-all.sam") mock_chroms_path = os.path.join(testdir, "data", "mock.chrom.sizes") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "parse", "--walks-policy", "all", "-c", mock_chroms_path, "--add-pair-index", mock_sam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly sam_header = [l.strip() for l in open(mock_sam_path, "r") if l.startswith("@")] pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in sam_header: assert any([l in l2 for l2 in pairsam_header]) # check that the pairs got assigned properly id_counter = 0 prev_id = "" for l in result.split("\n"): if l.startswith("#") or not l: continue if prev_id == l.split("\t")[0]: id_counter += 1 else: id_counter = 0 prev_id = l.split("\t")[0] assigned_pair = l.split("\t")[1:8] + l.split("\t")[-2:] simulated_pair = ( l.split("CT:Z:SIMULATED:", 1)[1] .split("\031", 1)[0] .split("|")[id_counter] .split(",") ) print(assigned_pair) print(simulated_pair, prev_id) print() assert assigned_pair == simulated_pair pairtools-1.0.3/tests/test_parse2.py000066400000000000000000000072661452673171500175240ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import pytest import subprocess testdir = os.path.dirname(os.path.realpath(__file__)) def test_mock_pysam_parse2_read(): mock_sam_path = os.path.join(testdir, "data", "mock.parse2.sam") mock_chroms_path = os.path.join(testdir, "data", "mock.chrom.sizes") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "parse2", "-c", mock_chroms_path, "--add-pair-index", "--flip", "--report-position", "junction", "--report-orientation", "pair", mock_sam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly sam_header = [l.strip() for l in open(mock_sam_path, "r") if l.startswith("@")] pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in sam_header: assert any([l in l2 for l2 in pairsam_header]) # check that the pairs got assigned properly id_counter = 0 prev_id = "" for l in result.split("\n"): if l.startswith("#") or not l: continue if prev_id == l.split("\t")[0]: id_counter += 1 else: id_counter = 0 prev_id = l.split("\t")[0] assigned_pair = l.split("\t")[1:8] + l.split("\t")[-2:] print(l.split("SIMULATED:", 1)[1].split("\031", 1)[0].split("|"), id_counter) simulated_pair = ( l.split("SIMULATED:", 1)[1] .split("\031", 1)[0] .split("|")[id_counter] .split(",") ) print(assigned_pair) print(simulated_pair, prev_id) print() assert assigned_pair == simulated_pair def test_mock_pysam_parse2_pair(): mock_sam_path = os.path.join(testdir, "data", "mock.parse-all.sam") mock_chroms_path = os.path.join(testdir, "data", "mock.chrom.sizes") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "parse2", "-c", mock_chroms_path, "--add-pair-index", "--flip", "--report-position", "outer", "--report-orientation", "pair", mock_sam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly sam_header = [l.strip() for l in open(mock_sam_path, "r") if l.startswith("@")] pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in sam_header: assert any([l in l2 for l2 in pairsam_header]) # check that the pairs got assigned properly id_counter = 0 prev_id = "" for l in result.split("\n"): if l.startswith("#") or not l: continue if prev_id == l.split("\t")[0]: id_counter += 1 else: id_counter = 0 prev_id = l.split("\t")[0] assigned_pair = l.split("\t")[1:8] + l.split("\t")[-2:] simulated_pair = ( l.split("SIMULATED:", 1)[1] .split("\031", 1)[0] .split("|")[id_counter] .split(",") ) print(assigned_pair) print(simulated_pair, prev_id) print() assert assigned_pair == simulated_pair pairtools-1.0.3/tests/test_restrict.py000066400000000000000000000031251452673171500201550ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import pytest import subprocess testdir = os.path.dirname(os.path.realpath(__file__)) def test_restrict(): """Restrict pairs file""" mock_pairs_path = os.path.join(testdir, "data", "mock.test-restr.pairs") mock_rfrag_path = os.path.join(testdir, "data", "mock.rsites.bed") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "restrict", "-f", mock_rfrag_path, mock_pairs_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the header got transferred correctly true_header = [l.strip() for l in open(mock_pairs_path, "r") if l.startswith("@")] output_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in true_header: assert any([l in l2 for l2 in output_header]) # check that the pairs got assigned properly cols = [x for x in output_header if x.startswith("#columns")][0].split(" ")[1:] COL_RFRAG1_TRUE = cols.index("rfrag_test1") COL_RFRAG2_TRUE = cols.index("rfrag_test2") COL_RFRAG1_OUTPUT = cols.index("rfrag1") COL_RFRAG2_OUTPUT = cols.index("rfrag2") for l in result.split("\n"): if l.startswith("#") or not l: continue line = l.split() assert line[COL_RFRAG1_TRUE] == line[COL_RFRAG1_OUTPUT] assert line[COL_RFRAG2_TRUE] == line[COL_RFRAG2_OUTPUT] pairtools-1.0.3/tests/test_scaling.py000066400000000000000000000011651452673171500177400ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest import pandas as pd import io testdir = os.path.dirname(os.path.realpath(__file__)) def test_scaling(): mock_pairsam_path = os.path.join(testdir, "data", "mock.pairsam") try: result = subprocess.check_output( ["python", "-m", "pairtools", "scaling", mock_pairsam_path], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e output = pd.read_csv(io.StringIO(result), sep="\t", header=0) assert output["n_pairs"].sum() == 5 pairtools-1.0.3/tests/test_select.py000066400000000000000000000156001452673171500175760ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest from pairtools.lib import pairsam_format testdir = os.path.dirname(os.path.realpath(__file__)) mock_pairsam_path = os.path.join(testdir, "data", "mock.pairsam") mock_chromsizes_path = os.path.join(testdir, "data", "mock.chrom.sizes") def test_preserve(): try: result = subprocess.check_output( ["python", "-m", "pairtools", "select", "True", mock_pairsam_path], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert all(l in pairsam_body for l in output_body) def test_equal(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", '(pair_type == "RU") or (pair_type == "UR") or (pair_type == "UU")', mock_pairsam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e print(result) pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert all(l.split("\t")[7] in ["RU", "UR", "UU"] for l in output_body) assert all( l in output_body for l in pairsam_body if l.split("\t")[7] in ["RU", "UR", "UU"] ) def test_csv(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", 'csv_match(pair_type, "RU,UR,UU")', mock_pairsam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e print(result) pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert all(l.split("\t")[7] in ["RU", "UR", "UU"] for l in output_body) assert all( l in output_body for l in pairsam_body if l.split("\t")[7] in ["RU", "UR", "UU"] ) def test_wildcard(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", 'wildcard_match(pair_type, "*U")', mock_pairsam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e print(result) pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert all(l.split("\t")[7] in ["NU", "MU", "RU", "UU"] for l in output_body) assert all( l in output_body for l in pairsam_body if l.split("\t")[7] in ["NU", "MU", "RU", "UU"] ) def test_regex(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", 'regex_match(pair_type, "[NM]U")', mock_pairsam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e print(result) pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] assert all(l.split("\t")[7] in ["NU", "MU"] for l in output_body) assert all( l in output_body for l in pairsam_body if l.split("\t")[7] in ["NU", "MU"] ) def test_chrom_subset(): try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", "True", "--chrom-subset", mock_chromsizes_path, mock_pairsam_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] output_header = [ l.strip() for l in result.split("\n") if l.startswith("#") and l.strip() ] chroms_from_chrom_field = [ l.strip().split()[1:] for l in result.split("\n") if l.startswith("#chromosomes:") ][0] assert set(chroms_from_chrom_field) == set(["chr1", "chr2"]) chroms_from_chrom_sizes = [ l.strip().split()[1] for l in result.split("\n") if l.startswith("#chromsize:") ] assert set(chroms_from_chrom_sizes) == set(["chr1", "chr2"]) def test_remove_columns(): """Test removal of columns from the file Example run: pairtools select True --remove-columns sam1,sam2 tests/data/mock.pairsam """ mock_pairs_path = os.path.join(testdir, "data", "mock.pairsam") try: result = subprocess.check_output( [ "python", "-m", "pairtools", "select", "True", "--remove-columns", "sam1,sam2", mock_pairs_path, ], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # check if the columns are removed properly: pairsam_header = [l.strip() for l in result.split("\n") if l.startswith("#")] for l in pairsam_header: if l.startswith("#columns:"): line = l.strip() assert ( line == "#columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type" ) # check that the pairs got assigned properly for l in result.split("\n"): if l.startswith("#") or not l: continue assert len(l.split(pairsam_format.PAIRSAM_SEP)) == 8 pairtools-1.0.3/tests/test_sort.py000066400000000000000000000037371452673171500173160ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest testdir = os.path.dirname(os.path.realpath(__file__)) def test_mock_pairsam(): mock_pairsam_path = os.path.join(testdir, "data", "mock.pairsam") try: result = subprocess.check_output( ["python", "-m", "pairtools", "sort", mock_pairsam_path], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e # Check that the only changes strings are a @PG record of a SAM header, # the "#sorted" entry and chromosomes pairsam_header = [ l.strip() for l in open(mock_pairsam_path, "r") if l.startswith("#") ] output_header = [l.strip() for l in result.split("\n") if l.startswith("#")] print(output_header) print(pairsam_header) for l in output_header: if not any([l in l2 for l2 in pairsam_header]): assert ( l.startswith("#samheader: @PG") or l.startswith("#sorted") or l.startswith("#chromosomes") ) pairsam_body = [ l.strip() for l in open(mock_pairsam_path, "r") if not l.startswith("#") and l.strip() ] output_body = [ l.strip() for l in result.split("\n") if not l.startswith("#") and l.strip() ] # check that all pairsam entries survived sorting: assert len(pairsam_body) == len(output_body) # check the sorting order of the output: prev_pair = None for l in output_body: cur_pair = l.split("\t")[1:8] if prev_pair is not None: assert cur_pair[0] >= prev_pair[0] if cur_pair[0] == prev_pair[0]: assert cur_pair[2] >= prev_pair[2] if cur_pair[2] == prev_pair[2]: assert cur_pair[1] >= prev_pair[1] if cur_pair[1] == prev_pair[1]: assert cur_pair[3] >= prev_pair[3] prev_pair = cur_pair pairtools-1.0.3/tests/test_split.py000066400000000000000000000051051452673171500174510ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import pytest import tempfile testdir = os.path.dirname(os.path.realpath(__file__)) mock_pairsam_path = os.path.join(testdir, "data", "mock.pairsam") tmpdir = tempfile.TemporaryDirectory() tmpdir_name = tmpdir.name pairs_path = os.path.join(tmpdir_name, "out.pairs") sam_path = os.path.join(tmpdir_name, "out.sam") @pytest.fixture def setup_split(): try: subprocess.check_output( [ "python", "-m", "pairtools", "split", mock_pairsam_path, "--output-pairs", pairs_path, "--output-sam", sam_path, ], ) except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e def test_split(setup_split): pairsam_lines = [l.strip() for l in open(mock_pairsam_path, "r") if l.strip()] pairs_lines = [l.strip() for l in open(pairs_path, "r") if l.strip()] sam_lines = [l.strip() for l in open(sam_path, "r") if l.strip()] # check that all entries survived splitting: n_pairsam = len([l for l in pairsam_lines if not l.startswith("#")]) n_pairs = len([l for l in pairs_lines if not l.startswith("#")]) n_sam = len([l for l in sam_lines if not l.startswith("@")]) // 2 assert n_pairsam == n_pairs assert n_pairsam == n_sam # check that the header survived splitting: pairsam_header = [ l.strip() for l in open(mock_pairsam_path, "r") if l.strip() and l.startswith("#") ] pairs_header = [ l.strip() for l in open(pairs_path, "r") if l.strip() and l.startswith("#") ] sam_header = [ l.strip() for l in open(sam_path, "r") if l.strip() and l.startswith("@") ] assert all( any(l in l2 for l2 in pairsam_header) for l in sam_header if not l.startswith("@PG") ) assert all( l in pairsam_header for l in pairs_header if (not (l.startswith("#columns") or l.startswith("#samheader"))) ) columns_pairsam = [l for l in pairsam_header if l.startswith("#columns")][ 0 ].split()[1:] columns_pairs = [l for l in pairs_header if l.startswith("#columns")][0].split()[1:] assert ( ("sam1" in columns_pairsam) and ("sam2" in columns_pairsam) and ("sam1" not in columns_pairs) and ("sam2" not in columns_pairs) ) assert [c for c in columns_pairsam if c != "sam1" and c != "sam2"] == columns_pairs tmpdir.cleanup() pairtools-1.0.3/tests/test_stats.py000066400000000000000000000103031452673171500174500ustar00rootroot00000000000000# -*- coding: utf-8 -*- import os import sys import subprocess import numpy as np import yaml testdir = os.path.dirname(os.path.realpath(__file__)) def test_mock_pairsam(): mock_pairsam_path = os.path.join(testdir, "data", "mock.4stats.pairs") try: result = subprocess.check_output( ["python", "-m", "pairtools", "stats", "--yaml", mock_pairsam_path], ).decode("ascii") except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e stats = yaml.safe_load(result) # for k in stats["no_filter"]: # try: # stats["no_filter"][k] = int(stats["no_filter"][k]) # except (ValueError, TypeError): # stats["no_filter"][k] = float(stats["no_filter"][k]) assert stats["no_filter"]["total"] == 9 assert stats["no_filter"]["total_single_sided_mapped"] == 2 assert stats["no_filter"]["total_mapped"] == 6 assert stats["no_filter"]["total_dups"] == 1 assert stats["no_filter"]["cis"] == 3 assert stats["no_filter"]["trans"] == 2 assert stats["no_filter"]["pair_types"]["UU"] == 4 assert stats["no_filter"]["pair_types"]["NU"] == 1 assert stats["no_filter"]["pair_types"]["WW"] == 1 assert stats["no_filter"]["pair_types"]["UR"] == 1 assert stats["no_filter"]["pair_types"]["MU"] == 1 assert stats["no_filter"]["pair_types"]["DD"] == 1 assert stats["no_filter"]["chrom_freq"]["chr1/chr2"] == 1 assert stats["no_filter"]["chrom_freq"]["chr1/chr1"] == 3 assert stats["no_filter"]["chrom_freq"]["chr2/chr3"] == 1 for orientation in ("++", "+-", "-+", "--"): s = stats["no_filter"]["dist_freq"][orientation] for k, val in s.items(): if orientation == "++" and k in [1, 2, 32]: assert s[k] == 1 else: assert s[k] == 0 assert stats["no_filter"]["summary"]["frac_cis"] == 0.6 assert stats["no_filter"]["summary"]["frac_cis_1kb+"] == 0 assert stats["no_filter"]["summary"]["frac_cis_2kb+"] == 0 assert stats["no_filter"]["summary"]["frac_cis_4kb+"] == 0 assert stats["no_filter"]["summary"]["frac_cis_10kb+"] == 0 assert stats["no_filter"]["summary"]["frac_cis_20kb+"] == 0 assert stats["no_filter"]["summary"]["frac_cis_40kb+"] == 0 assert np.isclose(stats["no_filter"]["summary"]["frac_dups"], 1 / 6) def test_merge_stats(): mock_pairsam_path = os.path.join(testdir, "data", "mock.4stats.pairs") try: subprocess.check_output( [ "python", "-m", "pairtools", "stats", "--with-chromsizes", mock_pairsam_path, "--output", "mock.stats", ], ) subprocess.check_output( [ "python", "-m", "pairtools", "stats", "--no-chromsizes", mock_pairsam_path, "--output", "mock.no_chromsizes.stats", ], ) subprocess.check_output( [ "python", "-m", "pairtools", "stats", "mock.stats", "mock.stats", "--merge", "--output", "mock.merged_chromsizes.stats", ], ) subprocess.check_output( [ "python", "-m", "pairtools", "stats", "mock.stats", "mock.no_chromsizes.stats", "--merge", "--output", "mock.merged_mixed.stats", ], ) subprocess.check_output( [ "python", "-m", "pairtools", "stats", "mock.no_chromsizes.stats", "mock.no_chromsizes.stats", "--merge", "--output", "mock.merged_no_chromsizes.stats", ], ) except subprocess.CalledProcessError as e: print(e.output) print(sys.exc_info()) raise e