diff --git a/.github/workflows/dev_tests.yml b/.github/workflows/dev_tests.yml index 20c96f8..2a8c3ac 100644 --- a/.github/workflows/dev_tests.yml +++ b/.github/workflows/dev_tests.yml @@ -1,62 +1,38 @@ name: SOPRANO (Dev) Tests on: - push: - branches: - - python-dev pull_request: branches: - python-dev jobs: - lint: - strategy: - matrix: - os: ["ubuntu-latest"] - python-version: ["3.11"] - name: lint with python ${{ matrix.python-version }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Install ruff and black - run: | - python -m pip install --upgrade pip - pip install ruff black - - name: Lint check with ruff - run: | - ruff --format=github --target-version=py311 --line-length 79 . - - name: Style check with black - run: | - black ./ --check --line-length 79 test: - strategy: - matrix: - os: ["ubuntu-latest"] - python-version: ["3.11"] - name: test with python ${{ matrix.python-version }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} + name: Development tests + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} steps: - uses: actions/checkout@v3 - - uses: mamba-org/setup-micromamba@v1 + - name: Setup miniconda + uses: conda-incubator/setup-miniconda@v2 with: - environment-file: src/SOPRANO/local.yml - init-shell: bash + auto-update-conda: true + miniforge-variant: Mambaforge + channels: conda-forge + python-version: 3.11 + activate-environment: soprano-dev + environment-file: src/SOPRANO/ci_linux.yml + use-mamba: true - name: Install SOPRANO - shell: bash -l {0} run: | - micromamba activate soprano-dev + conda activate soprano-dev pip install -e .[ci] - name: Test conda environment - shell: bash -l {0} run: | - micromamba activate soprano-dev - pytest tests/test_configuration + conda activate soprano-dev + pytest -s tests/test_configuration - name: Test units - shell: bash -l {0} run: | - micromamba activate soprano-dev - pytest tests/test_units \ No newline at end of file + conda activate soprano-dev + pytest -s tests/test_units \ No newline at end of file diff --git a/.github/workflows/lint_and_style.yml b/.github/workflows/lint_and_style.yml new file mode 100755 index 0000000..4b9fa42 --- /dev/null +++ b/.github/workflows/lint_and_style.yml @@ -0,0 +1,23 @@ +name: Lint and style check + +on: [ push ] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install ruff and black + run: | + python -m pip install --upgrade pip + pip install ruff black + - name: Lint check with ruff + run: | + ruff --target-version=py311 --line-length 79 . + - name: Style check with black + run: | + black ./ --check --line-length 79 \ No newline at end of file diff --git a/.github/workflows/main_tests.yml b/.github/workflows/main_tests.yml index ded6084..43b7b6a 100755 --- a/.github/workflows/main_tests.yml +++ b/.github/workflows/main_tests.yml @@ -1,69 +1,42 @@ -name: SOPRANO (Main) Tests +name: SOPRANO Tests on: - push: - branches: - - python - - master pull_request: branches: - python - - master + - main jobs: - lint: - strategy: - matrix: - os: ["ubuntu-latest"] - python-version: ["3.11"] - name: lint with python ${{ matrix.python-version }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Install ruff and black - run: | - python -m pip install --upgrade pip - pip install ruff black - - name: Lint check with ruff - run: | - ruff --format=github --target-version=py311 --line-length 79 . - - name: Style check with black - run: | - black ./ --check --line-length 79 test: strategy: matrix: - os: ["ubuntu-latest", "macos-latest"] - python-version: ["3.11"] - name: test with python ${{ matrix.python-version }} on ${{ matrix.os }} + os: [ "ubuntu-latest", "macos-latest" ] + name: Development tests on ${{ matrix.os }} runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash -l {0} steps: - uses: actions/checkout@v3 - - uses: mamba-org/setup-micromamba@v1 + - name: Setup miniconda + uses: conda-incubator/setup-miniconda@v2 with: - environment-file: src/SOPRANO/local.yml - init-shell: bash + auto-update-conda: true + miniforge-variant: Mambaforge + channels: conda-forge + python-version: 3.11 + activate-environment: soprano-dev + environment-file: src/SOPRANO/ci_osx.yml # additional coreutils + use-mamba: true - name: Install SOPRANO - shell: bash -l {0} run: | - micromamba activate soprano-dev + conda activate soprano-dev pip install -e .[ci] - name: Test conda environment - shell: bash -l {0} run: | - micromamba activate soprano-dev - pytest tests/test_configuration + conda activate soprano-dev + pytest -s tests/test_configuration - name: Test units - shell: bash -l {0} run: | - micromamba activate soprano-dev - pytest tests/test_units -# - name: Test integration # TODO: Need to think about this -# shell: bash -l {0} -# run: | -# micromamba activate soprano-dev -# pytest tests/test_integrations + conda activate soprano-dev + pytest -s tests/test_units \ No newline at end of file diff --git a/.gitignore b/.gitignore index bb32d58..3a16022 100644 --- a/.gitignore +++ b/.gitignore @@ -74,4 +74,13 @@ src/SOPRANO/data/homo_sapiens/**/Homo_sapiens.GRCh*.fa.gz /example_output.txt # App output files -pipeline_cache/ \ No newline at end of file +pipeline_cache/ + +# User defined app sources +app_sources/ +!app_sources/annotated_inputs/.gitkeep +!app_sources/coordinate_files/.gitkeep +!app_sources/immunopeptidomes/.gitkeep + +# Ignore release cache file +src/SOPRANO/data/ensembl.releases \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 50b2453..cae399f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/python/black - rev: 23.7.0 + rev: 23.9.1 hooks: - id: black pass_filenames: true @@ -13,7 +13,8 @@ repos: rev: 'v1.5.1' hooks: - id: mypy + additional_dependencies: ['types-requests'] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.0.287 + rev: v0.0.292 hooks: - id: ruff diff --git a/app_sources/annotated_inputs/.gitkeep b/app_sources/annotated_inputs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app_sources/coordinate_files/.gitkeep b/app_sources/coordinate_files/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app_sources/immunopeptidomes/.gitkeep b/app_sources/immunopeptidomes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/APP.md b/docs/APP.md index 892b324..44a2bdd 100755 --- a/docs/APP.md +++ b/docs/APP.md @@ -35,6 +35,32 @@ export SOPRANO_CACHE=/path/to/my/soprano/cache soprano-app ``` +### Data sources + +By default, the application will serve options for the annotated mutation +and human immunopeptidome files shipped with SOPRANO. Additional files +can be detected by the application by their placement in the `./app_sources` +folders: + +- `./app_sources/annotated_inputs` + + VEP annotated mutation files placed in this directory will be detected, + so long as they have the extension pattern `*anno*`. E.g., `mutations.anno` + or `mutations.annotated`. + + +- `./app_sources/immunopeptidomes` + + User defined immunopeptidomes BED files placed in this directory will be + detected, so long as they have the extension `.bed`. E.g., `immuno.bed`. + + +- `./app_sources/coordinate_files` + + User defined BED files that can be used for randomization will be detected, + so long as they have the extension `.bed`. E.g., `randoms.bed`. + + ### Development status This app is actively being developed (September 2023). The configuration is @@ -42,8 +68,7 @@ subject to change, and additional features are soon to be integrated. _Planned features:_ -- Generalization of species. Currently only homo sapiens are supported. -- Selection of randomization regions. Currently only available via CLI. +- Generalization of species. Currently only Homo Sapiens are supported. - Selection of transcript files. Currently only available via CLI. - Interface for linking VEP cache files. - Interface for downloading genome references. diff --git a/docs/CLI.md b/docs/CLI.md index 8d993f5..024f17b 100755 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -49,17 +49,23 @@ These arguments have short (`-s`) or long (`--long`) argument flags. This value should be an integer greater than zero. Defaults to "-1", implying no seed value chosen. + +- `-s | --species` -- `-r | --reference` + The Latin species name associated with genome reference. The default value + is for homo_sapiens. - The name of the genome reference. Currently, this CLI supports GRCh37 and - GRCh38, which may be passed as arguments. By default, GRCh37 is chosen. +- `-a | --assembly` -- `-q | --release` + The name of the Ensembl reference genome assembly. The default value is for + GRCh38 (Homo Sapiens). + + +- `-r | --release` The Ensembl release number of the genome reference - file. By default, the CLI will select release 110. + file. The default value is 110. - `-t | --transcript` diff --git a/pyproject.toml b/pyproject.toml index 53d4894..b31ac7e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,26 +8,30 @@ description = "SOPRANO: Selection On PRotein ANnotated regiOns" readme = "README.md" authors = [ { name = "Luis Zapata", email = "Luis.Zapata@icr.ac.uk" }, - { name = "ICR Scientific Software Group", email = "scientificcomputingteam@icr.ac.uk"}, + { name = "ICR Scientific Software Group", email = "scientificcomputingteam@icr.ac.uk" }, ] maintainers = [ { name = "Luis Zapata", email = "Luis.Zapata@icr.ac.uk" }, - { name = "ICR Scientific Software Group", email = "scientificcomputingteam@icr.ac.uk"}, + { name = "ICR Scientific Software Group", email = "scientificcomputingteam@icr.ac.uk" }, ] -requires-python = ">=3.8" +requires-python = ">=3.10" dependencies = [ "pandas", "numpy", - "streamlit == 1.27.0" + "streamlit == 1.27.0", + "requests", + "types-requests", + "clint" ] classifiers = [ - "Development Status :: 3 - Alpha", - "License :: OSI Approved :: BSD License", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.11", - "Programming Language :: Perl", - "Topic :: Scientific/Engineering :: Bio-Informatics", - "Intended Audience :: Science/Research" + "Development Status :: 3 - Alpha", + "License :: OSI Approved :: BSD License", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Perl", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Intended Audience :: Science/Research" ] dynamic = ["version"] @@ -59,6 +63,7 @@ soprano-run = "SOPRANO.run:run_cli" soprano-app = "SOPRANO.run:run_app" soprano-get-genome = "SOPRANO.run:download_genome" soprano-link-vep = "SOPRANO.run:link_vep_cache" +soprano-hla2ip = "SOPRANO.run:hla2pip" [tool.hatch] version.source = "vcs" diff --git a/setup.sh b/setup.sh index d020204..c25b068 100755 --- a/setup.sh +++ b/setup.sh @@ -1,28 +1,163 @@ -#!/bin/bash +#!/usr/bin/env bash -# Keep track of project root -PROJECT_ROOT="$( cd -- "$(dirname -- "$0")" >/dev/null 2>&1 || exit ; pwd -P )" - -# Installation helpers dir -SHELL_UTILS_DIR="src/SOPRANO/shell_utils" - -# Data directory -DATA_DIR_PATH="src/SOPRANO/data" +ENV_NAME="soprano-dev" +DEPS_FILE="src/SOPRANO/local.yml" +DEPS_FATAL=false +# Parse installation method for pip if [ "$#" -eq 0 ] then - echo "-- installing standard dependencies" - DEPS="" + echo "Will install standard PyPI dependencies" + INSTALL_METHOD="" elif [ "$1" == "dev" ] || [ "$1" == "ci" ] then - echo "-- installing dependencies for $1" - DEPS="[$1]" + echo "Will install $1 PyPI dependencies" + INSTALL_METHOD="[$1]" else - echo "-- unrecognized dependencies argument. (defaulting to dev)" - DEPS="[dev]" + echo "Will install dev PyPI dependencies" + INSTALL_METHOD="[dev]" fi -_PIP_CMD="pip install -e .$DEPS" +_PIP_CMD="pip install -e .$INSTALL_METHOD" + +if [ ! -f "$DEPS_FILE" ] +then + echo "Fatal: Conda dependencies file not found" + DEPS_FATAL=true +else + echo "Conda dependencies file detected: $DEPS_FILE" +fi + +# Get os type +case "$OSTYPE" in + darwin*) + OS="osx" ;; + linux*) + OS="linux" ;; + *) + echo "OS $OSTYPE not implemented." + OS="other" ;; +esac + +# Flag whether to run update +built_from_scratch=false + +function _create_for_osx() { + echo "Creating env for osx" + built_from_scratch=true + conda create --name $ENV_NAME + conda activate $ENV_NAME + conda config --env --set subdir osx-64 + if command -v mamba &> /dev/null + then + echo " ... building with mamba" + mamba config env update --file $DEPS_FILE + else + conda config env update --file $DEPS_FILE + fi + conda activate $ENV_NAME +} + +function _create_for_linux() { + echo "Creating env for linux" + built_from_scratch=true + if command -v mamba &> /dev/null + then + echo " ... building with mamba" + mamba env create -f $DEPS_FILE --name $ENV_NAME + else + conda env create -f $DEPS_FILE --name $ENV_NAME + fi + conda activate $ENV_NAME +} + +function _update() { + if command -v mamba &> /dev/null + then + echo " ... updating with mamba" + mamba env update --file $DEPS_FILE --prune + else + conda env update --file $DEPS_FILE --prune + fi +} + +function _update_for_osx() { + echo "Updating env for osx" + conda config --env --set subdir osx-64 + _update +} + +function _update_for_linux() { + echo "Updating env for linux" + _update +} + +function activate_env() { + echo "Attempting activation" + if [ "$OS" == "osx" ] + then + echo "... osx" + conda activate $ENV_NAME || _create_for_osx -# Configure conda environment and install repository -source "$SHELL_UTILS_DIR/setup_env.sh" -source "$SHELL_UTILS_DIR/setup_data.sh" \ No newline at end of file + if [ $built_from_scratch == false ] + then + _update_for_osx + fi + elif [ "$OS" == "linux" ] + then + echo "... linux" + conda activate $ENV_NAME || _create_for_linux + + if [ $built_from_scratch == false ] + then + _update_for_linux + fi + else + exit 1 + fi + if [ $? == 0 ] + then + echo "Installing SOPRANO python package" + eval "$_PIP_CMD" + fi +} + +if command -v conda &> /dev/null +then + echo "Conda detected: Running environment setup" + echo "OS system $OS: $OSTYPE" + + if [ $DEPS_FATAL == true ] + then + echo " ... but unable to build due to missing dependencies file." + else + activate_env + if [ $? == 0 ] + then + echo "" + echo "Installation procedure complete." + echo "After pulling an updated version of the repository" + echo "run this setup script. Otherwise, call" + echo " conda activate $ENV_NAME" + echo "to load the environment." + else + echo "" + echo "Installation failed." + fi + fi + + +else + echo "Fatal: Conda not detected." +fi + +fasta_file="src/SOPRANO/data/ensemble_transcriptID.fasta" +zipped_fasta_file="src/SOPRANO/data/ensemble_transcriptID.fasta.gz" + +if [ ! -f "$fasta_file" ] +then + echo "Decompressing transcript IDs" + gunzip -k "$zipped_fasta_file" + echo "Decompressed: $fasta_file" +else + echo "Decompressed transcript IDs detected: $fasta_file" +fi diff --git a/src/SOPRANO/app.py b/src/SOPRANO/app.py index 34d859e..d678c5d 100755 --- a/src/SOPRANO/app.py +++ b/src/SOPRANO/app.py @@ -1,178 +1,341 @@ -import time +import os -import pandas as pd import streamlit as st +from streamlit.delta_generator import DeltaGenerator -import SOPRANO.utils.path_utils from SOPRANO.core import objects -from SOPRANO.pipeline import run_pipeline -from SOPRANO.utils.app_utils import st_capture +from SOPRANO.utils.app_utils import ( + DownloaderUIOptions, + DownloaderUIProcessing, + ImmunopeptidomesUIOptions, + ImmunopeptidomeUIProcessing, + LinkVEPUIProcessing, + PipelineUIOptions, + PipelineUIProcessing, + RunTab, + text_or_file, +) from SOPRANO.utils.path_utils import Directories -_CACHE = Directories.cache() -_HOMO_SAPIENS_DIR = Directories.homo_sapien_genomes() +def with_tab_pipeline(tab: DeltaGenerator): + with tab: + st.title("SOPRANO") + st.caption("Selection On PRotein ANnotated regiOns") -_GENOME_DIRS = [item for item in _HOMO_SAPIENS_DIR.glob("*") if item.is_dir()] + genome_selection = st.selectbox( + "Select a reference genome:", + PipelineUIOptions.genome_reference(), + ) + genome_processed = PipelineUIProcessing.genome_reference( + genome_selection + ) + genome_ready = genome_selection is not None -# Remove unviable options (i.e. no toplevel fa and chrom files) -for item in _GENOME_DIRS[::-1]: - toplevel_path = item.glob("*dna*toplevel*.fa") - chrom_path = item.glob("*dna*toplevel*.chrom") + annotation_selection = st.selectbox( + "Select a VEP annotated file:", + PipelineUIOptions.annotated_mutations(), + ) + annotation_processed = PipelineUIProcessing.annotated_mutations( + annotation_selection + ) - if len(list(toplevel_path)) == len(list(chrom_path)) == 1: - pass - else: - _GENOME_DIRS.remove(item) + immunopeptidome_selection = st.selectbox( + "Select a BED protein file:", + PipelineUIOptions.immunopeptidome(), + ) + immunopeptidome_processed = PipelineUIProcessing.immunopeptidome( + immunopeptidome_selection + ) -_GENOME_NAMES = [ - "{} - Ensembl release {}".format(*x.name.split("_")[::-1]) - for x in _GENOME_DIRS -] + substitution_selection = st.selectbox( + "Select a substitution method:", + PipelineUIOptions.substitution_method(), + ) + substitution_processed = PipelineUIProcessing.substitution_method( + substitution_selection + ) -_GENOME_DICT = { - name: dir_path for name, dir_path in zip(_GENOME_NAMES, _GENOME_DIRS) -} + exclude_drivers = st.checkbox("Exclude driver genes:", value=True) + use_randomization = st.checkbox("Use randomization:", value=False) + + if use_randomization: + random_seed = st.number_input( + "Select random seed for randomization:", + min_value=-1, + value="min", + ) + coordinates_selection = st.selectbox( + "Select a BED file defining the regions to randomize over:", + PipelineUIOptions.coordinates(), + ) + coordinates_processed = PipelineUIProcessing.coordinates( + coordinates_selection + ) + else: + random_seed = -1 + coordinates_processed = None + + cache_selected = st.text_input( + "Cache directory:", value=Directories.cache().as_posix() + ) + cache_processed = PipelineUIProcessing.cache(cache_selected) + cache_ready = os.path.exists(cache_processed) -_ANNO_DIR = Directories.examples() -_ANNO_OPTIONS = {x.name: x for x in _ANNO_DIR.glob("*.anno*")} + job_name_selection = st.text_input( + "Define a name for the output of your analysis:" + ) + name_ready = job_name_selection != "" + job_name_processed = PipelineUIProcessing.job_name(job_name_selection) + + params = objects.Parameters( + analysis_name=job_name_selection, + input_path=annotation_processed, + bed_path=immunopeptidome_processed, + cache_dir=job_name_processed, + random_regions=coordinates_processed, + use_ssb192=substitution_processed == 192, + use_random=use_randomization, + exclude_drivers=exclude_drivers, + seed=random_seed, + transcripts=objects.TranscriptPaths.defaults(), + genomes=genome_processed, + ) -_BED_DIR = Directories.immuno_humans() -_BED_OPTIONS = {x.name: x for x in _BED_DIR.glob("*.bed")} + if st.button( + "Run Pipeline", + disabled=not (cache_ready and name_ready and genome_ready), + ): + RunTab.pipeline(params=params) + + +def with_tab_genomes(tab: DeltaGenerator): + with tab: + st.subheader("Link existing reference genome files") + st.markdown( + "SOPRANO uses a self-contained directory structure for the " + "the download and caching of derived genomic data.\n\n" + "Users who have an existing Ensembl VEP configuration on their " + "computer may have readily available reference genomes " + "downloaded. These downloads can be linked to the SOPRANO " + "directories by running the button below.\n\nNote: " + " the default VEP cache that is searched for is `~/.vep` but you " + "can define any other non-standard locations that reference " + "genomes may be found within." + ) + cache_location_selection = st.text_input( + "VEP cache location:", value=Directories.std_sys_vep().as_posix() + ) -if __name__ == "__main__": - # Init app - st.title("SOPRANO") - st.caption("Selection On PRotein ANnotated regiOns") + cache_location_processed = LinkVEPUIProcessing.cache_location( + cache_location_selection + ) - def process_genome_selection(): - genome_selection = st.session_state.genome_selection + if st.button("Attempt VEP cache link", disabled=False): + RunTab.link_vep(cache_location_processed) + + st.subheader("Download new reference genome files") + st.markdown( + "You can use SOPRANO to download reference genomes from the " + "ensembl FTP server by making use of the below definitions, before" + " clicking `Download`.\n\n" + "The core SOPRANO calculation requires toplevel reference data " + "to be available. Secondary downloads of the primary assembly " + "may be used to accelerate the annotation procedure; though this " + "is _not_ essential." + ) - ref_id, rel_id = genome_selection.split(" - Ensembl release ") + species_selection = st.text_input( + "Define the species", + value="Homo Sapiens", + disabled=True, + ) + species_processed = DownloaderUIProcessing.species(species_selection) - ( - genomes_path, - chroms_path, - ) = SOPRANO.utils.misc_utils.genome_pars_to_paths(ref_id, rel_id) + assembly_selection = st.text_input( + "Define the genome reference:", + value="GRCh38", + ) + assembly_processed = DownloaderUIProcessing.assembly( + assembly_selection + ) - st.session_state.ref_genome = objects.GenomePaths( - sizes=chroms_path, fasta=genomes_path + release_selection = st.number_input( + "Define the Ensembl release:", + min_value=76, + key="download_release", + value=110, ) + release_processed = DownloaderUIProcessing.release(release_selection) - st.text(f"Selected: {st.session_state.ref_genome.fasta}") + type_selection = st.selectbox( + "Download type:", + options=DownloaderUIOptions.type(), + ) + type_processed = DownloaderUIProcessing.type(type_selection) + + if st.button("Download", disabled=False): + RunTab.download( + species=species_processed, + assembly=assembly_processed, + release=release_processed, + download_type=type_processed, + ) + + +def with_tab_annotator(tab: DeltaGenerator): + with tab: + st.title("Annotate VCF File") + st.caption( + "Upload a VCF file to annotate for use in the SOPRANO pipeline." + ) + st.file_uploader("Select a VCF file:", key="vcf_selection") + + if st.button("Annotate", disabled=True): + RunTab.annotate() + + +def with_tab_info(tab: DeltaGenerator): + with tab: + st.title("Welcome to SOPRANO! :wave:") + st.caption("Selection On PRotein ANnotated regiOns") + st.markdown( + "This application is designed to provide a user interface to the " + "SOPRANO computational pipeline, without the need of command line " + "intervention." + "\n\n" + "There are three essential files required to run " + "SOPRANO. These define the\n" + "1. Reference genome\n" + "2. Annotated somatic mutations\n" + "3. Immunopeptidome\n" + "\n\n" + "These three inputs can be configured in term via the tabs " + "indicating steps 1, 2 and 3. Once you have prepared your data, " + "step 4 will enable you to run the pipeline, subject to " + "further runtime configuration choices." + "\n\n" + "Any technical issues can be raised on [GitHub]" + "(https://github.com/instituteofcancerresearch/SOPRANO/issues)" + ) - # Derived genome definitions - st.selectbox( - "Select a reference genome:", - _GENOME_DICT.keys(), - key="genome_selection", - ) - process_genome_selection() - - def process_annotation(): - input_selection = st.session_state.input_selection - st.session_state.input_path = _ANNO_OPTIONS[input_selection] - st.text(f"Selected: {st.session_state.input_path}") - - # VEP annotated file - st.selectbox( - "Select a VEP annotated file:", - _ANNO_OPTIONS.keys(), - key="input_selection", - ) - process_annotation() - def process_bed(): - bed_selection = st.session_state.bed_selection - st.session_state.bed_path = _BED_OPTIONS[bed_selection] - st.text(f"Selected: {st.session_state.bed_path}") +def with_tab_immunopeptidome(tab: DeltaGenerator): + with tab: + st.header("HLA-allele selections") - # BED protein transcript file - st.selectbox( - "Select a BED protein file:", _BED_OPTIONS.keys(), key="bed_selection" - ) - process_bed() + st.markdown( + "In order to generate custom, or, patient specific " + "immunopeptidome files to run through SOPRANO, we must " + "specify a set of HLA alleles to restrict the analysis to.\n\n" + "You should enter 1-6 HLA allele choices into the text box," + " or upload a text file containing similar information." + ) - def process_subs(): - subs_selection = st.session_state.subs_selection - st.session_state.use_ssb192 = subs_selection == 192 - st.text(f"Using SSB192: {st.session_state.use_ssb192}") + hla_ready, alleles_selected = text_or_file( + "Define the HLA allele selection manually via text input *OR* " + "file uploader. (1-6 alleles are required).", + min_args=1, + max_args=6, + help_text="Provide HLA alleles on separate lines.", + help_upload="Select a text file defining the HLA alleles on " + "separate lines.", + ) - # Substitution method - st.selectbox( - "Select a substitution method:", (192, 7), key="subs_selection" - ) - process_subs() - - # Exclude driver genes - st.checkbox("Exclude driver genes:", value=True, key="exclude_drivers") - - # Use randomization - st.checkbox("Use randomization:", value=False, key="use_random") - - if st.session_state.use_random: - # Select random seed - st.number_input( - "Select random seed for randomization:", - min_value=-1, - value="min", - key="random_seed", - ) - # TODO: Option for randomization regions - else: - st.session_state.random_seed = -1 - - def process_name(): - job_name = st.session_state.job_name - st.session_state.cache_dir = _CACHE / job_name - st.text(f"Cache location: {st.session_state.cache_dir}") - - # Pipeline job name & cache - st.text_input( - "Define a name for the output of your analysis:", key="job_name" - ) - process_name() - - st.session_state.params = objects.Parameters( - analysis_name=st.session_state.job_name, - input_path=st.session_state.input_path, - bed_path=st.session_state.bed_path, - cache_dir=st.session_state.cache_dir, - random_regions=None, # TODO: Fix - use_ssb192=st.session_state.use_ssb192, - use_random=st.session_state.use_random, - exclude_drivers=st.session_state.exclude_drivers, - seed=st.session_state.random_seed, - transcripts=objects.TranscriptPaths.defaults(), - genomes=st.session_state.ref_genome, - ) + if not hla_ready: + st.warning("HLA selection is currently invalid.") - st.session_state.job_complete = False + alleles_processed = ImmunopeptidomeUIProcessing.hla_alleles( + [] if alleles_selected is None else alleles_selected + ) - def run_pipeline_in_app(): - st.session_state.cache_dir.mkdir(exist_ok=True) + st.header("Ensembl transcript selections") + + st.markdown( + "Analyses can be further restricted by providing a set of " + "Ensembl transcript IDs to either\n\n" + "1. Exclude from the analysis; or\n" + "2. Restrict the analysis to.\n\n" + "These filtering characteristics are presented as the choices\n" + "- 'Retention'\n" + "- 'Exclusion'\n\n" + "in the following drop down menu.\n\n" + "Transcript IDs should either be manually entered into the text " + "box over separate lines, or uploaded within a text file of " + "similar contents." + ) - t_start = time.time() - output = st.empty() - with st_capture(output.code): - run_pipeline(st.session_state.params) - # run_local_ssb_selection.main(st.session_state.namespace) - t_end = time.time() + transcripts_ready, transcripts_selected = text_or_file( + "Define the Ensembl transcript IDs to restrict or exclude from the" + " immunopeptidome construction.", + help_text="Provide transcript IDs on separate lines.", + help_upload="Select a text file defining transcript IDs on " + "separate lines.", + ) + + transcripts_processed = ImmunopeptidomeUIProcessing.transcript_ids( + [] if transcripts_selected is None else transcripts_selected + ) - st.session_state.compute_time_str = ( - f"Pipeline run in {int(t_end - t_start)} seconds" + subset_method_selected = st.selectbox( + "Select method to subset available Ensembl transcript IDs " + "(optional):", + options=ImmunopeptidomesUIOptions.subset_method(), + ) + ( + transcripts_retained, + transcripts_excluded, + ) = ImmunopeptidomeUIProcessing.subset_method( + transcripts_processed, subset_method_selected ) - st.session_state.data_frame = pd.read_csv( - st.session_state.params.results_path, sep="\t" + st.header("Ensembl transcript selections") + + st.markdown( + "Once you are happy with your immunopeptidome choices, " + "provide a name for the corresponding file, then click " + "'Build immunopeptidome'." ) - st.session_state.job_complete = True + name_selected = st.text_input("Immunopeptidome name:") + name_processed = ImmunopeptidomeUIProcessing.name(name_selected) + name_ready = name_processed != ".bed" + + if not name_ready: + st.warning("Please provide an input file name.") + + if st.button( + "Build immunopeptidome", + disabled=not (hla_ready and name_ready), + ): + RunTab.immunopeptidome( + alleles_processed, + output_name=name_processed, + transcripts_retained=transcripts_retained, + transcripts_excluded=transcripts_excluded, + ) - st.text(st.session_state.compute_time_str) - st.dataframe(st.session_state.data_frame, hide_index=True) - st.text(f"dN/dS file: {st.session_state.params.results_path}") - if st.button("Run Pipeline"): - run_pipeline_in_app() +if __name__ == "__main__": + st.set_page_config(layout="wide") + ( + welcome_tab, + genome_tab, + annotate_tab, + immunopeptidome_tab, + pipeline_tab, + ) = st.tabs( + [ + "Welcome!", + "Step 1: Prepare genome reference", + "Step 2: Annotate mutations", + "Step 3: Prepare immunopeptidome", + "Step 4: Run pipeline", + ] + ) + with_tab_info(welcome_tab) + with_tab_genomes(genome_tab) + with_tab_annotator(annotate_tab) + with_tab_immunopeptidome(immunopeptidome_tab) + with_tab_pipeline(pipeline_tab) diff --git a/src/SOPRANO/ci_linux.yml b/src/SOPRANO/ci_linux.yml new file mode 100755 index 0000000..360c320 --- /dev/null +++ b/src/SOPRANO/ci_linux.yml @@ -0,0 +1,19 @@ +channels: + - conda-forge + - bioconda + - anaconda +dependencies: + - perl + - bedtools=2.31.0 + - python>=3.10,<3.12 + - pip + - pandas + - numpy + - streamlit==1.27.0 + - requests + - types-requests + - clint + - black + - pytest + - pytest-dependency + - ruff \ No newline at end of file diff --git a/src/SOPRANO/ci_osx.yml b/src/SOPRANO/ci_osx.yml new file mode 100755 index 0000000..95e0eef --- /dev/null +++ b/src/SOPRANO/ci_osx.yml @@ -0,0 +1,20 @@ +channels: + - conda-forge + - bioconda + - anaconda +dependencies: + - perl + - bedtools=2.31.0 + - python>=3.10,<3.12 + - coreutils + - pip + - pandas + - numpy + - streamlit==1.27.0 + - requests + - types-requests + - clint + - black + - pytest + - pytest-dependency + - ruff \ No newline at end of file diff --git a/src/SOPRANO/core/analysis.py b/src/SOPRANO/core/analysis.py index 6b4dbdc..19aa13a 100755 --- a/src/SOPRANO/core/analysis.py +++ b/src/SOPRANO/core/analysis.py @@ -5,7 +5,7 @@ from SOPRANO.utils.sh_utils import pipe -def _compute_theoretical_subs( +def _compute_theoretical_subs_192( cds_fasta: pathlib.Path, trans_regs: pathlib.Path ): """ @@ -25,7 +25,43 @@ def _compute_theoretical_subs( perl_path = Directories.scripts("calculate_sites_signaturesLZ_192.pl") pipe( - [perl_path.as_posix(), cds_fasta.as_posix(), trans_regs], + [ + "perl", + perl_path.as_posix(), + cds_fasta.as_posix(), + trans_regs.as_posix(), + ], + output_path=trans_regs, + overwrite=True, + ) + + +def _compute_theoretical_subs_7( + cds_fasta: pathlib.Path, trans_regs: pathlib.Path +): + """ + + Implement + + $BASEDIR/scripts/calculate_sites_signaturesLZ_192.pl + $TMP/$NAME.epitopes_cds.fasta $TMP/$NAME.listA > $TMP/$NAME.listA.sites + + Estimates all theoretical possible 192 subsitutions in target and + non-target regions + + :param cds_fasta: path to epitopes_cds of intra_epitopes_cds fasta file + :param trans_regs: list of transcript:regions + """ + + perl_path = Directories.scripts("calculate_sites_signaturesLZ.pl") + + pipe( + [ + "perl", + perl_path.as_posix(), + cds_fasta.as_posix(), + trans_regs.as_posix(), + ], output_path=trans_regs, overwrite=True, ) @@ -197,6 +233,53 @@ class SOPRANOError(Exception): pass +def _transform_192_to_7(paths: AnalysisPaths): + r""" + Implements: + + perl $BASEDIR/scripts/transform192to7.pl $NAME.finalVEP.triplets.counts + $BASEDIR/data/final_translate_SSB192toSSB7 | + awk -F "\t" '{OFS="\t"}{print $3,1,2,$2}' | sortBed -i stdin | + mergeBed -i stdin -c 4 -o sum | + awk '{OFS="\t"}{print "Estimated",$1,$4}' | + sed 's/_/\//g' > tmp_to_7 + + cp $NAME.finalVEP.triplets.counts $NAME.finalVEP.triplets192.counts + mv tmp_to_7 $NAME.finalVEP.triplets.counts + """ + + perl_path = Directories.scripts("transform192to7.pl") + translation_data_path = Directories.data("final_translate_SSB192toSSB7") + + if is_empty(paths.triplet_counts): + raise Warning( + f"{paths.triplet_counts}is empty before attempting conversion" + ) + + assert perl_path.exists() + assert translation_data_path.exists() + + import shutil + + shutil.copy(paths.triplet_counts, paths.triplet_counts.as_posix() + ".bkp") + + pipe( + [ + "perl", + perl_path.as_posix(), + paths.triplet_counts.as_posix(), + translation_data_path.as_posix(), + ], + ["awk", r'{OFS="\t"}{print $3,1,2,$2}'], # removed -F "\t" bit + ["sortBed", "-i", "stdin"], + ["mergeBed", "-i", "stdin", "-c", "4", "-o", "sum"], + ["awk", r'{OFS="\t"}{print "Estimated",$1,$4}'], + ["sed", r"s/_/\//g"], + output_path=paths.triplet_counts, + overwrite=True, + ) + + def _check_triplet_counts(paths: AnalysisPaths): """ Implements: @@ -241,13 +324,13 @@ def _check_triplet_counts(paths: AnalysisPaths): f"discarded (indels or reference conflicts)." ) - if int(back) < 7: + if int(back) + 1 < 7: # +1 due to lack of trailing \n in pipe output raise SOPRANOError( "Too few rate parameters available to analyse data." ) -def _correct_from_total_sites(paths: AnalysisPaths): +def _correct_from_total_sites_ssb192(paths: AnalysisPaths): """ Implements: perl $BASEDIR/scripts/correct_update_epitope_sitesV3.pl @@ -285,3 +368,43 @@ def _correct_from_total_sites(paths: AnalysisPaths): ], output_path=paths.final_intra_epitope_corrections, ) + + +def _correct_from_total_sites_ssb7(paths: AnalysisPaths): + """ + Implements: + perl $BASEDIR/scripts/correct_update_epitope_sitesV3.pl + $TMP/$NAME.listA.totalsites $NAME.finalVEP.triplets.counts > + $TMP/$NAME.final_corrected_matrix_A.txt + perl $BASEDIR/scripts/correct_update_epitope_sitesV3.pl + $TMP/$NAME.listB.totalsites $NAME.finalVEP.triplets.counts > + $TMP/$NAME.final_corrected_matrix_B.txt + + NOTE: listA.total sites is the trans_regs_sum for epitopes + and listB.total sites is the trans_regs_sum for intra epitopes + in the parameter defs. + + :param paths: + """ + + perl_script = Directories.scripts("correct_update_epitope_sitesV2.pl") + + pipe( + [ + "perl", + perl_script.as_posix(), + paths.epitopes_trans_regs_sum.as_posix(), + paths.triplet_counts.as_posix(), + ], + output_path=paths.final_epitope_corrections, + ) + + pipe( + [ + "perl", + perl_script.as_posix(), + paths.intra_epitopes_trans_regs_sum.as_posix(), + paths.triplet_counts.as_posix(), + ], + output_path=paths.final_intra_epitope_corrections, + ) diff --git a/src/SOPRANO/core/dnds.py b/src/SOPRANO/core/dnds.py index 27517ed..43a13db 100755 --- a/src/SOPRANO/core/dnds.py +++ b/src/SOPRANO/core/dnds.py @@ -90,6 +90,18 @@ def _preprocess_dfs(paths: AnalysisPaths): return merged_df, sites_extra_df, sites_intra_df +def get_series_value(df: pd.Series, value_key: str, default=0): + try: + value = df[value_key] + except KeyError: + print( + f"WARNING: No value found in data frame for key '{value_key}'." + f"\n... returning {default}" + ) + value = default + return value + + def _compute_mutation_counts(merged_df: pd.DataFrame) -> pd.Series: try: mutations_only = merged_df.drop(["EnsemblID", "intronrate"], axis=1) @@ -97,14 +109,24 @@ def _compute_mutation_counts(merged_df: pd.DataFrame) -> pd.Series: mutations_only = merged_df.drop(["EnsemblID"], axis=1) mutations_sums = mutations_only.sum(axis=0) # type: pd.Series - n_total_epitope = ( - mutations_sums["extra_missense_variant"] - + mutations_sums["extra_synonymous_variant"] - ) - n_total_nonepitope = ( - mutations_sums["intra_missense_variant"] - + mutations_sums["intra_synonymous_variant"] - ) + # n_total_epitope = ( + # mutations_sums["extra_missense_variant"] + # + mutations_sums["extra_synonymous_variant"] + # ) + # n_total_nonepitope = ( + # mutations_sums["intra_missense_variant"] + # + mutations_sums["intra_synonymous_variant"] + # ) + + # In some instances the epiptope data file will not contain data for + # certain variants! _add_if_key_present prevents such key errors. + n_total_epitope = get_series_value( + mutations_sums, "extra_missense_variant" + ) + get_series_value(mutations_sums, "extra_synonymous_variant") + n_total_nonepitope = get_series_value( + mutations_sums, "intra_missense_variant" + ) + get_series_value(mutations_sums, "intra_synonymous_variant") + combined_sums = pd.Series( { "mut_total_epitope": n_total_epitope, @@ -134,17 +156,32 @@ def _define_variables( def _rescale_intron_by_synonymous(variables: pd.Series): - # Sum over intron and synonymous muts - n_intron = variables["mutsintron"] - n_intra_syn = variables["intra_synonymous_variant"] - n_extra_syn = variables["extra_synonymous_variant"] + # Sum over intron and synonymous muts TODO: Fix + n_intron = get_series_value(variables, "mutsintron") + n_intra_syn = get_series_value(variables, "intra_synonymous_variant") + n_extra_syn = get_series_value(variables, "extra_synonymous_variant") # Second element of intra and extra sites - n_intra_sites_2 = variables["intra_site_2"] - n_extra_sites_2 = variables["extra_site_2"] + n_intra_sites_2 = get_series_value(variables, "intra_site_2") + n_extra_sites_2 = get_series_value(variables, "extra_site_2") + + try: + ri = n_intra_syn / n_intra_sites_2 + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "intra sites. n_intra_syn / n_intra_sites_2 -> inf" + ) + ri = np.inf - ri = n_intra_syn / n_intra_sites_2 - re = n_extra_syn / n_extra_sites_2 + try: + re = n_extra_syn / n_extra_sites_2 + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "extra sites. n_extra_syn / n_extra_sites_2 -> inf" + ) + re = np.inf return 2 * n_intron / (ri + re) @@ -154,15 +191,30 @@ def _compute_kaks(variables: pd.Series, prefix: str): raise ValueError(prefix) # Sum vals over missesne and synonymous muts - n_mis = variables[f"{prefix}_missense_variant"] - n_syn = variables[f"{prefix}_synonymous_variant"] + n_mis = get_series_value(variables, f"{prefix}_missense_variant") + n_syn = get_series_value(variables, f"{prefix}_synonymous_variant") # First and second elements of sites vector sites_1 = variables[f"{prefix}_site_1"] sites_2 = variables[f"{prefix}_site_2"] - rn = n_mis / n_syn - rs = sites_2 / sites_1 + try: + rn = n_mis / n_syn + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "synonymous variants. n_mis / n_syn -> inf" + ) + rn = np.inf + + try: + rs = sites_2 / sites_1 + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "sites. sites_2 / sites_1 -> inf" + ) + rs = np.inf return rn * rs @@ -177,19 +229,35 @@ def _compute_kaks_intra(variables: pd.Series): def _compute_kaks_intron(variables: pd.Series): # Sum vals over intron, missesne and synonymous intra muts - n_int = variables["mutsintron"] - n_mis = variables["intra_missense_variant"] - n_syn = variables["intra_synonymous_variant"] + n_int = get_series_value(variables, "mutsintron") + n_mis = get_series_value(variables, "intra_missense_variant") + n_syn = get_series_value(variables, "intra_synonymous_variant") # First and second elements of sites vector - sites_1 = variables["intra_site_1"] - sites_2 = variables["intra_site_2"] + sites_1 = get_series_value(variables, "intra_site_1") + sites_2 = get_series_value(variables, "intra_site_2") # Get intron muts rescaled by synonymous muts n_intron_rescaled = _rescale_intron_by_synonymous(variables) - rn = n_mis / (n_syn + n_int) - rs = (sites_2 + n_intron_rescaled) / sites_1 + try: + rn = n_mis / (n_syn + n_int) + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "synonymous and intronic muts. n_mis / (n_syn + n_int) -> inf" + ) + rn = np.inf + + try: + rs = (sites_2 + n_intron_rescaled) / sites_1 + except ZeroDivisionError: + print( + "WARNING: Zero division occurred driven by number of " + "synonymous and intronic muts. " + "(sites_2 + n_intron_rescaled) / sites_1 -> inf" + ) + rs = np.inf return rn * rs @@ -221,22 +289,24 @@ def _compute_conf_interval(variables: pd.Series, prefix: str, method: str): raise ValueError(f"Unimplemented method: {method}") if prefix == "intra": - n_mis = variables["intra_missense_variant"] - n_syn = variables["intra_synonymous_variant"] - sites_1 = variables["intra_site_1"] - sites_2 = variables["intra_site_2"] + n_mis = get_series_value(variables, "intra_missense_variant") + n_syn = get_series_value(variables, "intra_synonymous_variant") + sites_1 = get_series_value(variables, "intra_site_1") + sites_2 = get_series_value(variables, "intra_site_2") elif prefix == "extra": - n_mis = variables["extra_missense_variant"] - n_syn = variables["extra_synonymous_variant"] - sites_1 = variables["extra_site_1"] - sites_2 = variables["extra_site_2"] + n_mis = get_series_value(variables, "extra_missense_variant") + n_syn = get_series_value(variables, "extra_synonymous_variant") + sites_1 = get_series_value(variables, "extra_site_1") + sites_2 = get_series_value(variables, "extra_site_2") elif prefix == "intron": - n_mis = variables["intra_missense_variant"] - n_syn = variables["intra_synonymous_variant"] + variables["mutsintron"] - sites_1 = variables["intra_site_1"] - sites_2 = variables["intra_site_2"] + _rescale_intron_by_synonymous( - variables - ) + n_mis = get_series_value(variables, "intra_missense_variant") + n_syn = get_series_value( + variables, "intra_synonymous_variant" + ) + get_series_value(variables, "mutsintron") + sites_1 = get_series_value(variables, "intra_site_1") + sites_2 = get_series_value( + variables, "intra_site_2" + ) + _rescale_intron_by_synonymous(variables) else: raise ValueError(prefix) @@ -327,14 +397,14 @@ def _compute_coverage(paths: AnalysisPaths): "OFF_High_CI": [conf_intervals["intra_Cl_high"]], "OFF_Mutations": [mut_counts["mut_total_non_epitope"]], "Pvalue": [pval_intra], - "ON_na": [vars["extra_missense_variant"]], - "ON_NA": [vars["extra_site_1"]], - "ON_ns": [vars["extra_synonymous_variant"]], - "ON_NS": [vars["extra_site_2"]], - "OFF_na": [vars["intra_missense_variant"]], - "OFF_NA": [vars["intra_site_1"]], - "OFF_ns": [vars["intra_synonymous_variant"]], - "OFF_NS": [vars["intra_site_2"]], + "ON_na": [get_series_value(vars, "extra_missense_variant")], + "ON_NA": [get_series_value(vars, "extra_site_1")], + "ON_ns": [get_series_value(vars, "extra_synonymous_variant")], + "ON_NS": [get_series_value(vars, "extra_site_2")], + "OFF_na": [get_series_value(vars, "intra_missense_variant")], + "OFF_NA": [get_series_value(vars, "intra_site_1")], + "OFF_ns": [get_series_value(vars, "intra_synonymous_variant")], + "OFF_NS": [get_series_value(vars, "intra_site_2")], } ) @@ -356,16 +426,17 @@ def _compute_coverage(paths: AnalysisPaths): "OFF_High_CI": [conf_intervals["intron_Cl_high"]], "OFF_Mutations": [mut_counts["mut_total_intron"]], "Pvalue": [pval_intron], - "ON_na": [vars["extra_missense_variant"]], - "ON_NA": [vars["extra_site_1"]], - "ON_ns": [vars["extra_synonymous_variant"]], - "ON_NS": [vars["extra_site_2"]], - "OFF_na": [vars["intra_missense_variant"]], - "OFF_NA": [vars["intra_site_1"]], + "ON_na": [get_series_value(vars, "extra_missense_variant")], + "ON_NA": [get_series_value(vars, "extra_site_1")], + "ON_ns": [get_series_value(vars, "extra_synonymous_variant")], + "ON_NS": [get_series_value(vars, "extra_site_2")], + "OFF_na": [get_series_value(vars, "intra_missense_variant")], + "OFF_NA": [get_series_value(vars, "intra_site_1")], "OFF_ns": [ - vars["intra_synonymous_variant"] + vars["mutsintron"] + get_series_value(vars, "intra_synonymous_variant") + + get_series_value(vars, "mutsintron") ], - "OFF_NS": [vars["intra_site_2"] + rs_intron], + "OFF_NS": [get_series_value(vars, "intra_site_2") + rs_intron], } ) results_df = pd.concat([results_df, intron_df], axis=0) diff --git a/src/SOPRANO/core/objects.py b/src/SOPRANO/core/objects.py index 747c380..54477e4 100755 --- a/src/SOPRANO/core/objects.py +++ b/src/SOPRANO/core/objects.py @@ -1,8 +1,20 @@ import pathlib from argparse import Namespace from dataclasses import dataclass +from typing import Set from SOPRANO.utils.path_utils import Directories, genome_pars_to_paths +from SOPRANO.utils.url_utils import ( + build_ensembl_urls, + check_ensembl_file_url, + compute_chrom_sizes, + compute_fasta_index, + decompress, + download_from_url, + filename_from_url, + find_earliest_release, + find_latest_release, +) @dataclass(frozen=True) @@ -180,7 +192,8 @@ def _cached_path(self, *extensions): "use_random", "keep_drivers", "seed", - "genome_ref", + "species", + "assembly", "release", ) @@ -226,16 +239,21 @@ def from_namespace(cls, namespace: Namespace): namespace.transcript_ids, ) - if namespace.genome_ref in ("GRCh37", "GRCh38"): - fasta_path, chrom_path = genome_pars_to_paths( - namespace.genome_ref, namespace.genome_rel + species = namespace.species + assembly = namespace.assembly + release = namespace.release + + if assembly == "GRCh37": + assert species == "homo_sapiens", species + genomes = ( + EnsemblData.homo_sapiens_GRCh37().get_genome_reference_paths( + release + ) ) - genomes = GenomePaths(sizes=chrom_path, fasta=fasta_path) else: - raise KeyError( - f"Unrecognized reference: {namespace.genome_ref}\n" - f"Possibly requires implementation." - ) + genomes = EnsemblData( + species=species, assembly=assembly + ).get_genome_reference_paths(release) return cls( analysis_name=namespace.analysis_name, @@ -254,3 +272,193 @@ def from_namespace(cls, namespace: Namespace): class SOPRANOError(Exception): pass + + +class _GatherReferences: + # Urls + toplevel_url: str + primary_assembly_url: str + + # Params + species: str + assembly: str + + # Status + toplevel_gz_done: Set[int] = set() + toplevel_fa_done: Set[int] = set() + toplevel_fai_done: Set[int] = set() + primary_assembly_gz_done: Set[int] = set() + primary_assembly_fa_done: Set[int] = set() + primary_assembly_fai_done: Set[int] = set() + sizes_done: Set[int] = set() + + def _dest_directory(self, release: int): + return Directories.data(self.species) / f"{release}_{self.assembly}" + + def _dest_fa_gz(self, release: int, _toplevel: bool): + return self._dest_directory(release) / filename_from_url( + self.toplevel_url if _toplevel else self.primary_assembly_url + ).format(RELEASE=release) + + def _dest_fa(self, release: int, _toplevel: bool): + return self._dest_fa_gz(release, _toplevel).with_suffix("") + + def _dest_fai(self, release: int, _toplevel: bool): + return self._dest_fa_gz(release, _toplevel).with_suffix(".fai") + + def dest_chrom(self, release: int, _toplevel: bool): + return self._dest_fa(release, _toplevel).with_suffix(".chrom") + + def toplevel_fa_gz_path(self, release: int): + return self._dest_fa_gz(release, _toplevel=True) + + def toplevel_fa_path(self, release: int): + return self._dest_fa(release, _toplevel=True) + + def toplevel_fai_path(self, release: int): + return self._dest_fai(release, _toplevel=True) + + def toplevel_chrom_path(self, release: int): + return self.toplevel_fa_path(release).with_suffix(".chrom") + + def primary_assembly_fa_gz_path(self, release: int): + return self._dest_fa_gz(release, _toplevel=False) + + def primary_assembly_fa_path(self, release: int): + return self._dest_fa(release, _toplevel=False) + + def primary_assembly_fai_path(self, release: int): + return self._dest_fai(release, _toplevel=False) + + def _download(self, release: int, _toplevel): + if _toplevel: + source_url = self.toplevel_url + dest_path = self.toplevel_fa_gz_path(release) + decompressed_path = self.toplevel_fa_path(release) + else: + source_url = self.primary_assembly_url + dest_path = self.primary_assembly_fa_gz_path(release) + decompressed_path = self.primary_assembly_fa_path(release) + + if not (decompressed_path.exists() or dest_path.exists()): + dest_path.parent.mkdir(parents=True, exist_ok=True) + check_ensembl_file_url(source_url, release) + download_from_url( + source_url.format(RELEASE=release), + target_path=dest_path, + ) + + def _check_release_ok(self, release): + min_release = find_earliest_release(self.toplevel_url) + max_release = find_latest_release(self.toplevel_url) + + if not (min_release <= release <= max_release): + raise ValueError(release) + + def download_toplevel(self, release): + if release not in self.toplevel_gz_done: + self._check_release_ok(release) + + if not self.toplevel_fa_gz_path(release).exists(): + self._download(release, _toplevel=True) + + self.toplevel_gz_done.add(release) + + def download_primary_assembly(self, release): + if release not in self.primary_assembly_gz_done: + self._check_release_ok(release) + + if not self.primary_assembly_fa_gz_path(release).exists(): + self._download(release, _toplevel=False) + + self.primary_assembly_gz_done.add(release) + + def decompress_toplevel(self, release): + if release not in self.toplevel_fa_done: + if not self.toplevel_fa_path(release).exists(): + decompress(self.toplevel_fa_gz_path(release)) + + self.toplevel_fa_done.add(release) + + def decompress_primary_assembly(self, release): + if release not in self.primary_assembly_fa_done: + if not self.primary_assembly_fa_path(release).exists(): + decompress(self.primary_assembly_fa_gz_path(release)) + + self.primary_assembly_fa_done.add(release) + + def compute_chrom_sizes(self, release): + if release not in self.sizes_done: + if not self.toplevel_chrom_path(release).exists(): + compute_chrom_sizes(self.toplevel_fai_path(release)) + + self.sizes_done.add(release) + + def compute_fasta_index_toplevel(self, release): + if release not in self.toplevel_fai_done: + if not self.toplevel_fai_path(release).exists(): + compute_fasta_index(self.toplevel_fa_path(release)) + + self.toplevel_fai_done.add(release) + + def compute_fasta_index_primary_assembly(self, release): + if release not in self.primary_assembly_fai_done: + if not self.primary_assembly_fai_path(release).exists(): + compute_fasta_index(self.primary_assembly_fa_path(release)) + + self.primary_assembly_fai_done.add(release) + + def compute_all_toplevel(self, release): + self.download_toplevel(release) + self.decompress_toplevel(release) + self.compute_fasta_index_toplevel(release) + self.compute_chrom_sizes(release) + + def compute_all_primary_assembly(self, release): + self.download_primary_assembly(release) + self.decompress_primary_assembly(release) + self.compute_fasta_index_primary_assembly(release) + + def get_genome_reference_paths(self, release): + return GenomePaths( + sizes=self.toplevel_chrom_path(release), + fasta=self.toplevel_fa_path(release), + ) + + +class EnsemblData(_GatherReferences): + def __init__(self, species: str, assembly: str, _init_urls=True): + self.species = species + self.assembly = assembly + + if _init_urls: + url_dict = build_ensembl_urls(species, assembly) + self.toplevel_url = url_dict["toplevel"] + self.primary_assembly_url = url_dict["primary_assembly"] + + @classmethod + def homo_sapiens_GRCh38(cls): + return cls("homo_sapiens", "GRCh38") + + @classmethod + def homo_sapiens_GRCh37(cls): + # GRCh37 is actually has a deviant url structure, so manually set here + toplevel_url = ( + "https://ftp.ensembl.org/pub/grch37/release-{RELEASE}/" + "fasta/homo_sapiens/dna/" + "Homo_sapiens.GRCh37.dna.toplevel.fa.gz" + ) + + primary_assembly_url = ( + "https://ftp.ensembl.org/pub/grch37/release-{RELEASE}/" + "fasta/homo_sapiens/dna/" + "Homo_sapiens.GRCh37.dna.primary_assembly.fa.gz" + ) + + species = "homo_sapiens" + assembly = "GRCh37" + + obj = cls(species, assembly, _init_urls=False) + obj.toplevel_url = toplevel_url + obj.primary_assembly_url = primary_assembly_url + return obj diff --git a/src/SOPRANO/core/prepare_coordinates.py b/src/SOPRANO/core/prepare_coordinates.py index 6c9156c..ca38232 100755 --- a/src/SOPRANO/core/prepare_coordinates.py +++ b/src/SOPRANO/core/prepare_coordinates.py @@ -347,7 +347,7 @@ def _prep_ssb192(paths: AnalysisPaths): ) -def _prep_not_ssb192(paths: AnalysisPaths): +def _prep_ssb7(paths: AnalysisPaths): """ Implements: diff --git a/src/SOPRANO/data/allhlaBinders_exprmean1.IEDBpeps.bed.unique_ids b/src/SOPRANO/data/allhlaBinders_exprmean1.IEDBpeps.bed.unique_ids new file mode 100644 index 0000000..1fc8fb7 --- /dev/null +++ b/src/SOPRANO/data/allhlaBinders_exprmean1.IEDBpeps.bed.unique_ids @@ -0,0 +1,9754 @@ +ENST00000000233 +ENST00000000412 +ENST00000001008 +ENST00000001146 +ENST00000002125 +ENST00000002165 +ENST00000002829 +ENST00000003084 +ENST00000003100 +ENST00000003302 +ENST00000004531 +ENST00000005178 +ENST00000005257 +ENST00000005260 +ENST00000005286 +ENST00000005340 +ENST00000005386 +ENST00000006015 +ENST00000006275 +ENST00000006658 +ENST00000006777 +ENST00000007390 +ENST00000007414 +ENST00000008527 +ENST00000009041 +ENST00000009530 +ENST00000011473 +ENST00000011619 +ENST00000011653 +ENST00000012049 +ENST00000012443 +ENST00000013070 +ENST00000013125 +ENST00000013807 +ENST00000014914 +ENST00000014930 +ENST00000016171 +ENST00000017003 +ENST00000019317 +ENST00000023939 +ENST00000025008 +ENST00000025301 +ENST00000026218 +ENST00000027335 +ENST00000029410 +ENST00000033079 +ENST00000035307 +ENST00000037243 +ENST00000037502 +ENST00000037869 +ENST00000039989 +ENST00000040584 +ENST00000040663 +ENST00000040738 +ENST00000040877 +ENST00000046794 +ENST00000052754 +ENST00000053243 +ENST00000053468 +ENST00000053867 +ENST00000054650 +ENST00000054666 +ENST00000054950 +ENST00000055077 +ENST00000055335 +ENST00000056217 +ENST00000056233 +ENST00000061240 +ENST00000064780 +ENST00000072644 +ENST00000072869 +ENST00000074304 +ENST00000075120 +ENST00000075503 +ENST00000078429 +ENST00000080059 +ENST00000081029 +ENST00000083182 +ENST00000084798 +ENST00000085068 +ENST00000085219 +ENST00000155840 +ENST00000155926 +ENST00000156109 +ENST00000156471 +ENST00000156825 +ENST00000157600 +ENST00000157812 +ENST00000158762 +ENST00000158771 +ENST00000159087 +ENST00000159111 +ENST00000160262 +ENST00000160373 +ENST00000160827 +ENST00000161559 +ENST00000161863 +ENST00000162044 +ENST00000162391 +ENST00000162749 +ENST00000163416 +ENST00000164133 +ENST00000164139 +ENST00000164227 +ENST00000164305 +ENST00000164640 +ENST00000166345 +ENST00000168216 +ENST00000169298 +ENST00000169551 +ENST00000170168 +ENST00000170447 +ENST00000170564 +ENST00000171111 +ENST00000171757 +ENST00000171887 +ENST00000173229 +ENST00000173527 +ENST00000174618 +ENST00000175091 +ENST00000175756 +ENST00000176763 +ENST00000178638 +ENST00000178640 +ENST00000179259 +ENST00000181839 +ENST00000182527 +ENST00000184266 +ENST00000184956 +ENST00000185150 +ENST00000185206 +ENST00000186436 +ENST00000187762 +ENST00000188312 +ENST00000188790 +ENST00000192788 +ENST00000193322 +ENST00000194152 +ENST00000194155 +ENST00000194214 +ENST00000194530 +ENST00000196061 +ENST00000196371 +ENST00000196489 +ENST00000198536 +ENST00000198767 +ENST00000199320 +ENST00000199389 +ENST00000199448 +ENST00000199706 +ENST00000199764 +ENST00000199814 +ENST00000200135 +ENST00000200453 +ENST00000200457 +ENST00000200676 +ENST00000201031 +ENST00000202017 +ENST00000202556 +ENST00000202677 +ENST00000202816 +ENST00000202967 +ENST00000203001 +ENST00000203166 +ENST00000203407 +ENST00000203556 +ENST00000203629 +ENST00000203630 +ENST00000204517 +ENST00000204549 +ENST00000204566 +ENST00000204604 +ENST00000204679 +ENST00000204961 +ENST00000205061 +ENST00000205194 +ENST00000205214 +ENST00000205402 +ENST00000206020 +ENST00000206423 +ENST00000206474 +ENST00000206542 +ENST00000206595 +ENST00000207549 +ENST00000207870 +ENST00000209718 +ENST00000209728 +ENST00000209873 +ENST00000209875 +ENST00000209884 +ENST00000210060 +ENST00000210187 +ENST00000210313 +ENST00000210444 +ENST00000211287 +ENST00000211314 +ENST00000211936 +ENST00000211998 +ENST00000212015 +ENST00000212355 +ENST00000214869 +ENST00000215057 +ENST00000215061 +ENST00000215115 +ENST00000215375 +ENST00000215565 +ENST00000215567 +ENST00000215570 +ENST00000215574 +ENST00000215582 +ENST00000215587 +ENST00000215631 +ENST00000215659 +ENST00000215730 +ENST00000215739 +ENST00000215742 +ENST00000215743 +ENST00000215754 +ENST00000215770 +ENST00000215793 +ENST00000215794 +ENST00000215829 +ENST00000215832 +ENST00000215838 +ENST00000215862 +ENST00000215882 +ENST00000215886 +ENST00000215906 +ENST00000215909 +ENST00000215912 +ENST00000215917 +ENST00000215941 +ENST00000215957 +ENST00000215980 +ENST00000216027 +ENST00000216034 +ENST00000216037 +ENST00000216038 +ENST00000216039 +ENST00000216044 +ENST00000216068 +ENST00000216085 +ENST00000216099 +ENST00000216106 +ENST00000216115 +ENST00000216117 +ENST00000216121 +ENST00000216122 +ENST00000216124 +ENST00000216129 +ENST00000216133 +ENST00000216146 +ENST00000216160 +ENST00000216181 +ENST00000216185 +ENST00000216190 +ENST00000216194 +ENST00000216214 +ENST00000216218 +ENST00000216223 +ENST00000216225 +ENST00000216237 +ENST00000216252 +ENST00000216254 +ENST00000216259 +ENST00000216264 +ENST00000216268 +ENST00000216271 +ENST00000216274 +ENST00000216277 +ENST00000216286 +ENST00000216294 +ENST00000216297 +ENST00000216336 +ENST00000216338 +ENST00000216341 +ENST00000216367 +ENST00000216373 +ENST00000216392 +ENST00000216410 +ENST00000216416 +ENST00000216420 +ENST00000216442 +ENST00000216452 +ENST00000216455 +ENST00000216465 +ENST00000216468 +ENST00000216479 +ENST00000216484 +ENST00000216487 +ENST00000216489 +ENST00000216513 +ENST00000216554 +ENST00000216602 +ENST00000216605 +ENST00000216639 +ENST00000216714 +ENST00000216733 +ENST00000216780 +ENST00000216797 +ENST00000216802 +ENST00000216807 +ENST00000216832 +ENST00000216951 +ENST00000216962 +ENST00000217026 +ENST00000217109 +ENST00000217131 +ENST00000217173 +ENST00000217182 +ENST00000217195 +ENST00000217233 +ENST00000217244 +ENST00000217254 +ENST00000217289 +ENST00000217381 +ENST00000217402 +ENST00000217426 +ENST00000217446 +ENST00000217455 +ENST00000217456 +ENST00000217515 +ENST00000217652 +ENST00000217740 +ENST00000217901 +ENST00000217909 +ENST00000217939 +ENST00000217958 +ENST00000217961 +ENST00000217964 +ENST00000217971 +ENST00000218032 +ENST00000218056 +ENST00000218089 +ENST00000218104 +ENST00000218176 +ENST00000218230 +ENST00000218340 +ENST00000218348 +ENST00000218388 +ENST00000218516 +ENST00000218652 +ENST00000219022 +ENST00000219066 +ENST00000219069 +ENST00000219070 +ENST00000219097 +ENST00000219139 +ENST00000219150 +ENST00000219169 +ENST00000219204 +ENST00000219207 +ENST00000219235 +ENST00000219240 +ENST00000219252 +ENST00000219271 +ENST00000219281 +ENST00000219299 +ENST00000219302 +ENST00000219313 +ENST00000219334 +ENST00000219345 +ENST00000219368 +ENST00000219439 +ENST00000219454 +ENST00000219473 +ENST00000219479 +ENST00000219481 +ENST00000219548 +ENST00000219611 +ENST00000219689 +ENST00000219746 +ENST00000219782 +ENST00000219789 +ENST00000219837 +ENST00000219905 +ENST00000219919 +ENST00000220003 +ENST00000220058 +ENST00000220166 +ENST00000220325 +ENST00000220429 +ENST00000220496 +ENST00000220507 +ENST00000220509 +ENST00000220514 +ENST00000220531 +ENST00000220562 +ENST00000220584 +ENST00000220592 +ENST00000220597 +ENST00000220659 +ENST00000220669 +ENST00000220751 +ENST00000220763 +ENST00000220764 +ENST00000220809 +ENST00000220822 +ENST00000220849 +ENST00000220853 +ENST00000220913 +ENST00000220966 +ENST00000221086 +ENST00000221114 +ENST00000221130 +ENST00000221132 +ENST00000221138 +ENST00000221200 +ENST00000221233 +ENST00000221265 +ENST00000221283 +ENST00000221327 +ENST00000221418 +ENST00000221419 +ENST00000221455 +ENST00000221462 +ENST00000221466 +ENST00000221480 +ENST00000221486 +ENST00000221494 +ENST00000221543 +ENST00000221561 +ENST00000221566 +ENST00000221573 +ENST00000221665 +ENST00000221671 +ENST00000221801 +ENST00000221804 +ENST00000221847 +ENST00000221855 +ENST00000221859 +ENST00000221922 +ENST00000221930 +ENST00000221957 +ENST00000221972 +ENST00000221978 +ENST00000221992 +ENST00000222005 +ENST00000222008 +ENST00000222032 +ENST00000222120 +ENST00000222122 +ENST00000222145 +ENST00000222214 +ENST00000222219 +ENST00000222247 +ENST00000222250 +ENST00000222254 +ENST00000222256 +ENST00000222284 +ENST00000222286 +ENST00000222305 +ENST00000222329 +ENST00000222330 +ENST00000222345 +ENST00000222374 +ENST00000222388 +ENST00000222399 +ENST00000222402 +ENST00000222511 +ENST00000222547 +ENST00000222553 +ENST00000222567 +ENST00000222573 +ENST00000222574 +ENST00000222584 +ENST00000222644 +ENST00000222673 +ENST00000222693 +ENST00000222725 +ENST00000222726 +ENST00000222800 +ENST00000222812 +ENST00000222823 +ENST00000222990 +ENST00000223023 +ENST00000223029 +ENST00000223061 +ENST00000223073 +ENST00000223095 +ENST00000223127 +ENST00000223129 +ENST00000223136 +ENST00000223145 +ENST00000223208 +ENST00000223210 +ENST00000223215 +ENST00000223293 +ENST00000223321 +ENST00000223324 +ENST00000223357 +ENST00000223368 +ENST00000223369 +ENST00000223398 +ENST00000223500 +ENST00000223528 +ENST00000223641 +ENST00000223642 +ENST00000223795 +ENST00000223864 +ENST00000224073 +ENST00000224140 +ENST00000224337 +ENST00000224756 +ENST00000224807 +ENST00000224950 +ENST00000225171 +ENST00000225174 +ENST00000225235 +ENST00000225276 +ENST00000225296 +ENST00000225298 +ENST00000225388 +ENST00000225430 +ENST00000225504 +ENST00000225519 +ENST00000225525 +ENST00000225538 +ENST00000225573 +ENST00000225576 +ENST00000225577 +ENST00000225609 +ENST00000225655 +ENST00000225665 +ENST00000225688 +ENST00000225698 +ENST00000225719 +ENST00000225724 +ENST00000225726 +ENST00000225728 +ENST00000225729 +ENST00000225737 +ENST00000225777 +ENST00000225792 +ENST00000225873 +ENST00000225916 +ENST00000225927 +ENST00000225941 +ENST00000225964 +ENST00000225969 +ENST00000225972 +ENST00000225983 +ENST00000226004 +ENST00000226091 +ENST00000226105 +ENST00000226225 +ENST00000226230 +ENST00000226253 +ENST00000226279 +ENST00000226317 +ENST00000226574 +ENST00000226578 +ENST00000226760 +ENST00000226796 +ENST00000226798 +ENST00000227155 +ENST00000227163 +ENST00000227266 +ENST00000227322 +ENST00000227451 +ENST00000227471 +ENST00000227474 +ENST00000227507 +ENST00000227520 +ENST00000227524 +ENST00000227525 +ENST00000227618 +ENST00000227638 +ENST00000227752 +ENST00000227756 +ENST00000227758 +ENST00000227868 +ENST00000227880 +ENST00000228027 +ENST00000228136 +ENST00000228251 +ENST00000228280 +ENST00000228284 +ENST00000228347 +ENST00000228437 +ENST00000228438 +ENST00000228495 +ENST00000228506 +ENST00000228510 +ENST00000228515 +ENST00000228682 +ENST00000228705 +ENST00000228740 +ENST00000228741 +ENST00000228799 +ENST00000228820 +ENST00000228825 +ENST00000228865 +ENST00000228872 +ENST00000228918 +ENST00000228928 +ENST00000228938 +ENST00000228945 +ENST00000229195 +ENST00000229214 +ENST00000229238 +ENST00000229239 +ENST00000229266 +ENST00000229268 +ENST00000229281 +ENST00000229314 +ENST00000229328 +ENST00000229329 +ENST00000229330 +ENST00000229340 +ENST00000229379 +ENST00000229390 +ENST00000229395 +ENST00000229402 +ENST00000229416 +ENST00000229595 +ENST00000229633 +ENST00000229729 +ENST00000229758 +ENST00000229769 +ENST00000229795 +ENST00000229812 +ENST00000229829 +ENST00000229903 +ENST00000229922 +ENST00000229955 +ENST00000230036 +ENST00000230048 +ENST00000230050 +ENST00000230056 +ENST00000230085 +ENST00000230122 +ENST00000230124 +ENST00000230340 +ENST00000230431 +ENST00000230449 +ENST00000230461 +ENST00000230538 +ENST00000230640 +ENST00000230771 +ENST00000230792 +ENST00000230859 +ENST00000230882 +ENST00000230895 +ENST00000230990 +ENST00000231004 +ENST00000231009 +ENST00000231130 +ENST00000231134 +ENST00000231137 +ENST00000231173 +ENST00000231198 +ENST00000231238 +ENST00000231368 +ENST00000231461 +ENST00000231484 +ENST00000231498 +ENST00000231512 +ENST00000231524 +ENST00000231572 +ENST00000231668 +ENST00000231721 +ENST00000231751 +ENST00000231790 +ENST00000231887 +ENST00000231948 +ENST00000232219 +ENST00000232375 +ENST00000232424 +ENST00000232496 +ENST00000232501 +ENST00000232564 +ENST00000232607 +ENST00000232744 +ENST00000232766 +ENST00000232854 +ENST00000232888 +ENST00000232905 +ENST00000232974 +ENST00000232975 +ENST00000232978 +ENST00000233025 +ENST00000233027 +ENST00000233055 +ENST00000233057 +ENST00000233078 +ENST00000233099 +ENST00000233121 +ENST00000233143 +ENST00000233146 +ENST00000233154 +ENST00000233156 +ENST00000233331 +ENST00000233336 +ENST00000233379 +ENST00000233468 +ENST00000233557 +ENST00000233575 +ENST00000233596 +ENST00000233616 +ENST00000233623 +ENST00000233627 +ENST00000233630 +ENST00000233735 +ENST00000233813 +ENST00000233838 +ENST00000233893 +ENST00000233969 +ENST00000234038 +ENST00000234111 +ENST00000234160 +ENST00000234170 +ENST00000234256 +ENST00000234296 +ENST00000234310 +ENST00000234313 +ENST00000234396 +ENST00000234420 +ENST00000234453 +ENST00000234454 +ENST00000234590 +ENST00000234677 +ENST00000234739 +ENST00000234827 +ENST00000234831 +ENST00000234875 +ENST00000235090 +ENST00000235307 +ENST00000235329 +ENST00000235332 +ENST00000235345 +ENST00000235372 +ENST00000235382 +ENST00000235521 +ENST00000235532 +ENST00000235835 +ENST00000236040 +ENST00000236137 +ENST00000236147 +ENST00000236192 +ENST00000236273 +ENST00000236671 +ENST00000236959 +ENST00000236980 +ENST00000237014 +ENST00000237172 +ENST00000237264 +ENST00000237281 +ENST00000237283 +ENST00000237289 +ENST00000237380 +ENST00000237455 +ENST00000237530 +ENST00000237536 +ENST00000237596 +ENST00000237612 +ENST00000237654 +ENST00000237696 +ENST00000237822 +ENST00000237853 +ENST00000237889 +ENST00000237937 +ENST00000238112 +ENST00000238146 +ENST00000238156 +ENST00000238256 +ENST00000238497 +ENST00000238561 +ENST00000238609 +ENST00000238616 +ENST00000238647 +ENST00000238651 +ENST00000238667 +ENST00000238682 +ENST00000238714 +ENST00000238738 +ENST00000238788 +ENST00000238789 +ENST00000238823 +ENST00000238831 +ENST00000238855 +ENST00000238875 +ENST00000238892 +ENST00000238936 +ENST00000238994 +ENST00000239151 +ENST00000239165 +ENST00000239223 +ENST00000239231 +ENST00000239243 +ENST00000239440 +ENST00000239446 +ENST00000239449 +ENST00000239461 +ENST00000239666 +ENST00000239690 +ENST00000239830 +ENST00000239878 +ENST00000239882 +ENST00000239891 +ENST00000239906 +ENST00000239938 +ENST00000240055 +ENST00000240079 +ENST00000240100 +ENST00000240185 +ENST00000240285 +ENST00000240316 +ENST00000240328 +ENST00000240333 +ENST00000240364 +ENST00000240423 +ENST00000240488 +ENST00000240499 +ENST00000240587 +ENST00000240617 +ENST00000240618 +ENST00000240651 +ENST00000240662 +ENST00000240851 +ENST00000240922 +ENST00000241014 +ENST00000241041 +ENST00000241051 +ENST00000241052 +ENST00000241261 +ENST00000241305 +ENST00000241337 +ENST00000241416 +ENST00000241436 +ENST00000241453 +ENST00000241463 +ENST00000241502 +ENST00000242057 +ENST00000242067 +ENST00000242108 +ENST00000242159 +ENST00000242208 +ENST00000242209 +ENST00000242248 +ENST00000242257 +ENST00000242261 +ENST00000242351 +ENST00000242465 +ENST00000242480 +ENST00000242505 +ENST00000242576 +ENST00000242591 +ENST00000242592 +ENST00000242719 +ENST00000242728 +ENST00000242729 +ENST00000242776 +ENST00000242784 +ENST00000242786 +ENST00000242827 +ENST00000242839 +ENST00000243045 +ENST00000243077 +ENST00000243108 +ENST00000243167 +ENST00000243189 +ENST00000243253 +ENST00000243326 +ENST00000243344 +ENST00000243346 +ENST00000243389 +ENST00000243457 +ENST00000243501 +ENST00000243563 +ENST00000243578 +ENST00000243644 +ENST00000243662 +ENST00000243706 +ENST00000243776 +ENST00000243878 +ENST00000243903 +ENST00000243918 +ENST00000243997 +ENST00000244020 +ENST00000244040 +ENST00000244043 +ENST00000244050 +ENST00000244051 +ENST00000244061 +ENST00000244137 +ENST00000244230 +ENST00000244289 +ENST00000244333 +ENST00000244364 +ENST00000244426 +ENST00000244496 +ENST00000244519 +ENST00000244520 +ENST00000244571 +ENST00000244576 +ENST00000244711 +ENST00000244745 +ENST00000244763 +ENST00000244766 +ENST00000244769 +ENST00000245046 +ENST00000245105 +ENST00000245121 +ENST00000245157 +ENST00000245206 +ENST00000245304 +ENST00000245323 +ENST00000245407 +ENST00000245414 +ENST00000245451 +ENST00000245479 +ENST00000245539 +ENST00000245543 +ENST00000245544 +ENST00000245552 +ENST00000245564 +ENST00000245615 +ENST00000245680 +ENST00000245787 +ENST00000245796 +ENST00000245812 +ENST00000245816 +ENST00000245838 +ENST00000245907 +ENST00000245932 +ENST00000245934 +ENST00000245960 +ENST00000246024 +ENST00000246069 +ENST00000246070 +ENST00000246071 +ENST00000246115 +ENST00000246117 +ENST00000246151 +ENST00000246166 +ENST00000246190 +ENST00000246194 +ENST00000246229 +ENST00000246337 +ENST00000246421 +ENST00000246535 +ENST00000246548 +ENST00000246551 +ENST00000246554 +ENST00000246635 +ENST00000246657 +ENST00000246672 +ENST00000246747 +ENST00000246792 +ENST00000246794 +ENST00000246802 +ENST00000246868 +ENST00000246912 +ENST00000246914 +ENST00000246949 +ENST00000246957 +ENST00000247001 +ENST00000247003 +ENST00000247020 +ENST00000247026 +ENST00000247138 +ENST00000247161 +ENST00000247178 +ENST00000247191 +ENST00000247194 +ENST00000247207 +ENST00000247225 +ENST00000247226 +ENST00000247461 +ENST00000247470 +ENST00000247665 +ENST00000247668 +ENST00000247706 +ENST00000247815 +ENST00000247843 +ENST00000247930 +ENST00000247956 +ENST00000247970 +ENST00000247977 +ENST00000248071 +ENST00000248076 +ENST00000248089 +ENST00000248098 +ENST00000248114 +ENST00000248211 +ENST00000248244 +ENST00000248248 +ENST00000248342 +ENST00000248437 +ENST00000248444 +ENST00000248450 +ENST00000248553 +ENST00000248566 +ENST00000248594 +ENST00000248598 +ENST00000248600 +ENST00000248633 +ENST00000248706 +ENST00000248846 +ENST00000248879 +ENST00000248901 +ENST00000248929 +ENST00000248948 +ENST00000248958 +ENST00000248975 +ENST00000249014 +ENST00000249064 +ENST00000249071 +ENST00000249269 +ENST00000249299 +ENST00000249344 +ENST00000249356 +ENST00000249396 +ENST00000249442 +ENST00000249499 +ENST00000249501 +ENST00000249636 +ENST00000249647 +ENST00000249700 +ENST00000249806 +ENST00000249842 +ENST00000249861 +ENST00000249883 +ENST00000249923 +ENST00000250092 +ENST00000250101 +ENST00000250111 +ENST00000250113 +ENST00000250124 +ENST00000250237 +ENST00000250244 +ENST00000250340 +ENST00000250378 +ENST00000250405 +ENST00000250416 +ENST00000250454 +ENST00000250457 +ENST00000250495 +ENST00000250498 +ENST00000250617 +ENST00000250784 +ENST00000250894 +ENST00000250916 +ENST00000250974 +ENST00000251020 +ENST00000251038 +ENST00000251047 +ENST00000251089 +ENST00000251241 +ENST00000251250 +ENST00000251296 +ENST00000251303 +ENST00000251343 +ENST00000251363 +ENST00000251412 +ENST00000251413 +ENST00000251453 +ENST00000251496 +ENST00000251507 +ENST00000251527 +ENST00000251535 +ENST00000251566 +ENST00000251582 +ENST00000251588 +ENST00000251595 +ENST00000251607 +ENST00000251636 +ENST00000251642 +ENST00000251691 +ENST00000251775 +ENST00000251808 +ENST00000251810 +ENST00000251849 +ENST00000251900 +ENST00000251968 +ENST00000251993 +ENST00000252011 +ENST00000252015 +ENST00000252032 +ENST00000252034 +ENST00000252050 +ENST00000252085 +ENST00000252102 +ENST00000252115 +ENST00000252136 +ENST00000252242 +ENST00000252321 +ENST00000252445 +ENST00000252456 +ENST00000252483 +ENST00000252486 +ENST00000252512 +ENST00000252542 +ENST00000252590 +ENST00000252593 +ENST00000252595 +ENST00000252597 +ENST00000252599 +ENST00000252602 +ENST00000252603 +ENST00000252622 +ENST00000252655 +ENST00000252674 +ENST00000252699 +ENST00000252711 +ENST00000252744 +ENST00000252797 +ENST00000252804 +ENST00000252809 +ENST00000252818 +ENST00000252854 +ENST00000252891 +ENST00000252934 +ENST00000252992 +ENST00000252996 +ENST00000252997 +ENST00000252999 +ENST00000253003 +ENST00000253023 +ENST00000253024 +ENST00000253039 +ENST00000253047 +ENST00000253048 +ENST00000253063 +ENST00000253083 +ENST00000253099 +ENST00000253108 +ENST00000253110 +ENST00000253122 +ENST00000253144 +ENST00000253159 +ENST00000253233 +ENST00000253237 +ENST00000253247 +ENST00000253270 +ENST00000253329 +ENST00000253363 +ENST00000253382 +ENST00000253401 +ENST00000253413 +ENST00000253457 +ENST00000253458 +ENST00000253462 +ENST00000253577 +ENST00000253669 +ENST00000253686 +ENST00000253693 +ENST00000253699 +ENST00000253719 +ENST00000253727 +ENST00000253754 +ENST00000253778 +ENST00000253794 +ENST00000253796 +ENST00000253814 +ENST00000253861 +ENST00000253925 +ENST00000254029 +ENST00000254037 +ENST00000254051 +ENST00000254066 +ENST00000254090 +ENST00000254101 +ENST00000254108 +ENST00000254166 +ENST00000254190 +ENST00000254193 +ENST00000254250 +ENST00000254260 +ENST00000254286 +ENST00000254301 +ENST00000254321 +ENST00000254322 +ENST00000254323 +ENST00000254325 +ENST00000254337 +ENST00000254436 +ENST00000254480 +ENST00000254508 +ENST00000254521 +ENST00000254528 +ENST00000254605 +ENST00000254616 +ENST00000254624 +ENST00000254630 +ENST00000254654 +ENST00000254657 +ENST00000254663 +ENST00000254667 +ENST00000254691 +ENST00000254695 +ENST00000254719 +ENST00000254722 +ENST00000254730 +ENST00000254742 +ENST00000254759 +ENST00000254770 +ENST00000254799 +ENST00000254801 +ENST00000254803 +ENST00000254810 +ENST00000254816 +ENST00000254846 +ENST00000254868 +ENST00000254878 +ENST00000254928 +ENST00000254940 +ENST00000254950 +ENST00000254963 +ENST00000254998 +ENST00000255006 +ENST00000255078 +ENST00000255082 +ENST00000255108 +ENST00000255152 +ENST00000255192 +ENST00000255194 +ENST00000255304 +ENST00000255305 +ENST00000255380 +ENST00000255389 +ENST00000255390 +ENST00000255409 +ENST00000255476 +ENST00000255608 +ENST00000255613 +ENST00000255631 +ENST00000255641 +ENST00000255681 +ENST00000255688 +ENST00000255695 +ENST00000255759 +ENST00000255764 +ENST00000255784 +ENST00000255882 +ENST00000255945 +ENST00000255977 +ENST00000256001 +ENST00000256015 +ENST00000256078 +ENST00000256079 +ENST00000256104 +ENST00000256151 +ENST00000256186 +ENST00000256190 +ENST00000256196 +ENST00000256255 +ENST00000256319 +ENST00000256366 +ENST00000256367 +ENST00000256379 +ENST00000256383 +ENST00000256398 +ENST00000256412 +ENST00000256429 +ENST00000256433 +ENST00000256441 +ENST00000256442 +ENST00000256447 +ENST00000256458 +ENST00000256460 +ENST00000256474 +ENST00000256495 +ENST00000256497 +ENST00000256538 +ENST00000256544 +ENST00000256545 +ENST00000256578 +ENST00000256593 +ENST00000256637 +ENST00000256644 +ENST00000256646 +ENST00000256652 +ENST00000256682 +ENST00000256689 +ENST00000256707 +ENST00000256722 +ENST00000256854 +ENST00000256897 +ENST00000256925 +ENST00000256935 +ENST00000256951 +ENST00000256996 +ENST00000256997 +ENST00000256999 +ENST00000257013 +ENST00000257017 +ENST00000257177 +ENST00000257181 +ENST00000257209 +ENST00000257245 +ENST00000257247 +ENST00000257287 +ENST00000257290 +ENST00000257347 +ENST00000257527 +ENST00000257548 +ENST00000257549 +ENST00000257552 +ENST00000257566 +ENST00000257570 +ENST00000257600 +ENST00000257626 +ENST00000257663 +ENST00000257696 +ENST00000257700 +ENST00000257724 +ENST00000257770 +ENST00000257787 +ENST00000257789 +ENST00000257829 +ENST00000257836 +ENST00000257868 +ENST00000257904 +ENST00000257909 +ENST00000257910 +ENST00000257915 +ENST00000257934 +ENST00000257940 +ENST00000258014 +ENST00000258052 +ENST00000258062 +ENST00000258083 +ENST00000258091 +ENST00000258098 +ENST00000258145 +ENST00000258169 +ENST00000258198 +ENST00000258200 +ENST00000258201 +ENST00000258214 +ENST00000258229 +ENST00000258243 +ENST00000258281 +ENST00000258301 +ENST00000258341 +ENST00000258381 +ENST00000258383 +ENST00000258390 +ENST00000258399 +ENST00000258411 +ENST00000258415 +ENST00000258416 +ENST00000258418 +ENST00000258424 +ENST00000258428 +ENST00000258436 +ENST00000258439 +ENST00000258455 +ENST00000258457 +ENST00000258484 +ENST00000258494 +ENST00000258526 +ENST00000258534 +ENST00000258538 +ENST00000258613 +ENST00000258648 +ENST00000258662 +ENST00000258739 +ENST00000258742 +ENST00000258770 +ENST00000258772 +ENST00000258774 +ENST00000258787 +ENST00000258796 +ENST00000258821 +ENST00000258874 +ENST00000258884 +ENST00000258886 +ENST00000258955 +ENST00000258962 +ENST00000258975 +ENST00000258991 +ENST00000259006 +ENST00000259008 +ENST00000259021 +ENST00000259030 +ENST00000259037 +ENST00000259050 +ENST00000259056 +ENST00000259154 +ENST00000259199 +ENST00000259206 +ENST00000259229 +ENST00000259239 +ENST00000259241 +ENST00000259253 +ENST00000259254 +ENST00000259339 +ENST00000259351 +ENST00000259365 +ENST00000259392 +ENST00000259457 +ENST00000259467 +ENST00000259470 +ENST00000259486 +ENST00000259512 +ENST00000259569 +ENST00000259605 +ENST00000259608 +ENST00000259632 +ENST00000259667 +ENST00000259711 +ENST00000259727 +ENST00000259746 +ENST00000259808 +ENST00000259818 +ENST00000259873 +ENST00000259895 +ENST00000259939 +ENST00000259963 +ENST00000260010 +ENST00000260045 +ENST00000260102 +ENST00000260118 +ENST00000260128 +ENST00000260129 +ENST00000260130 +ENST00000260184 +ENST00000260187 +ENST00000260197 +ENST00000260210 +ENST00000260227 +ENST00000260247 +ENST00000260257 +ENST00000260270 +ENST00000260276 +ENST00000260327 +ENST00000260356 +ENST00000260361 +ENST00000260363 +ENST00000260372 +ENST00000260379 +ENST00000260402 +ENST00000260403 +ENST00000260408 +ENST00000260443 +ENST00000260447 +ENST00000260453 +ENST00000260505 +ENST00000260508 +ENST00000260526 +ENST00000260563 +ENST00000260570 +ENST00000260585 +ENST00000260600 +ENST00000260605 +ENST00000260643 +ENST00000260649 +ENST00000260665 +ENST00000260702 +ENST00000260731 +ENST00000260743 +ENST00000260746 +ENST00000260753 +ENST00000260762 +ENST00000260803 +ENST00000260810 +ENST00000260818 +ENST00000260947 +ENST00000260952 +ENST00000260953 +ENST00000260970 +ENST00000260983 +ENST00000261015 +ENST00000261017 +ENST00000261023 +ENST00000261024 +ENST00000261070 +ENST00000261167 +ENST00000261168 +ENST00000261177 +ENST00000261182 +ENST00000261183 +ENST00000261187 +ENST00000261191 +ENST00000261200 +ENST00000261205 +ENST00000261211 +ENST00000261226 +ENST00000261233 +ENST00000261234 +ENST00000261245 +ENST00000261247 +ENST00000261249 +ENST00000261250 +ENST00000261254 +ENST00000261263 +ENST00000261267 +ENST00000261296 +ENST00000261304 +ENST00000261308 +ENST00000261313 +ENST00000261326 +ENST00000261332 +ENST00000261349 +ENST00000261366 +ENST00000261368 +ENST00000261369 +ENST00000261377 +ENST00000261381 +ENST00000261396 +ENST00000261401 +ENST00000261402 +ENST00000261405 +ENST00000261407 +ENST00000261413 +ENST00000261416 +ENST00000261427 +ENST00000261435 +ENST00000261438 +ENST00000261439 +ENST00000261441 +ENST00000261461 +ENST00000261464 +ENST00000261475 +ENST00000261479 +ENST00000261483 +ENST00000261486 +ENST00000261488 +ENST00000261497 +ENST00000261499 +ENST00000261503 +ENST00000261507 +ENST00000261520 +ENST00000261530 +ENST00000261531 +ENST00000261534 +ENST00000261537 +ENST00000261556 +ENST00000261558 +ENST00000261560 +ENST00000261574 +ENST00000261584 +ENST00000261588 +ENST00000261590 +ENST00000261593 +ENST00000261596 +ENST00000261597 +ENST00000261600 +ENST00000261601 +ENST00000261609 +ENST00000261622 +ENST00000261623 +ENST00000261636 +ENST00000261637 +ENST00000261643 +ENST00000261647 +ENST00000261652 +ENST00000261655 +ENST00000261658 +ENST00000261667 +ENST00000261681 +ENST00000261693 +ENST00000261700 +ENST00000261708 +ENST00000261712 +ENST00000261714 +ENST00000261716 +ENST00000261721 +ENST00000261733 +ENST00000261735 +ENST00000261739 +ENST00000261745 +ENST00000261749 +ENST00000261769 +ENST00000261772 +ENST00000261776 +ENST00000261778 +ENST00000261789 +ENST00000261797 +ENST00000261799 +ENST00000261811 +ENST00000261813 +ENST00000261819 +ENST00000261839 +ENST00000261842 +ENST00000261844 +ENST00000261845 +ENST00000261866 +ENST00000261868 +ENST00000261875 +ENST00000261879 +ENST00000261880 +ENST00000261881 +ENST00000261883 +ENST00000261884 +ENST00000261888 +ENST00000261890 +ENST00000261891 +ENST00000261892 +ENST00000261893 +ENST00000261900 +ENST00000261937 +ENST00000261942 +ENST00000261965 +ENST00000261973 +ENST00000261978 +ENST00000262013 +ENST00000262027 +ENST00000262030 +ENST00000262031 +ENST00000262033 +ENST00000262039 +ENST00000262041 +ENST00000262043 +ENST00000262053 +ENST00000262056 +ENST00000262061 +ENST00000262065 +ENST00000262067 +ENST00000262077 +ENST00000262094 +ENST00000262101 +ENST00000262102 +ENST00000262109 +ENST00000262120 +ENST00000262126 +ENST00000262127 +ENST00000262133 +ENST00000262134 +ENST00000262139 +ENST00000262144 +ENST00000262146 +ENST00000262150 +ENST00000262158 +ENST00000262177 +ENST00000262178 +ENST00000262187 +ENST00000262188 +ENST00000262189 +ENST00000262193 +ENST00000262198 +ENST00000262210 +ENST00000262213 +ENST00000262215 +ENST00000262225 +ENST00000262238 +ENST00000262241 +ENST00000262244 +ENST00000262259 +ENST00000262262 +ENST00000262265 +ENST00000262288 +ENST00000262291 +ENST00000262293 +ENST00000262294 +ENST00000262301 +ENST00000262302 +ENST00000262304 +ENST00000262306 +ENST00000262316 +ENST00000262319 +ENST00000262320 +ENST00000262352 +ENST00000262367 +ENST00000262370 +ENST00000262374 +ENST00000262375 +ENST00000262384 +ENST00000262394 +ENST00000262395 +ENST00000262406 +ENST00000262415 +ENST00000262426 +ENST00000262430 +ENST00000262432 +ENST00000262435 +ENST00000262455 +ENST00000262457 +ENST00000262460 +ENST00000262461 +ENST00000262467 +ENST00000262482 +ENST00000262483 +ENST00000262494 +ENST00000262498 +ENST00000262506 +ENST00000262507 +ENST00000262510 +ENST00000262518 +ENST00000262519 +ENST00000262525 +ENST00000262551 +ENST00000262554 +ENST00000262570 +ENST00000262577 +ENST00000262584 +ENST00000262613 +ENST00000262626 +ENST00000262629 +ENST00000262633 +ENST00000262640 +ENST00000262644 +ENST00000262646 +ENST00000262648 +ENST00000262650 +ENST00000262713 +ENST00000262715 +ENST00000262719 +ENST00000262738 +ENST00000262741 +ENST00000262746 +ENST00000262752 +ENST00000262753 +ENST00000262764 +ENST00000262768 +ENST00000262776 +ENST00000262803 +ENST00000262809 +ENST00000262811 +ENST00000262812 +ENST00000262844 +ENST00000262848 +ENST00000262850 +ENST00000262866 +ENST00000262878 +ENST00000262887 +ENST00000262888 +ENST00000262891 +ENST00000262894 +ENST00000262903 +ENST00000262919 +ENST00000262932 +ENST00000262940 +ENST00000262942 +ENST00000262947 +ENST00000262948 +ENST00000262953 +ENST00000262958 +ENST00000262960 +ENST00000262962 +ENST00000262965 +ENST00000262971 +ENST00000262982 +ENST00000262990 +ENST00000262995 +ENST00000263025 +ENST00000263026 +ENST00000263035 +ENST00000263038 +ENST00000263062 +ENST00000263063 +ENST00000263071 +ENST00000263073 +ENST00000263080 +ENST00000263083 +ENST00000263088 +ENST00000263092 +ENST00000263095 +ENST00000263097 +ENST00000263102 +ENST00000263116 +ENST00000263121 +ENST00000263125 +ENST00000263168 +ENST00000263174 +ENST00000263181 +ENST00000263196 +ENST00000263202 +ENST00000263205 +ENST00000263208 +ENST00000263212 +ENST00000263228 +ENST00000263238 +ENST00000263239 +ENST00000263245 +ENST00000263246 +ENST00000263253 +ENST00000263256 +ENST00000263265 +ENST00000263266 +ENST00000263270 +ENST00000263274 +ENST00000263277 +ENST00000263278 +ENST00000263341 +ENST00000263346 +ENST00000263354 +ENST00000263360 +ENST00000263368 +ENST00000263370 +ENST00000263372 +ENST00000263377 +ENST00000263379 +ENST00000263382 +ENST00000263383 +ENST00000263384 +ENST00000263388 +ENST00000263390 +ENST00000263401 +ENST00000263409 +ENST00000263433 +ENST00000263461 +ENST00000263464 +ENST00000263512 +ENST00000263563 +ENST00000263574 +ENST00000263578 +ENST00000263579 +ENST00000263593 +ENST00000263620 +ENST00000263635 +ENST00000263642 +ENST00000263645 +ENST00000263650 +ENST00000263657 +ENST00000263663 +ENST00000263665 +ENST00000263666 +ENST00000263672 +ENST00000263674 +ENST00000263681 +ENST00000263686 +ENST00000263688 +ENST00000263694 +ENST00000263697 +ENST00000263702 +ENST00000263707 +ENST00000263708 +ENST00000263710 +ENST00000263713 +ENST00000263733 +ENST00000263734 +ENST00000263735 +ENST00000263736 +ENST00000263754 +ENST00000263773 +ENST00000263774 +ENST00000263776 +ENST00000263780 +ENST00000263791 +ENST00000263795 +ENST00000263798 +ENST00000263805 +ENST00000263847 +ENST00000263849 +ENST00000263857 +ENST00000263864 +ENST00000263867 +ENST00000263881 +ENST00000263897 +ENST00000263904 +ENST00000263918 +ENST00000263921 +ENST00000263923 +ENST00000263925 +ENST00000263955 +ENST00000263956 +ENST00000263960 +ENST00000263966 +ENST00000263967 +ENST00000263974 +ENST00000263980 +ENST00000263985 +ENST00000263991 +ENST00000263997 +ENST00000264001 +ENST00000264010 +ENST00000264020 +ENST00000264025 +ENST00000264027 +ENST00000264028 +ENST00000264033 +ENST00000264036 +ENST00000264039 +ENST00000264042 +ENST00000264057 +ENST00000264059 +ENST00000264065 +ENST00000264071 +ENST00000264079 +ENST00000264080 +ENST00000264093 +ENST00000264108 +ENST00000264110 +ENST00000264122 +ENST00000264144 +ENST00000264151 +ENST00000264156 +ENST00000264157 +ENST00000264159 +ENST00000264160 +ENST00000264161 +ENST00000264167 +ENST00000264187 +ENST00000264192 +ENST00000264193 +ENST00000264198 +ENST00000264220 +ENST00000264228 +ENST00000264230 +ENST00000264245 +ENST00000264249 +ENST00000264254 +ENST00000264255 +ENST00000264260 +ENST00000264276 +ENST00000264279 +ENST00000264313 +ENST00000264316 +ENST00000264335 +ENST00000264344 +ENST00000264346 +ENST00000264350 +ENST00000264377 +ENST00000264380 +ENST00000264381 +ENST00000264389 +ENST00000264400 +ENST00000264414 +ENST00000264424 +ENST00000264428 +ENST00000264431 +ENST00000264433 +ENST00000264434 +ENST00000264444 +ENST00000264451 +ENST00000264454 +ENST00000264498 +ENST00000264499 +ENST00000264501 +ENST00000264515 +ENST00000264538 +ENST00000264552 +ENST00000264553 +ENST00000264554 +ENST00000264601 +ENST00000264605 +ENST00000264607 +ENST00000264613 +ENST00000264638 +ENST00000264639 +ENST00000264645 +ENST00000264649 +ENST00000264657 +ENST00000264658 +ENST00000264663 +ENST00000264669 +ENST00000264670 +ENST00000264689 +ENST00000264705 +ENST00000264709 +ENST00000264710 +ENST00000264712 +ENST00000264716 +ENST00000264718 +ENST00000264741 +ENST00000264758 +ENST00000264775 +ENST00000264779 +ENST00000264784 +ENST00000264808 +ENST00000264819 +ENST00000264824 +ENST00000264832 +ENST00000264833 +ENST00000264852 +ENST00000264864 +ENST00000264866 +ENST00000264867 +ENST00000264870 +ENST00000264883 +ENST00000264893 +ENST00000264896 +ENST00000264914 +ENST00000264917 +ENST00000264926 +ENST00000264930 +ENST00000264932 +ENST00000264933 +ENST00000264935 +ENST00000264951 +ENST00000264954 +ENST00000264972 +ENST00000264977 +ENST00000264982 +ENST00000264990 +ENST00000264992 +ENST00000264993 +ENST00000264995 +ENST00000265000 +ENST00000265022 +ENST00000265036 +ENST00000265044 +ENST00000265052 +ENST00000265056 +ENST00000265062 +ENST00000265069 +ENST00000265070 +ENST00000265073 +ENST00000265080 +ENST00000265081 +ENST00000265085 +ENST00000265087 +ENST00000265094 +ENST00000265097 +ENST00000265107 +ENST00000265113 +ENST00000265136 +ENST00000265138 +ENST00000265140 +ENST00000265164 +ENST00000265165 +ENST00000265174 +ENST00000265175 +ENST00000265239 +ENST00000265245 +ENST00000265260 +ENST00000265271 +ENST00000265295 +ENST00000265299 +ENST00000265316 +ENST00000265322 +ENST00000265333 +ENST00000265339 +ENST00000265340 +ENST00000265343 +ENST00000265350 +ENST00000265351 +ENST00000265354 +ENST00000265362 +ENST00000265381 +ENST00000265382 +ENST00000265388 +ENST00000265395 +ENST00000265404 +ENST00000265421 +ENST00000265433 +ENST00000265437 +ENST00000265440 +ENST00000265462 +ENST00000265465 +ENST00000265471 +ENST00000265498 +ENST00000265560 +ENST00000265562 +ENST00000265563 +ENST00000265564 +ENST00000265565 +ENST00000265593 +ENST00000265594 +ENST00000265598 +ENST00000265634 +ENST00000265641 +ENST00000265651 +ENST00000265686 +ENST00000265689 +ENST00000265717 +ENST00000265720 +ENST00000265729 +ENST00000265732 +ENST00000265734 +ENST00000265742 +ENST00000265748 +ENST00000265753 +ENST00000265769 +ENST00000265806 +ENST00000265807 +ENST00000265838 +ENST00000265843 +ENST00000265849 +ENST00000265857 +ENST00000265866 +ENST00000265872 +ENST00000265881 +ENST00000265896 +ENST00000265909 +ENST00000265960 +ENST00000265963 +ENST00000265965 +ENST00000265970 +ENST00000265978 +ENST00000265981 +ENST00000265986 +ENST00000265990 +ENST00000266022 +ENST00000266031 +ENST00000266041 +ENST00000266069 +ENST00000266070 +ENST00000266077 +ENST00000266079 +ENST00000266085 +ENST00000266087 +ENST00000266126 +ENST00000266254 +ENST00000266263 +ENST00000266269 +ENST00000266304 +ENST00000266397 +ENST00000266458 +ENST00000266483 +ENST00000266517 +ENST00000266529 +ENST00000266544 +ENST00000266546 +ENST00000266556 +ENST00000266557 +ENST00000266581 +ENST00000266604 +ENST00000266643 +ENST00000266659 +ENST00000266673 +ENST00000266712 +ENST00000266718 +ENST00000266732 +ENST00000266735 +ENST00000266771 +ENST00000266970 +ENST00000266987 +ENST00000267064 +ENST00000267082 +ENST00000267085 +ENST00000267101 +ENST00000267103 +ENST00000267116 +ENST00000267163 +ENST00000267199 +ENST00000267202 +ENST00000267205 +ENST00000267229 +ENST00000267257 +ENST00000267328 +ENST00000267339 +ENST00000267415 +ENST00000267425 +ENST00000267436 +ENST00000267460 +ENST00000267549 +ENST00000267569 +ENST00000267584 +ENST00000267622 +ENST00000267750 +ENST00000267807 +ENST00000267812 +ENST00000267814 +ENST00000267838 +ENST00000267842 +ENST00000267859 +ENST00000267884 +ENST00000267890 +ENST00000267935 +ENST00000267938 +ENST00000267953 +ENST00000267970 +ENST00000267973 +ENST00000268035 +ENST00000268042 +ENST00000268057 +ENST00000268058 +ENST00000268097 +ENST00000268099 +ENST00000268124 +ENST00000268150 +ENST00000268154 +ENST00000268171 +ENST00000268182 +ENST00000268184 +ENST00000268206 +ENST00000268220 +ENST00000268261 +ENST00000268296 +ENST00000268379 +ENST00000268383 +ENST00000268389 +ENST00000268459 +ENST00000268482 +ENST00000268483 +ENST00000268489 +ENST00000268533 +ENST00000268603 +ENST00000268607 +ENST00000268613 +ENST00000268616 +ENST00000268638 +ENST00000268655 +ENST00000268668 +ENST00000268676 +ENST00000268695 +ENST00000268699 +ENST00000268704 +ENST00000268711 +ENST00000268712 +ENST00000268717 +ENST00000268719 +ENST00000268766 +ENST00000268797 +ENST00000268802 +ENST00000268835 +ENST00000268989 +ENST00000269033 +ENST00000269080 +ENST00000269097 +ENST00000269122 +ENST00000269141 +ENST00000269143 +ENST00000269159 +ENST00000269187 +ENST00000269195 +ENST00000269209 +ENST00000269214 +ENST00000269216 +ENST00000269221 +ENST00000269228 +ENST00000269298 +ENST00000269305 +ENST00000269321 +ENST00000269346 +ENST00000269349 +ENST00000269373 +ENST00000269383 +ENST00000269385 +ENST00000269389 +ENST00000269391 +ENST00000269397 +ENST00000269445 +ENST00000269466 +ENST00000269571 +ENST00000269576 +ENST00000269593 +ENST00000269601 +ENST00000269701 +ENST00000269740 +ENST00000269856 +ENST00000269886 +ENST00000269919 +ENST00000269967 +ENST00000269973 +ENST00000269980 +ENST00000270001 +ENST00000270061 +ENST00000270066 +ENST00000270112 +ENST00000270139 +ENST00000270142 +ENST00000270176 +ENST00000270221 +ENST00000270223 +ENST00000270225 +ENST00000270233 +ENST00000270257 +ENST00000270357 +ENST00000270502 +ENST00000270517 +ENST00000270538 +ENST00000270570 +ENST00000270583 +ENST00000270586 +ENST00000270625 +ENST00000270645 +ENST00000270649 +ENST00000270708 +ENST00000270747 +ENST00000270776 +ENST00000270792 +ENST00000270815 +ENST00000270824 +ENST00000270861 +ENST00000271064 +ENST00000271227 +ENST00000271277 +ENST00000271308 +ENST00000271324 +ENST00000271332 +ENST00000271375 +ENST00000271450 +ENST00000271452 +ENST00000271526 +ENST00000271588 +ENST00000271620 +ENST00000271628 +ENST00000271636 +ENST00000271638 +ENST00000271640 +ENST00000271651 +ENST00000271715 +ENST00000271732 +ENST00000271764 +ENST00000271843 +ENST00000271915 +ENST00000272067 +ENST00000272091 +ENST00000272139 +ENST00000272203 +ENST00000272217 +ENST00000272224 +ENST00000272227 +ENST00000272233 +ENST00000272298 +ENST00000272317 +ENST00000272322 +ENST00000272342 +ENST00000272348 +ENST00000272418 +ENST00000272424 +ENST00000272427 +ENST00000272430 +ENST00000272433 +ENST00000272438 +ENST00000272444 +ENST00000272452 +ENST00000272462 +ENST00000272519 +ENST00000272542 +ENST00000272638 +ENST00000272645 +ENST00000272647 +ENST00000272748 +ENST00000272902 +ENST00000272928 +ENST00000272930 +ENST00000272937 +ENST00000273037 +ENST00000273038 +ENST00000273047 +ENST00000273062 +ENST00000273064 +ENST00000273075 +ENST00000273077 +ENST00000273130 +ENST00000273153 +ENST00000273158 +ENST00000273179 +ENST00000273221 +ENST00000273258 +ENST00000273261 +ENST00000273317 +ENST00000273359 +ENST00000273371 +ENST00000273375 +ENST00000273398 +ENST00000273450 +ENST00000273480 +ENST00000273550 +ENST00000273590 +ENST00000273596 +ENST00000273598 +ENST00000273668 +ENST00000273783 +ENST00000273814 +ENST00000273853 +ENST00000273859 +ENST00000273920 +ENST00000273963 +ENST00000273968 +ENST00000273986 +ENST00000274000 +ENST00000274008 +ENST00000274026 +ENST00000274031 +ENST00000274054 +ENST00000274063 +ENST00000274065 +ENST00000274137 +ENST00000274140 +ENST00000274217 +ENST00000274242 +ENST00000274255 +ENST00000274276 +ENST00000274289 +ENST00000274306 +ENST00000274311 +ENST00000274364 +ENST00000274376 +ENST00000274457 +ENST00000274458 +ENST00000274496 +ENST00000274532 +ENST00000274569 +ENST00000274605 +ENST00000274606 +ENST00000274629 +ENST00000274695 +ENST00000274712 +ENST00000274787 +ENST00000274793 +ENST00000274811 +ENST00000274813 +ENST00000274849 +ENST00000274853 +ENST00000274963 +ENST00000275034 +ENST00000275053 +ENST00000275072 +ENST00000275227 +ENST00000275230 +ENST00000275300 +ENST00000275364 +ENST00000275428 +ENST00000275493 +ENST00000275517 +ENST00000275603 +ENST00000275732 +ENST00000275766 +ENST00000275767 +ENST00000275820 +ENST00000275884 +ENST00000275954 +ENST00000276052 +ENST00000276055 +ENST00000276062 +ENST00000276072 +ENST00000276077 +ENST00000276079 +ENST00000276201 +ENST00000276202 +ENST00000276282 +ENST00000276297 +ENST00000276326 +ENST00000276390 +ENST00000276416 +ENST00000276420 +ENST00000276431 +ENST00000276440 +ENST00000276461 +ENST00000276533 +ENST00000276569 +ENST00000276585 +ENST00000276590 +ENST00000276603 +ENST00000276654 +ENST00000276689 +ENST00000276692 +ENST00000276704 +ENST00000276893 +ENST00000276914 +ENST00000276925 +ENST00000277010 +ENST00000277165 +ENST00000277225 +ENST00000277458 +ENST00000277540 +ENST00000277541 +ENST00000277570 +ENST00000277575 +ENST00000277746 +ENST00000277865 +ENST00000278070 +ENST00000278071 +ENST00000278174 +ENST00000278193 +ENST00000278314 +ENST00000278353 +ENST00000278407 +ENST00000278412 +ENST00000278422 +ENST00000278426 +ENST00000278483 +ENST00000278505 +ENST00000278520 +ENST00000278550 +ENST00000278559 +ENST00000278572 +ENST00000278590 +ENST00000278601 +ENST00000278612 +ENST00000278616 +ENST00000278618 +ENST00000278671 +ENST00000278715 +ENST00000278742 +ENST00000278772 +ENST00000278823 +ENST00000278826 +ENST00000278829 +ENST00000278836 +ENST00000278840 +ENST00000278886 +ENST00000278903 +ENST00000278919 +ENST00000278927 +ENST00000278935 +ENST00000278949 +ENST00000278980 +ENST00000279022 +ENST00000279036 +ENST00000279068 +ENST00000279101 +ENST00000279146 +ENST00000279206 +ENST00000279242 +ENST00000279263 +ENST00000279281 +ENST00000279387 +ENST00000279392 +ENST00000279488 +ENST00000279839 +ENST00000279873 +ENST00000279907 +ENST00000280020 +ENST00000280098 +ENST00000280154 +ENST00000280187 +ENST00000280258 +ENST00000280326 +ENST00000280333 +ENST00000280346 +ENST00000280357 +ENST00000280362 +ENST00000280377 +ENST00000280481 +ENST00000280527 +ENST00000280551 +ENST00000280557 +ENST00000280571 +ENST00000280612 +ENST00000280614 +ENST00000280665 +ENST00000280700 +ENST00000280734 +ENST00000280800 +ENST00000280871 +ENST00000280886 +ENST00000280904 +ENST00000280979 +ENST00000280987 +ENST00000281017 +ENST00000281031 +ENST00000281038 +ENST00000281092 +ENST00000281141 +ENST00000281142 +ENST00000281172 +ENST00000281182 +ENST00000281187 +ENST00000281243 +ENST00000281282 +ENST00000281317 +ENST00000281382 +ENST00000281419 +ENST00000281437 +ENST00000281441 +ENST00000281453 +ENST00000281456 +ENST00000281474 +ENST00000281513 +ENST00000281543 +ENST00000281623 +ENST00000281631 +ENST00000281708 +ENST00000281741 +ENST00000281772 +ENST00000281821 +ENST00000281828 +ENST00000281834 +ENST00000281871 +ENST00000281924 +ENST00000281928 +ENST00000281950 +ENST00000282003 +ENST00000282007 +ENST00000282018 +ENST00000282026 +ENST00000282030 +ENST00000282032 +ENST00000282041 +ENST00000282050 +ENST00000282058 +ENST00000282074 +ENST00000282077 +ENST00000282096 +ENST00000282111 +ENST00000282185 +ENST00000282251 +ENST00000282272 +ENST00000282276 +ENST00000282292 +ENST00000282296 +ENST00000282308 +ENST00000282344 +ENST00000282356 +ENST00000282388 +ENST00000282397 +ENST00000282406 +ENST00000282412 +ENST00000282441 +ENST00000282466 +ENST00000282486 +ENST00000282516 +ENST00000282561 +ENST00000282570 +ENST00000282588 +ENST00000282633 +ENST00000282728 +ENST00000282841 +ENST00000282869 +ENST00000282892 +ENST00000282903 +ENST00000283006 +ENST00000283027 +ENST00000283033 +ENST00000283109 +ENST00000283122 +ENST00000283131 +ENST00000283148 +ENST00000283179 +ENST00000283195 +ENST00000283206 +ENST00000283249 +ENST00000283285 +ENST00000283290 +ENST00000283351 +ENST00000283415 +ENST00000283474 +ENST00000283629 +ENST00000283632 +ENST00000283646 +ENST00000283875 +ENST00000283882 +ENST00000283928 +ENST00000283943 +ENST00000283946 +ENST00000284000 +ENST00000284031 +ENST00000284049 +ENST00000284061 +ENST00000284073 +ENST00000284116 +ENST00000284154 +ENST00000284202 +ENST00000284268 +ENST00000284273 +ENST00000284274 +ENST00000284292 +ENST00000284311 +ENST00000284320 +ENST00000284322 +ENST00000284425 +ENST00000284440 +ENST00000284476 +ENST00000284503 +ENST00000284509 +ENST00000284551 +ENST00000284637 +ENST00000284669 +ENST00000284690 +ENST00000284719 +ENST00000284727 +ENST00000284818 +ENST00000284856 +ENST00000284881 +ENST00000284957 +ENST00000284984 +ENST00000285021 +ENST00000285039 +ENST00000285046 +ENST00000285071 +ENST00000285083 +ENST00000285093 +ENST00000285208 +ENST00000285238 +ENST00000285243 +ENST00000285279 +ENST00000285298 +ENST00000285379 +ENST00000285381 +ENST00000285393 +ENST00000285398 +ENST00000285407 +ENST00000285419 +ENST00000285420 +ENST00000285518 +ENST00000285599 +ENST00000285667 +ENST00000285679 +ENST00000285697 +ENST00000285735 +ENST00000285737 +ENST00000285814 +ENST00000285871 +ENST00000285873 +ENST00000285930 +ENST00000285947 +ENST00000285968 +ENST00000285979 +ENST00000286070 +ENST00000286091 +ENST00000286175 +ENST00000286186 +ENST00000286201 +ENST00000286298 +ENST00000286301 +ENST00000286307 +ENST00000286317 +ENST00000286364 +ENST00000286371 +ENST00000286398 +ENST00000286428 +ENST00000286523 +ENST00000286544 +ENST00000286548 +ENST00000286621 +ENST00000286639 +ENST00000286648 +ENST00000286692 +ENST00000286713 +ENST00000286733 +ENST00000286758 +ENST00000286760 +ENST00000286788 +ENST00000286827 +ENST00000286835 +ENST00000286918 +ENST00000287008 +ENST00000287025 +ENST00000287078 +ENST00000287097 +ENST00000287156 +ENST00000287169 +ENST00000287202 +ENST00000287218 +ENST00000287239 +ENST00000287295 +ENST00000287322 +ENST00000287380 +ENST00000287387 +ENST00000287394 +ENST00000287437 +ENST00000287461 +ENST00000287482 +ENST00000287598 +ENST00000287600 +ENST00000287652 +ENST00000287675 +ENST00000287706 +ENST00000287727 +ENST00000287820 +ENST00000287859 +ENST00000287878 +ENST00000287934 +ENST00000287936 +ENST00000287957 +ENST00000287996 +ENST00000288014 +ENST00000288022 +ENST00000288025 +ENST00000288050 +ENST00000288071 +ENST00000288078 +ENST00000288087 +ENST00000288111 +ENST00000288135 +ENST00000288167 +ENST00000288207 +ENST00000288228 +ENST00000288235 +ENST00000288266 +ENST00000288368 +ENST00000288466 +ENST00000288502 +ENST00000288532 +ENST00000288602 +ENST00000288607 +ENST00000288670 +ENST00000288774 +ENST00000288828 +ENST00000288840 +ENST00000288937 +ENST00000288943 +ENST00000288985 +ENST00000289013 +ENST00000289081 +ENST00000289104 +ENST00000289119 +ENST00000289166 +ENST00000289228 +ENST00000289316 +ENST00000289359 +ENST00000289361 +ENST00000289371 +ENST00000289382 +ENST00000289473 +ENST00000289528 +ENST00000289575 +ENST00000289707 +ENST00000289805 +ENST00000289921 +ENST00000289968 +ENST00000290039 +ENST00000290079 +ENST00000290130 +ENST00000290155 +ENST00000290158 +ENST00000290200 +ENST00000290216 +ENST00000290219 +ENST00000290231 +ENST00000290246 +ENST00000290291 +ENST00000290299 +ENST00000290349 +ENST00000290378 +ENST00000290524 +ENST00000290541 +ENST00000290551 +ENST00000290573 +ENST00000290607 +ENST00000290649 +ENST00000290650 +ENST00000290663 +ENST00000290765 +ENST00000290810 +ENST00000290866 +ENST00000290902 +ENST00000290913 +ENST00000290921 +ENST00000290949 +ENST00000290974 +ENST00000291009 +ENST00000291182 +ENST00000291232 +ENST00000291294 +ENST00000291295 +ENST00000291386 +ENST00000291416 +ENST00000291442 +ENST00000291458 +ENST00000291539 +ENST00000291547 +ENST00000291552 +ENST00000291565 +ENST00000291568 +ENST00000291574 +ENST00000291576 +ENST00000291634 +ENST00000291700 +ENST00000291842 +ENST00000291900 +ENST00000291906 +ENST00000292035 +ENST00000292090 +ENST00000292114 +ENST00000292140 +ENST00000292147 +ENST00000292169 +ENST00000292180 +ENST00000292211 +ENST00000292246 +ENST00000292330 +ENST00000292363 +ENST00000292401 +ENST00000292408 +ENST00000292431 +ENST00000292432 +ENST00000292450 +ENST00000292475 +ENST00000292524 +ENST00000292530 +ENST00000292538 +ENST00000292562 +ENST00000292566 +ENST00000292579 +ENST00000292586 +ENST00000292614 +ENST00000292616 +ENST00000292778 +ENST00000292782 +ENST00000292807 +ENST00000292823 +ENST00000292879 +ENST00000293217 +ENST00000293230 +ENST00000293261 +ENST00000293288 +ENST00000293328 +ENST00000293350 +ENST00000293362 +ENST00000293373 +ENST00000293379 +ENST00000293471 +ENST00000293662 +ENST00000293725 +ENST00000293760 +ENST00000293771 +ENST00000293777 +ENST00000293805 +ENST00000293831 +ENST00000293860 +ENST00000293872 +ENST00000293883 +ENST00000294008 +ENST00000294016 +ENST00000294053 +ENST00000294064 +ENST00000294066 +ENST00000294129 +ENST00000294168 +ENST00000294179 +ENST00000294244 +ENST00000294258 +ENST00000294304 +ENST00000294309 +ENST00000294353 +ENST00000294383 +ENST00000294409 +ENST00000294435 +ENST00000294507 +ENST00000294543 +ENST00000294618 +ENST00000294728 +ENST00000294740 +ENST00000294742 +ENST00000294753 +ENST00000294785 +ENST00000294794 +ENST00000294811 +ENST00000294952 +ENST00000294973 +ENST00000295006 +ENST00000295025 +ENST00000295030 +ENST00000295049 +ENST00000295050 +ENST00000295055 +ENST00000295065 +ENST00000295083 +ENST00000295087 +ENST00000295095 +ENST00000295119 +ENST00000295124 +ENST00000295148 +ENST00000295171 +ENST00000295190 +ENST00000295208 +ENST00000295228 +ENST00000295240 +ENST00000295256 +ENST00000295304 +ENST00000295317 +ENST00000295321 +ENST00000295324 +ENST00000295417 +ENST00000295448 +ENST00000295461 +ENST00000295470 +ENST00000295488 +ENST00000295491 +ENST00000295550 +ENST00000295588 +ENST00000295628 +ENST00000295640 +ENST00000295666 +ENST00000295682 +ENST00000295683 +ENST00000295685 +ENST00000295688 +ENST00000295702 +ENST00000295704 +ENST00000295709 +ENST00000295731 +ENST00000295746 +ENST00000295756 +ENST00000295757 +ENST00000295759 +ENST00000295767 +ENST00000295770 +ENST00000295777 +ENST00000295797 +ENST00000295802 +ENST00000295822 +ENST00000295830 +ENST00000295834 +ENST00000295872 +ENST00000295878 +ENST00000295887 +ENST00000295888 +ENST00000295899 +ENST00000295901 +ENST00000295902 +ENST00000295926 +ENST00000295930 +ENST00000295951 +ENST00000296003 +ENST00000296015 +ENST00000296043 +ENST00000296046 +ENST00000296051 +ENST00000296088 +ENST00000296102 +ENST00000296121 +ENST00000296127 +ENST00000296135 +ENST00000296137 +ENST00000296140 +ENST00000296149 +ENST00000296161 +ENST00000296181 +ENST00000296215 +ENST00000296220 +ENST00000296233 +ENST00000296252 +ENST00000296255 +ENST00000296257 +ENST00000296277 +ENST00000296292 +ENST00000296318 +ENST00000296328 +ENST00000296350 +ENST00000296370 +ENST00000296411 +ENST00000296412 +ENST00000296417 +ENST00000296424 +ENST00000296435 +ENST00000296444 +ENST00000296456 +ENST00000296464 +ENST00000296468 +ENST00000296473 +ENST00000296474 +ENST00000296484 +ENST00000296490 +ENST00000296503 +ENST00000296504 +ENST00000296509 +ENST00000296511 +ENST00000296518 +ENST00000296522 +ENST00000296533 +ENST00000296543 +ENST00000296564 +ENST00000296575 +ENST00000296577 +ENST00000296582 +ENST00000296585 +ENST00000296595 +ENST00000296597 +ENST00000296603 +ENST00000296632 +ENST00000296658 +ENST00000296666 +ENST00000296674 +ENST00000296679 +ENST00000296684 +ENST00000296702 +ENST00000296721 +ENST00000296736 +ENST00000296741 +ENST00000296754 +ENST00000296755 +ENST00000296785 +ENST00000296786 +ENST00000296792 +ENST00000296795 +ENST00000296805 +ENST00000296824 +ENST00000296861 +ENST00000296930 +ENST00000296953 +ENST00000297029 +ENST00000297056 +ENST00000297063 +ENST00000297071 +ENST00000297107 +ENST00000297109 +ENST00000297135 +ENST00000297145 +ENST00000297151 +ENST00000297156 +ENST00000297157 +ENST00000297185 +ENST00000297205 +ENST00000297239 +ENST00000297258 +ENST00000297265 +ENST00000297268 +ENST00000297273 +ENST00000297283 +ENST00000297290 +ENST00000297293 +ENST00000297323 +ENST00000297338 +ENST00000297347 +ENST00000297350 +ENST00000297423 +ENST00000297431 +ENST00000297439 +ENST00000297440 +ENST00000297477 +ENST00000297494 +ENST00000297508 +ENST00000297532 +ENST00000297534 +ENST00000297540 +ENST00000297565 +ENST00000297578 +ENST00000297591 +ENST00000297596 +ENST00000297613 +ENST00000297625 +ENST00000297632 +ENST00000297668 +ENST00000297679 +ENST00000297689 +ENST00000297785 +ENST00000297792 +ENST00000297814 +ENST00000297848 +ENST00000297873 +ENST00000297990 +ENST00000297991 +ENST00000297994 +ENST00000298048 +ENST00000298068 +ENST00000298097 +ENST00000298119 +ENST00000298125 +ENST00000298130 +ENST00000298139 +ENST00000298198 +ENST00000298223 +ENST00000298229 +ENST00000298248 +ENST00000298281 +ENST00000298282 +ENST00000298288 +ENST00000298289 +ENST00000298292 +ENST00000298295 +ENST00000298299 +ENST00000298307 +ENST00000298310 +ENST00000298316 +ENST00000298317 +ENST00000298492 +ENST00000298510 +ENST00000298532 +ENST00000298552 +ENST00000298556 +ENST00000298569 +ENST00000298585 +ENST00000298694 +ENST00000298717 +ENST00000298743 +ENST00000298746 +ENST00000298767 +ENST00000298784 +ENST00000298815 +ENST00000298832 +ENST00000298852 +ENST00000298875 +ENST00000298892 +ENST00000298910 +ENST00000298912 +ENST00000298966 +ENST00000298999 +ENST00000299001 +ENST00000299045 +ENST00000299084 +ENST00000299138 +ENST00000299157 +ENST00000299163 +ENST00000299166 +ENST00000299192 +ENST00000299213 +ENST00000299237 +ENST00000299238 +ENST00000299259 +ENST00000299299 +ENST00000299300 +ENST00000299314 +ENST00000299335 +ENST00000299381 +ENST00000299402 +ENST00000299413 +ENST00000299424 +ENST00000299427 +ENST00000299441 +ENST00000299492 +ENST00000299505 +ENST00000299518 +ENST00000299529 +ENST00000299543 +ENST00000299563 +ENST00000299575 +ENST00000299601 +ENST00000299608 +ENST00000299626 +ENST00000299633 +ENST00000299638 +ENST00000299687 +ENST00000299705 +ENST00000299736 +ENST00000299759 +ENST00000299767 +ENST00000299821 +ENST00000299824 +ENST00000299853 +ENST00000299886 +ENST00000299977 +ENST00000300006 +ENST00000300026 +ENST00000300030 +ENST00000300035 +ENST00000300055 +ENST00000300060 +ENST00000300061 +ENST00000300069 +ENST00000300086 +ENST00000300087 +ENST00000300093 +ENST00000300101 +ENST00000300107 +ENST00000300128 +ENST00000300131 +ENST00000300134 +ENST00000300145 +ENST00000300146 +ENST00000300151 +ENST00000300176 +ENST00000300181 +ENST00000300184 +ENST00000300213 +ENST00000300231 +ENST00000300249 +ENST00000300255 +ENST00000300283 +ENST00000300289 +ENST00000300291 +ENST00000300403 +ENST00000300408 +ENST00000300413 +ENST00000300441 +ENST00000300452 +ENST00000300456 +ENST00000300527 +ENST00000300574 +ENST00000300584 +ENST00000300589 +ENST00000300605 +ENST00000300619 +ENST00000300648 +ENST00000300651 +ENST00000300658 +ENST00000300688 +ENST00000300692 +ENST00000300714 +ENST00000300737 +ENST00000300738 +ENST00000300747 +ENST00000300784 +ENST00000300811 +ENST00000300850 +ENST00000300870 +ENST00000300896 +ENST00000300935 +ENST00000300952 +ENST00000300976 +ENST00000301011 +ENST00000301012 +ENST00000301015 +ENST00000301019 +ENST00000301021 +ENST00000301030 +ENST00000301050 +ENST00000301057 +ENST00000301067 +ENST00000301071 +ENST00000301072 +ENST00000301159 +ENST00000301178 +ENST00000301180 +ENST00000301215 +ENST00000301244 +ENST00000301246 +ENST00000301280 +ENST00000301281 +ENST00000301286 +ENST00000301305 +ENST00000301310 +ENST00000301318 +ENST00000301329 +ENST00000301332 +ENST00000301335 +ENST00000301364 +ENST00000301391 +ENST00000301399 +ENST00000301420 +ENST00000301454 +ENST00000301455 +ENST00000301457 +ENST00000301458 +ENST00000301463 +ENST00000301464 +ENST00000301488 +ENST00000301522 +ENST00000301547 +ENST00000301587 +ENST00000301607 +ENST00000301634 +ENST00000301665 +ENST00000301671 +ENST00000301727 +ENST00000301729 +ENST00000301732 +ENST00000301738 +ENST00000301740 +ENST00000301744 +ENST00000301761 +ENST00000301764 +ENST00000301765 +ENST00000301785 +ENST00000301788 +ENST00000301821 +ENST00000301831 +ENST00000301838 +ENST00000301873 +ENST00000301904 +ENST00000301905 +ENST00000301919 +ENST00000301964 +ENST00000301981 +ENST00000301998 +ENST00000302014 +ENST00000302017 +ENST00000302035 +ENST00000302036 +ENST00000302060 +ENST00000302125 +ENST00000302165 +ENST00000302174 +ENST00000302176 +ENST00000302182 +ENST00000302188 +ENST00000302236 +ENST00000302243 +ENST00000302262 +ENST00000302279 +ENST00000302313 +ENST00000302326 +ENST00000302327 +ENST00000302345 +ENST00000302351 +ENST00000302386 +ENST00000302392 +ENST00000302418 +ENST00000302422 +ENST00000302424 +ENST00000302450 +ENST00000302472 +ENST00000302495 +ENST00000302503 +ENST00000302506 +ENST00000302516 +ENST00000302517 +ENST00000302536 +ENST00000302550 +ENST00000302558 +ENST00000302586 +ENST00000302609 +ENST00000302631 +ENST00000302692 +ENST00000302708 +ENST00000302746 +ENST00000302754 +ENST00000302759 +ENST00000302763 +ENST00000302764 +ENST00000302787 +ENST00000302819 +ENST00000302823 +ENST00000302824 +ENST00000302850 +ENST00000302851 +ENST00000302874 +ENST00000302904 +ENST00000302926 +ENST00000302979 +ENST00000303004 +ENST00000303052 +ENST00000303071 +ENST00000303127 +ENST00000303130 +ENST00000303142 +ENST00000303145 +ENST00000303151 +ENST00000303204 +ENST00000303221 +ENST00000303236 +ENST00000303251 +ENST00000303296 +ENST00000303305 +ENST00000303329 +ENST00000303334 +ENST00000303372 +ENST00000303375 +ENST00000303383 +ENST00000303400 +ENST00000303407 +ENST00000303415 +ENST00000303434 +ENST00000303436 +ENST00000303498 +ENST00000303531 +ENST00000303538 +ENST00000303545 +ENST00000303562 +ENST00000303575 +ENST00000303577 +ENST00000303596 +ENST00000303635 +ENST00000303657 +ENST00000303694 +ENST00000303714 +ENST00000303731 +ENST00000303749 +ENST00000303759 +ENST00000303775 +ENST00000303887 +ENST00000303904 +ENST00000303910 +ENST00000303915 +ENST00000303921 +ENST00000303924 +ENST00000303927 +ENST00000303965 +ENST00000304030 +ENST00000304031 +ENST00000304043 +ENST00000304056 +ENST00000304060 +ENST00000304129 +ENST00000304141 +ENST00000304191 +ENST00000304195 +ENST00000304222 +ENST00000304231 +ENST00000304271 +ENST00000304298 +ENST00000304301 +ENST00000304312 +ENST00000304330 +ENST00000304363 +ENST00000304381 +ENST00000304385 +ENST00000304400 +ENST00000304414 +ENST00000304430 +ENST00000304478 +ENST00000304511 +ENST00000304523 +ENST00000304611 +ENST00000304625 +ENST00000304658 +ENST00000304661 +ENST00000304677 +ENST00000304685 +ENST00000304698 +ENST00000304735 +ENST00000304743 +ENST00000304786 +ENST00000304800 +ENST00000304842 +ENST00000304858 +ENST00000304863 +ENST00000304874 +ENST00000304895 +ENST00000304916 +ENST00000304921 +ENST00000304979 +ENST00000304987 +ENST00000305031 +ENST00000305046 +ENST00000305105 +ENST00000305108 +ENST00000305123 +ENST00000305135 +ENST00000305139 +ENST00000305141 +ENST00000305188 +ENST00000305218 +ENST00000305231 +ENST00000305233 +ENST00000305264 +ENST00000305364 +ENST00000305386 +ENST00000305476 +ENST00000305494 +ENST00000305510 +ENST00000305513 +ENST00000305533 +ENST00000305536 +ENST00000305560 +ENST00000305596 +ENST00000305626 +ENST00000305631 +ENST00000305632 +ENST00000305641 +ENST00000305768 +ENST00000305783 +ENST00000305784 +ENST00000305786 +ENST00000305798 +ENST00000305866 +ENST00000305877 +ENST00000305883 +ENST00000305885 +ENST00000305921 +ENST00000305943 +ENST00000305949 +ENST00000305958 +ENST00000305963 +ENST00000305997 +ENST00000306010 +ENST00000306024 +ENST00000306051 +ENST00000306052 +ENST00000306065 +ENST00000306071 +ENST00000306072 +ENST00000306077 +ENST00000306085 +ENST00000306103 +ENST00000306107 +ENST00000306108 +ENST00000306121 +ENST00000306156 +ENST00000306177 +ENST00000306185 +ENST00000306193 +ENST00000306200 +ENST00000306243 +ENST00000306270 +ENST00000306279 +ENST00000306306 +ENST00000306320 +ENST00000306324 +ENST00000306336 +ENST00000306357 +ENST00000306368 +ENST00000306376 +ENST00000306378 +ENST00000306384 +ENST00000306434 +ENST00000306442 +ENST00000306467 +ENST00000306480 +ENST00000306503 +ENST00000306560 +ENST00000306562 +ENST00000306627 +ENST00000306688 +ENST00000306708 +ENST00000306721 +ENST00000306726 +ENST00000306730 +ENST00000306735 +ENST00000306749 +ENST00000306801 +ENST00000306846 +ENST00000306851 +ENST00000306858 +ENST00000306862 +ENST00000306869 +ENST00000306875 +ENST00000306897 +ENST00000306908 +ENST00000306910 +ENST00000306917 +ENST00000306954 +ENST00000306984 +ENST00000306999 +ENST00000307017 +ENST00000307046 +ENST00000307063 +ENST00000307078 +ENST00000307102 +ENST00000307126 +ENST00000307138 +ENST00000307142 +ENST00000307145 +ENST00000307149 +ENST00000307194 +ENST00000307201 +ENST00000307271 +ENST00000307275 +ENST00000307301 +ENST00000307333 +ENST00000307358 +ENST00000307363 +ENST00000307365 +ENST00000307366 +ENST00000307428 +ENST00000307546 +ENST00000307564 +ENST00000307602 +ENST00000307630 +ENST00000307637 +ENST00000307641 +ENST00000307650 +ENST00000307677 +ENST00000307712 +ENST00000307720 +ENST00000307729 +ENST00000307741 +ENST00000307745 +ENST00000307750 +ENST00000307751 +ENST00000307767 +ENST00000307768 +ENST00000307771 +ENST00000307792 +ENST00000307839 +ENST00000307864 +ENST00000307877 +ENST00000307885 +ENST00000307886 +ENST00000307892 +ENST00000307897 +ENST00000307921 +ENST00000307961 +ENST00000307980 +ENST00000308020 +ENST00000308022 +ENST00000308025 +ENST00000308027 +ENST00000308031 +ENST00000308086 +ENST00000308110 +ENST00000308127 +ENST00000308153 +ENST00000308158 +ENST00000308159 +ENST00000308167 +ENST00000308177 +ENST00000308191 +ENST00000308271 +ENST00000308275 +ENST00000308278 +ENST00000308284 +ENST00000308317 +ENST00000308330 +ENST00000308360 +ENST00000308375 +ENST00000308394 +ENST00000308406 +ENST00000308418 +ENST00000308436 +ENST00000308448 +ENST00000308482 +ENST00000308488 +ENST00000308508 +ENST00000308511 +ENST00000308521 +ENST00000308527 +ENST00000308580 +ENST00000308595 +ENST00000308611 +ENST00000308647 +ENST00000308666 +ENST00000308677 +ENST00000308683 +ENST00000308696 +ENST00000308713 +ENST00000308724 +ENST00000308731 +ENST00000308736 +ENST00000308742 +ENST00000308807 +ENST00000308824 +ENST00000308831 +ENST00000308860 +ENST00000308893 +ENST00000308924 +ENST00000308941 +ENST00000308979 +ENST00000308982 +ENST00000308987 +ENST00000309033 +ENST00000309042 +ENST00000309060 +ENST00000309061 +ENST00000309083 +ENST00000309100 +ENST00000309117 +ENST00000309137 +ENST00000309166 +ENST00000309180 +ENST00000309212 +ENST00000309235 +ENST00000309241 +ENST00000309295 +ENST00000309311 +ENST00000309315 +ENST00000309318 +ENST00000309324 +ENST00000309328 +ENST00000309352 +ENST00000309377 +ENST00000309415 +ENST00000309422 +ENST00000309428 +ENST00000309446 +ENST00000309451 +ENST00000309469 +ENST00000309495 +ENST00000309519 +ENST00000309539 +ENST00000309575 +ENST00000309594 +ENST00000309602 +ENST00000309657 +ENST00000309660 +ENST00000309683 +ENST00000309731 +ENST00000309739 +ENST00000309755 +ENST00000309758 +ENST00000309784 +ENST00000309794 +ENST00000309822 +ENST00000309851 +ENST00000309859 +ENST00000309863 +ENST00000309909 +ENST00000309922 +ENST00000309934 +ENST00000309951 +ENST00000309955 +ENST00000309957 +ENST00000309964 +ENST00000309971 +ENST00000309979 +ENST00000309983 +ENST00000309988 +ENST00000309993 +ENST00000310015 +ENST00000310045 +ENST00000310053 +ENST00000310054 +ENST00000310074 +ENST00000310118 +ENST00000310123 +ENST00000310137 +ENST00000310144 +ENST00000310193 +ENST00000310256 +ENST00000310300 +ENST00000310301 +ENST00000310325 +ENST00000310331 +ENST00000310343 +ENST00000310380 +ENST00000310389 +ENST00000310392 +ENST00000310396 +ENST00000310397 +ENST00000310418 +ENST00000310421 +ENST00000310430 +ENST00000310441 +ENST00000310442 +ENST00000310447 +ENST00000310454 +ENST00000310455 +ENST00000310473 +ENST00000310496 +ENST00000310512 +ENST00000310571 +ENST00000310574 +ENST00000310597 +ENST00000310613 +ENST00000310614 +ENST00000310624 +ENST00000310653 +ENST00000310673 +ENST00000310677 +ENST00000310754 +ENST00000310758 +ENST00000310775 +ENST00000310786 +ENST00000310803 +ENST00000310806 +ENST00000310823 +ENST00000310826 +ENST00000310836 +ENST00000310842 +ENST00000310850 +ENST00000310864 +ENST00000310924 +ENST00000310926 +ENST00000310942 +ENST00000310954 +ENST00000310974 +ENST00000311008 +ENST00000311015 +ENST00000311044 +ENST00000311048 +ENST00000311083 +ENST00000311085 +ENST00000311086 +ENST00000311111 +ENST00000311117 +ENST00000311124 +ENST00000311127 +ENST00000311128 +ENST00000311129 +ENST00000311131 +ENST00000311148 +ENST00000311151 +ENST00000311180 +ENST00000311181 +ENST00000311191 +ENST00000311208 +ENST00000311234 +ENST00000311277 +ENST00000311320 +ENST00000311322 +ENST00000311330 +ENST00000311331 +ENST00000311351 +ENST00000311403 +ENST00000311413 +ENST00000311417 +ENST00000311437 +ENST00000311459 +ENST00000311469 +ENST00000311481 +ENST00000311506 +ENST00000311549 +ENST00000311550 +ENST00000311565 +ENST00000311601 +ENST00000311604 +ENST00000311630 +ENST00000311635 +ENST00000311638 +ENST00000311669 +ENST00000311764 +ENST00000311765 +ENST00000311772 +ENST00000311806 +ENST00000311813 +ENST00000311832 +ENST00000311852 +ENST00000311890 +ENST00000311893 +ENST00000311895 +ENST00000311916 +ENST00000311921 +ENST00000311922 +ENST00000311925 +ENST00000311956 +ENST00000312026 +ENST00000312053 +ENST00000312143 +ENST00000312175 +ENST00000312184 +ENST00000312196 +ENST00000312234 +ENST00000312239 +ENST00000312251 +ENST00000312397 +ENST00000312419 +ENST00000312423 +ENST00000312475 +ENST00000312499 +ENST00000312515 +ENST00000312521 +ENST00000312541 +ENST00000312553 +ENST00000312561 +ENST00000312562 +ENST00000312579 +ENST00000312584 +ENST00000312629 +ENST00000312648 +ENST00000312655 +ENST00000312814 +ENST00000312828 +ENST00000312838 +ENST00000312865 +ENST00000312916 +ENST00000312938 +ENST00000312960 +ENST00000312962 +ENST00000312989 +ENST00000313005 +ENST00000313028 +ENST00000313040 +ENST00000313050 +ENST00000313080 +ENST00000313117 +ENST00000313143 +ENST00000313146 +ENST00000313236 +ENST00000313250 +ENST00000313269 +ENST00000313285 +ENST00000313288 +ENST00000313324 +ENST00000313334 +ENST00000313349 +ENST00000313367 +ENST00000313368 +ENST00000313375 +ENST00000313401 +ENST00000313421 +ENST00000313468 +ENST00000313478 +ENST00000313486 +ENST00000313511 +ENST00000313525 +ENST00000313543 +ENST00000313546 +ENST00000313552 +ENST00000313582 +ENST00000313601 +ENST00000313608 +ENST00000313654 +ENST00000313655 +ENST00000313683 +ENST00000313708 +ENST00000313733 +ENST00000313766 +ENST00000313777 +ENST00000313806 +ENST00000313833 +ENST00000313835 +ENST00000313843 +ENST00000313860 +ENST00000313871 +ENST00000313899 +ENST00000314011 +ENST00000314028 +ENST00000314045 +ENST00000314073 +ENST00000314103 +ENST00000314128 +ENST00000314133 +ENST00000314134 +ENST00000314138 +ENST00000314144 +ENST00000314163 +ENST00000314167 +ENST00000314191 +ENST00000314222 +ENST00000314256 +ENST00000314276 +ENST00000314328 +ENST00000314332 +ENST00000314340 +ENST00000314355 +ENST00000314358 +ENST00000314392 +ENST00000314393 +ENST00000314400 +ENST00000314423 +ENST00000314471 +ENST00000314475 +ENST00000314499 +ENST00000314531 +ENST00000314583 +ENST00000314586 +ENST00000314606 +ENST00000314607 +ENST00000314616 +ENST00000314622 +ENST00000314641 +ENST00000314666 +ENST00000314673 +ENST00000314737 +ENST00000314742 +ENST00000314754 +ENST00000314759 +ENST00000314761 +ENST00000314787 +ENST00000314797 +ENST00000314830 +ENST00000314845 +ENST00000314888 +ENST00000314891 +ENST00000314933 +ENST00000314940 +ENST00000314970 +ENST00000314994 +ENST00000315073 +ENST00000315082 +ENST00000315099 +ENST00000315127 +ENST00000315212 +ENST00000315274 +ENST00000315285 +ENST00000315286 +ENST00000315322 +ENST00000315323 +ENST00000315366 +ENST00000315367 +ENST00000315368 +ENST00000315423 +ENST00000315436 +ENST00000315467 +ENST00000315475 +ENST00000315480 +ENST00000315491 +ENST00000315567 +ENST00000315571 +ENST00000315576 +ENST00000315579 +ENST00000315588 +ENST00000315596 +ENST00000315616 +ENST00000315684 +ENST00000315691 +ENST00000315732 +ENST00000315757 +ENST00000315758 +ENST00000315792 +ENST00000315796 +ENST00000315869 +ENST00000315870 +ENST00000315872 +ENST00000315927 +ENST00000315939 +ENST00000315948 +ENST00000315970 +ENST00000315985 +ENST00000316052 +ENST00000316059 +ENST00000316077 +ENST00000316084 +ENST00000316097 +ENST00000316149 +ENST00000316157 +ENST00000316218 +ENST00000316273 +ENST00000316292 +ENST00000316299 +ENST00000316308 +ENST00000316334 +ENST00000316355 +ENST00000316356 +ENST00000316364 +ENST00000316398 +ENST00000316403 +ENST00000316407 +ENST00000316418 +ENST00000316423 +ENST00000316425 +ENST00000316448 +ENST00000316461 +ENST00000316491 +ENST00000316509 +ENST00000316519 +ENST00000316549 +ENST00000316554 +ENST00000316594 +ENST00000316610 +ENST00000316623 +ENST00000316626 +ENST00000316634 +ENST00000316637 +ENST00000316660 +ENST00000316694 +ENST00000316715 +ENST00000316731 +ENST00000316738 +ENST00000316754 +ENST00000316757 +ENST00000316788 +ENST00000316836 +ENST00000316843 +ENST00000316881 +ENST00000316891 +ENST00000316937 +ENST00000316939 +ENST00000316950 +ENST00000316963 +ENST00000316981 +ENST00000317005 +ENST00000317025 +ENST00000317058 +ENST00000317089 +ENST00000317091 +ENST00000317096 +ENST00000317135 +ENST00000317147 +ENST00000317173 +ENST00000317178 +ENST00000317204 +ENST00000317216 +ENST00000317243 +ENST00000317257 +ENST00000317276 +ENST00000317370 +ENST00000317378 +ENST00000317398 +ENST00000317449 +ENST00000317479 +ENST00000317483 +ENST00000317502 +ENST00000317506 +ENST00000317534 +ENST00000317551 +ENST00000317568 +ENST00000317571 +ENST00000317578 +ENST00000317582 +ENST00000317615 +ENST00000317635 +ENST00000317677 +ENST00000317683 +ENST00000317697 +ENST00000317702 +ENST00000317746 +ENST00000317799 +ENST00000317811 +ENST00000317827 +ENST00000317868 +ENST00000317881 +ENST00000317897 +ENST00000317905 +ENST00000317907 +ENST00000317961 +ENST00000317991 +ENST00000317995 +ENST00000318003 +ENST00000318006 +ENST00000318008 +ENST00000318010 +ENST00000318037 +ENST00000318066 +ENST00000318080 +ENST00000318130 +ENST00000318158 +ENST00000318217 +ENST00000318238 +ENST00000318240 +ENST00000318304 +ENST00000318312 +ENST00000318348 +ENST00000318388 +ENST00000318410 +ENST00000318430 +ENST00000318442 +ENST00000318443 +ENST00000318445 +ENST00000318471 +ENST00000318507 +ENST00000318522 +ENST00000318579 +ENST00000318584 +ENST00000318596 +ENST00000318602 +ENST00000318607 +ENST00000318663 +ENST00000318683 +ENST00000318709 +ENST00000318782 +ENST00000318833 +ENST00000318887 +ENST00000318911 +ENST00000318950 +ENST00000318967 +ENST00000319004 +ENST00000319006 +ENST00000319017 +ENST00000319023 +ENST00000319074 +ENST00000319080 +ENST00000319121 +ENST00000319129 +ENST00000319170 +ENST00000319172 +ENST00000319190 +ENST00000319211 +ENST00000319212 +ENST00000319264 +ENST00000319285 +ENST00000319286 +ENST00000319332 +ENST00000319357 +ENST00000319363 +ENST00000319380 +ENST00000319410 +ENST00000319441 +ENST00000319449 +ENST00000319481 +ENST00000319517 +ENST00000319540 +ENST00000319550 +ENST00000319555 +ENST00000319562 +ENST00000319622 +ENST00000319715 +ENST00000319725 +ENST00000319769 +ENST00000319863 +ENST00000319933 +ENST00000319942 +ENST00000319980 +ENST00000320027 +ENST00000320033 +ENST00000320081 +ENST00000320152 +ENST00000320159 +ENST00000320172 +ENST00000320201 +ENST00000320203 +ENST00000320211 +ENST00000320230 +ENST00000320248 +ENST00000320270 +ENST00000320285 +ENST00000320316 +ENST00000320334 +ENST00000320393 +ENST00000320451 +ENST00000320574 +ENST00000320578 +ENST00000320580 +ENST00000320585 +ENST00000320623 +ENST00000320640 +ENST00000320672 +ENST00000320676 +ENST00000320717 +ENST00000320740 +ENST00000320743 +ENST00000320756 +ENST00000320776 +ENST00000320785 +ENST00000320805 +ENST00000320816 +ENST00000320848 +ENST00000320857 +ENST00000320865 +ENST00000320868 +ENST00000320876 +ENST00000320892 +ENST00000320895 +ENST00000320912 +ENST00000320934 +ENST00000320954 +ENST00000321027 +ENST00000321030 +ENST00000321037 +ENST00000321143 +ENST00000321153 +ENST00000321169 +ENST00000321196 +ENST00000321256 +ENST00000321265 +ENST00000321276 +ENST00000321348 +ENST00000321358 +ENST00000321367 +ENST00000321394 +ENST00000321407 +ENST00000321429 +ENST00000321437 +ENST00000321442 +ENST00000321545 +ENST00000321556 +ENST00000321560 +ENST00000321562 +ENST00000321599 +ENST00000321617 +ENST00000321680 +ENST00000321685 +ENST00000321725 +ENST00000321753 +ENST00000321757 +ENST00000321765 +ENST00000321867 +ENST00000321895 +ENST00000321919 +ENST00000321945 +ENST00000321990 +ENST00000321998 +ENST00000322019 +ENST00000322028 +ENST00000322038 +ENST00000322048 +ENST00000322054 +ENST00000322088 +ENST00000322090 +ENST00000322128 +ENST00000322146 +ENST00000322157 +ENST00000322203 +ENST00000322213 +ENST00000322217 +ENST00000322244 +ENST00000322310 +ENST00000322313 +ENST00000322315 +ENST00000322342 +ENST00000322347 +ENST00000322349 +ENST00000322354 +ENST00000322357 +ENST00000322396 +ENST00000322428 +ENST00000322434 +ENST00000322507 +ENST00000322535 +ENST00000322536 +ENST00000322569 +ENST00000322611 +ENST00000322623 +ENST00000322652 +ENST00000322680 +ENST00000322716 +ENST00000322723 +ENST00000322748 +ENST00000322753 +ENST00000322764 +ENST00000322776 +ENST00000322875 +ENST00000322897 +ENST00000322927 +ENST00000322940 +ENST00000322954 +ENST00000322989 +ENST00000323013 +ENST00000323037 +ENST00000323116 +ENST00000323169 +ENST00000323274 +ENST00000323301 +ENST00000323303 +ENST00000323345 +ENST00000323348 +ENST00000323443 +ENST00000323456 +ENST00000323460 +ENST00000323468 +ENST00000323469 +ENST00000323482 +ENST00000323523 +ENST00000323534 +ENST00000323544 +ENST00000323563 +ENST00000323570 +ENST00000323571 +ENST00000323584 +ENST00000323646 +ENST00000323666 +ENST00000323669 +ENST00000323699 +ENST00000323701 +ENST00000323703 +ENST00000323716 +ENST00000323760 +ENST00000323786 +ENST00000323798 +ENST00000323833 +ENST00000323848 +ENST00000323853 +ENST00000323906 +ENST00000323927 +ENST00000323929 +ENST00000323944 +ENST00000323959 +ENST00000323963 +ENST00000323997 +ENST00000324001 +ENST00000324015 +ENST00000324041 +ENST00000324048 +ENST00000324068 +ENST00000324093 +ENST00000324096 +ENST00000324103 +ENST00000324106 +ENST00000324109 +ENST00000324166 +ENST00000324198 +ENST00000324225 +ENST00000324238 +ENST00000324266 +ENST00000324288 +ENST00000324300 +ENST00000324306 +ENST00000324366 +ENST00000324439 +ENST00000324453 +ENST00000324460 +ENST00000324464 +ENST00000324472 +ENST00000324501 +ENST00000324545 +ENST00000324559 +ENST00000324607 +ENST00000324631 +ENST00000324679 +ENST00000324685 +ENST00000324765 +ENST00000324817 +ENST00000324849 +ENST00000324856 +ENST00000324862 +ENST00000324868 +ENST00000324871 +ENST00000324907 +ENST00000324913 +ENST00000324932 +ENST00000324989 +ENST00000325006 +ENST00000325083 +ENST00000325103 +ENST00000325110 +ENST00000325123 +ENST00000325144 +ENST00000325167 +ENST00000325207 +ENST00000325212 +ENST00000325222 +ENST00000325239 +ENST00000325285 +ENST00000325301 +ENST00000325303 +ENST00000325307 +ENST00000325318 +ENST00000325327 +ENST00000325351 +ENST00000325366 +ENST00000325385 +ENST00000325404 +ENST00000325418 +ENST00000325421 +ENST00000325455 +ENST00000325464 +ENST00000325495 +ENST00000325509 +ENST00000325542 +ENST00000325551 +ENST00000325599 +ENST00000325617 +ENST00000325642 +ENST00000325680 +ENST00000325722 +ENST00000325748 +ENST00000325752 +ENST00000325795 +ENST00000325805 +ENST00000325844 +ENST00000325875 +ENST00000325881 +ENST00000325888 +ENST00000325954 +ENST00000325974 +ENST00000326003 +ENST00000326005 +ENST00000326043 +ENST00000326080 +ENST00000326153 +ENST00000326172 +ENST00000326181 +ENST00000326195 +ENST00000326199 +ENST00000326225 +ENST00000326232 +ENST00000326266 +ENST00000326282 +ENST00000326291 +ENST00000326294 +ENST00000326303 +ENST00000326317 +ENST00000326361 +ENST00000326397 +ENST00000326402 +ENST00000326427 +ENST00000326441 +ENST00000326446 +ENST00000326448 +ENST00000326495 +ENST00000326499 +ENST00000326505 +ENST00000326621 +ENST00000326624 +ENST00000326639 +ENST00000326648 +ENST00000326674 +ENST00000326735 +ENST00000326737 +ENST00000326739 +ENST00000326756 +ENST00000326764 +ENST00000326793 +ENST00000326804 +ENST00000326840 +ENST00000326873 +ENST00000326925 +ENST00000326974 +ENST00000327031 +ENST00000327040 +ENST00000327044 +ENST00000327064 +ENST00000327111 +ENST00000327134 +ENST00000327158 +ENST00000327237 +ENST00000327245 +ENST00000327247 +ENST00000327268 +ENST00000327300 +ENST00000327304 +ENST00000327347 +ENST00000327355 +ENST00000327367 +ENST00000327374 +ENST00000327423 +ENST00000327428 +ENST00000327435 +ENST00000327443 +ENST00000327470 +ENST00000327490 +ENST00000327492 +ENST00000327532 +ENST00000327569 +ENST00000327619 +ENST00000327628 +ENST00000327671 +ENST00000327678 +ENST00000327697 +ENST00000327705 +ENST00000327726 +ENST00000327772 +ENST00000327773 +ENST00000327787 +ENST00000327827 +ENST00000327835 +ENST00000327839 +ENST00000327857 +ENST00000327858 +ENST00000327877 +ENST00000327892 +ENST00000327898 +ENST00000327979 +ENST00000328024 +ENST00000328041 +ENST00000328046 +ENST00000328070 +ENST00000328078 +ENST00000328086 +ENST00000328089 +ENST00000328090 +ENST00000328178 +ENST00000328194 +ENST00000328195 +ENST00000328205 +ENST00000328252 +ENST00000328257 +ENST00000328299 +ENST00000328300 +ENST00000328333 +ENST00000328379 +ENST00000328381 +ENST00000328434 +ENST00000328557 +ENST00000328599 +ENST00000328631 +ENST00000328649 +ENST00000328666 +ENST00000328697 +ENST00000328703 +ENST00000328709 +ENST00000328747 +ENST00000328766 +ENST00000328771 +ENST00000328827 +ENST00000328848 +ENST00000328850 +ENST00000328879 +ENST00000328880 +ENST00000328902 +ENST00000328914 +ENST00000328933 +ENST00000328945 +ENST00000328965 +ENST00000329021 +ENST00000329078 +ENST00000329138 +ENST00000329153 +ENST00000329197 +ENST00000329214 +ENST00000329235 +ENST00000329245 +ENST00000329251 +ENST00000329276 +ENST00000329286 +ENST00000329291 +ENST00000329293 +ENST00000329314 +ENST00000329321 +ENST00000329399 +ENST00000329421 +ENST00000329474 +ENST00000329559 +ENST00000329597 +ENST00000329608 +ENST00000329627 +ENST00000329630 +ENST00000329665 +ENST00000329687 +ENST00000329713 +ENST00000329734 +ENST00000329759 +ENST00000329841 +ENST00000329858 +ENST00000329875 +ENST00000329957 +ENST00000329967 +ENST00000329970 +ENST00000330029 +ENST00000330055 +ENST00000330062 +ENST00000330070 +ENST00000330133 +ENST00000330137 +ENST00000330143 +ENST00000330149 +ENST00000330173 +ENST00000330181 +ENST00000330236 +ENST00000330258 +ENST00000330263 +ENST00000330288 +ENST00000330295 +ENST00000330333 +ENST00000330334 +ENST00000330342 +ENST00000330368 +ENST00000330374 +ENST00000330387 +ENST00000330398 +ENST00000330475 +ENST00000330501 +ENST00000330513 +ENST00000330540 +ENST00000330574 +ENST00000330579 +ENST00000330619 +ENST00000330622 +ENST00000330636 +ENST00000330651 +ENST00000330687 +ENST00000330688 +ENST00000330689 +ENST00000330701 +ENST00000330714 +ENST00000330720 +ENST00000330793 +ENST00000330794 +ENST00000330817 +ENST00000330828 +ENST00000330843 +ENST00000330847 +ENST00000330852 +ENST00000330871 +ENST00000330889 +ENST00000330899 +ENST00000330915 +ENST00000330927 +ENST00000330938 +ENST00000330943 +ENST00000330947 +ENST00000330953 +ENST00000330964 +ENST00000331079 +ENST00000331134 +ENST00000331163 +ENST00000331173 +ENST00000331200 +ENST00000331203 +ENST00000331268 +ENST00000331272 +ENST00000331314 +ENST00000331320 +ENST00000331327 +ENST00000331334 +ENST00000331366 +ENST00000331373 +ENST00000331410 +ENST00000331426 +ENST00000331434 +ENST00000331456 +ENST00000331457 +ENST00000331462 +ENST00000331479 +ENST00000331483 +ENST00000331495 +ENST00000331552 +ENST00000331563 +ENST00000331569 +ENST00000331573 +ENST00000331593 +ENST00000331595 +ENST00000331597 +ENST00000331666 +ENST00000331710 +ENST00000331738 +ENST00000331758 +ENST00000331768 +ENST00000331772 +ENST00000331782 +ENST00000331789 +ENST00000331808 +ENST00000331817 +ENST00000331821 +ENST00000331825 +ENST00000331835 +ENST00000331837 +ENST00000331849 +ENST00000331886 +ENST00000331890 +ENST00000331923 +ENST00000331968 +ENST00000332029 +ENST00000332070 +ENST00000332118 +ENST00000332180 +ENST00000332281 +ENST00000332290 +ENST00000332395 +ENST00000332435 +ENST00000332439 +ENST00000332499 +ENST00000332503 +ENST00000332509 +ENST00000332512 +ENST00000332539 +ENST00000332549 +ENST00000332556 +ENST00000332598 +ENST00000332624 +ENST00000332629 +ENST00000332674 +ENST00000332680 +ENST00000332687 +ENST00000332707 +ENST00000332780 +ENST00000332783 +ENST00000332797 +ENST00000332810 +ENST00000332826 +ENST00000332830 +ENST00000332859 +ENST00000332884 +ENST00000332981 +ENST00000333003 +ENST00000333039 +ENST00000333050 +ENST00000333129 +ENST00000333130 +ENST00000333167 +ENST00000333188 +ENST00000333202 +ENST00000333213 +ENST00000333229 +ENST00000333244 +ENST00000333256 +ENST00000333274 +ENST00000333323 +ENST00000333360 +ENST00000333371 +ENST00000333396 +ENST00000333407 +ENST00000333449 +ENST00000333467 +ENST00000333479 +ENST00000333486 +ENST00000333493 +ENST00000333503 +ENST00000333511 +ENST00000333590 +ENST00000333610 +ENST00000333628 +ENST00000333651 +ENST00000333676 +ENST00000333677 +ENST00000333751 +ENST00000333762 +ENST00000333775 +ENST00000333781 +ENST00000333868 +ENST00000333916 +ENST00000333924 +ENST00000333926 +ENST00000333933 +ENST00000333957 +ENST00000333972 +ENST00000333987 +ENST00000334018 +ENST00000334049 +ENST00000334062 +ENST00000334121 +ENST00000334133 +ENST00000334136 +ENST00000334163 +ENST00000334181 +ENST00000334192 +ENST00000334205 +ENST00000334213 +ENST00000334220 +ENST00000334256 +ENST00000334270 +ENST00000334274 +ENST00000334295 +ENST00000334304 +ENST00000334306 +ENST00000334344 +ENST00000334352 +ENST00000334370 +ENST00000334379 +ENST00000334398 +ENST00000334414 +ENST00000334418 +ENST00000334444 +ENST00000334464 +ENST00000334512 +ENST00000334513 +ENST00000334527 +ENST00000334571 +ENST00000334575 +ENST00000334635 +ENST00000334636 +ENST00000334651 +ENST00000334660 +ENST00000334678 +ENST00000334690 +ENST00000334696 +ENST00000334701 +ENST00000334705 +ENST00000334731 +ENST00000334744 +ENST00000334746 +ENST00000334785 +ENST00000334801 +ENST00000334815 +ENST00000334828 +ENST00000334955 +ENST00000334956 +ENST00000334976 +ENST00000334982 +ENST00000335012 +ENST00000335016 +ENST00000335117 +ENST00000335125 +ENST00000335146 +ENST00000335154 +ENST00000335174 +ENST00000335183 +ENST00000335209 +ENST00000335251 +ENST00000335255 +ENST00000335263 +ENST00000335272 +ENST00000335295 +ENST00000335312 +ENST00000335325 +ENST00000335327 +ENST00000335350 +ENST00000335390 +ENST00000335420 +ENST00000335464 +ENST00000335472 +ENST00000335508 +ENST00000335514 +ENST00000335585 +ENST00000335670 +ENST00000335681 +ENST00000335712 +ENST00000335725 +ENST00000335749 +ENST00000335754 +ENST00000335756 +ENST00000335757 +ENST00000335765 +ENST00000335783 +ENST00000335791 +ENST00000335793 +ENST00000335815 +ENST00000335870 +ENST00000335877 +ENST00000335890 +ENST00000335891 +ENST00000335953 +ENST00000335968 +ENST00000335972 +ENST00000335987 +ENST00000335999 +ENST00000336023 +ENST00000336032 +ENST00000336079 +ENST00000336097 +ENST00000336126 +ENST00000336128 +ENST00000336133 +ENST00000336138 +ENST00000336139 +ENST00000336148 +ENST00000336180 +ENST00000336219 +ENST00000336233 +ENST00000336273 +ENST00000336278 +ENST00000336283 +ENST00000336292 +ENST00000336294 +ENST00000336307 +ENST00000336308 +ENST00000336314 +ENST00000336349 +ENST00000336395 +ENST00000336418 +ENST00000336431 +ENST00000336452 +ENST00000336470 +ENST00000336498 +ENST00000336564 +ENST00000336576 +ENST00000336577 +ENST00000336596 +ENST00000336614 +ENST00000336615 +ENST00000336617 +ENST00000336643 +ENST00000336689 +ENST00000336702 +ENST00000336714 +ENST00000336735 +ENST00000336737 +ENST00000336755 +ENST00000336767 +ENST00000336812 +ENST00000336824 +ENST00000336838 +ENST00000336854 +ENST00000336868 +ENST00000336890 +ENST00000336898 +ENST00000336915 +ENST00000336926 +ENST00000336934 +ENST00000336949 +ENST00000336976 +ENST00000337002 +ENST00000337014 +ENST00000337057 +ENST00000337080 +ENST00000337090 +ENST00000337109 +ENST00000337130 +ENST00000337137 +ENST00000337190 +ENST00000337195 +ENST00000337198 +ENST00000337231 +ENST00000337273 +ENST00000337288 +ENST00000337304 +ENST00000337322 +ENST00000337331 +ENST00000337338 +ENST00000337386 +ENST00000337392 +ENST00000337432 +ENST00000337435 +ENST00000337451 +ENST00000337488 +ENST00000337491 +ENST00000337514 +ENST00000337537 +ENST00000337619 +ENST00000337620 +ENST00000337659 +ENST00000337664 +ENST00000337665 +ENST00000337673 +ENST00000337682 +ENST00000337702 +ENST00000337714 +ENST00000337743 +ENST00000337755 +ENST00000337768 +ENST00000337827 +ENST00000337843 +ENST00000337859 +ENST00000337872 +ENST00000337907 +ENST00000337910 +ENST00000337963 +ENST00000337975 +ENST00000337979 +ENST00000337995 +ENST00000338008 +ENST00000338010 +ENST00000338034 +ENST00000338074 +ENST00000338086 +ENST00000338121 +ENST00000338130 +ENST00000338134 +ENST00000338146 +ENST00000338148 +ENST00000338193 +ENST00000338222 +ENST00000338230 +ENST00000338302 +ENST00000338316 +ENST00000338366 +ENST00000338369 +ENST00000338370 +ENST00000338399 +ENST00000338415 +ENST00000338432 +ENST00000338448 +ENST00000338458 +ENST00000338483 +ENST00000338523 +ENST00000338560 +ENST00000338588 +ENST00000338591 +ENST00000338595 +ENST00000338625 +ENST00000338641 +ENST00000338700 +ENST00000338754 +ENST00000338779 +ENST00000338784 +ENST00000338797 +ENST00000338820 +ENST00000338821 +ENST00000338825 +ENST00000338844 +ENST00000338863 +ENST00000338891 +ENST00000338910 +ENST00000338920 +ENST00000338961 +ENST00000338965 +ENST00000338981 +ENST00000339020 +ENST00000339077 +ENST00000339145 +ENST00000339223 +ENST00000339235 +ENST00000339249 +ENST00000339276 +ENST00000339282 +ENST00000339296 +ENST00000339360 +ENST00000339364 +ENST00000339365 +ENST00000339394 +ENST00000339397 +ENST00000339399 +ENST00000339413 +ENST00000339450 +ENST00000339468 +ENST00000339486 +ENST00000339562 +ENST00000339594 +ENST00000339600 +ENST00000339618 +ENST00000339643 +ENST00000339656 +ENST00000339664 +ENST00000339697 +ENST00000339754 +ENST00000339775 +ENST00000339834 +ENST00000339852 +ENST00000339859 +ENST00000339877 +ENST00000339950 +ENST00000340001 +ENST00000340020 +ENST00000340042 +ENST00000340067 +ENST00000340080 +ENST00000340093 +ENST00000340096 +ENST00000340099 +ENST00000340107 +ENST00000340116 +ENST00000340126 +ENST00000340180 +ENST00000340258 +ENST00000340281 +ENST00000340356 +ENST00000340368 +ENST00000340370 +ENST00000340381 +ENST00000340384 +ENST00000340385 +ENST00000340413 +ENST00000340417 +ENST00000340434 +ENST00000340437 +ENST00000340438 +ENST00000340457 +ENST00000340473 +ENST00000340487 +ENST00000340533 +ENST00000340541 +ENST00000340552 +ENST00000340553 +ENST00000340578 +ENST00000340600 +ENST00000340607 +ENST00000340611 +ENST00000340623 +ENST00000340648 +ENST00000340684 +ENST00000340736 +ENST00000340738 +ENST00000340766 +ENST00000340802 +ENST00000340828 +ENST00000340855 +ENST00000340857 +ENST00000340913 +ENST00000340930 +ENST00000340934 +ENST00000340941 +ENST00000340965 +ENST00000340967 +ENST00000340990 +ENST00000341049 +ENST00000341068 +ENST00000341105 +ENST00000341119 +ENST00000341162 +ENST00000341164 +ENST00000341166 +ENST00000341170 +ENST00000341184 +ENST00000341189 +ENST00000341191 +ENST00000341197 +ENST00000341199 +ENST00000341217 +ENST00000341223 +ENST00000341249 +ENST00000341255 +ENST00000341259 +ENST00000341285 +ENST00000341319 +ENST00000341349 +ENST00000341369 +ENST00000341376 +ENST00000341394 +ENST00000341446 +ENST00000341458 +ENST00000341460 +ENST00000341469 +ENST00000341491 +ENST00000341511 +ENST00000341514 +ENST00000341516 +ENST00000341541 +ENST00000341567 +ENST00000341695 +ENST00000341698 +ENST00000341700 +ENST00000341772 +ENST00000341776 +ENST00000341846 +ENST00000341861 +ENST00000341864 +ENST00000341865 +ENST00000341871 +ENST00000341893 +ENST00000341901 +ENST00000341942 +ENST00000341948 +ENST00000341949 +ENST00000341976 +ENST00000342016 +ENST00000342071 +ENST00000342085 +ENST00000342136 +ENST00000342160 +ENST00000342166 +ENST00000342179 +ENST00000342193 +ENST00000342203 +ENST00000342206 +ENST00000342216 +ENST00000342228 +ENST00000342245 +ENST00000342280 +ENST00000342308 +ENST00000342374 +ENST00000342415 +ENST00000342422 +ENST00000342435 +ENST00000342480 +ENST00000342483 +ENST00000342494 +ENST00000342502 +ENST00000342505 +ENST00000342624 +ENST00000342628 +ENST00000342649 +ENST00000342665 +ENST00000342666 +ENST00000342669 +ENST00000342679 +ENST00000342683 +ENST00000342694 +ENST00000342695 +ENST00000342697 +ENST00000342704 +ENST00000342711 +ENST00000342745 +ENST00000342756 +ENST00000342771 +ENST00000342932 +ENST00000342947 +ENST00000342972 +ENST00000342983 +ENST00000342988 +ENST00000343004 +ENST00000343028 +ENST00000343053 +ENST00000343070 +ENST00000343090 +ENST00000343110 +ENST00000343139 +ENST00000343150 +ENST00000343218 +ENST00000343242 +ENST00000343262 +ENST00000343267 +ENST00000343289 +ENST00000343304 +ENST00000343325 +ENST00000343348 +ENST00000343373 +ENST00000343380 +ENST00000343411 +ENST00000343470 +ENST00000343483 +ENST00000343484 +ENST00000343526 +ENST00000343537 +ENST00000343597 +ENST00000343605 +ENST00000343625 +ENST00000343632 +ENST00000343666 +ENST00000343677 +ENST00000343684 +ENST00000343736 +ENST00000343769 +ENST00000343776 +ENST00000343788 +ENST00000343813 +ENST00000343818 +ENST00000343823 +ENST00000343855 +ENST00000343905 +ENST00000343938 +ENST00000343949 +ENST00000343958 +ENST00000343979 +ENST00000343984 +ENST00000343986 +ENST00000344034 +ENST00000344041 +ENST00000344096 +ENST00000344099 +ENST00000344138 +ENST00000344204 +ENST00000344209 +ENST00000344229 +ENST00000344293 +ENST00000344302 +ENST00000344327 +ENST00000344337 +ENST00000344408 +ENST00000344415 +ENST00000344417 +ENST00000344420 +ENST00000344423 +ENST00000344450 +ENST00000344517 +ENST00000344532 +ENST00000344537 +ENST00000344548 +ENST00000344595 +ENST00000344604 +ENST00000344641 +ENST00000344646 +ENST00000344651 +ENST00000344683 +ENST00000344726 +ENST00000344754 +ENST00000344762 +ENST00000344768 +ENST00000344773 +ENST00000344836 +ENST00000344843 +ENST00000344876 +ENST00000344922 +ENST00000344936 +ENST00000344980 +ENST00000345057 +ENST00000345093 +ENST00000345094 +ENST00000345097 +ENST00000345122 +ENST00000345317 +ENST00000345330 +ENST00000345429 +ENST00000345496 +ENST00000345506 +ENST00000345617 +ENST00000345988 +ENST00000346027 +ENST00000346085 +ENST00000346128 +ENST00000346178 +ENST00000346183 +ENST00000346234 +ENST00000346246 +ENST00000346248 +ENST00000346299 +ENST00000346416 +ENST00000346436 +ENST00000346618 +ENST00000346798 +ENST00000346872 +ENST00000346964 +ENST00000347055 +ENST00000347063 +ENST00000347108 +ENST00000347230 +ENST00000347519 +ENST00000347613 +ENST00000347635 +ENST00000347699 +ENST00000347708 +ENST00000347785 +ENST00000347869 +ENST00000348159 +ENST00000348165 +ENST00000348227 +ENST00000348367 +ENST00000348411 +ENST00000348428 +ENST00000348459 +ENST00000348462 +ENST00000348513 +ENST00000348624 +ENST00000348849 +ENST00000348956 +ENST00000349004 +ENST00000349048 +ENST00000349129 +ENST00000349139 +ENST00000349215 +ENST00000349314 +ENST00000349485 +ENST00000349496 +ENST00000349499 +ENST00000349780 +ENST00000349830 +ENST00000349841 +ENST00000349938 +ENST00000349995 +ENST00000350027 +ENST00000350028 +ENST00000350030 +ENST00000350033 +ENST00000350498 +ENST00000350499 +ENST00000350612 +ENST00000350638 +ENST00000350697 +ENST00000350721 +ENST00000350763 +ENST00000350777 +ENST00000350796 +ENST00000350881 +ENST00000350997 +ENST00000351004 +ENST00000351018 +ENST00000351273 +ENST00000351298 +ENST00000351328 +ENST00000351677 +ENST00000351698 +ENST00000351797 +ENST00000351870 +ENST00000351989 +ENST00000352035 +ENST00000352133 +ENST00000352241 +ENST00000352251 +ENST00000352645 +ENST00000352689 +ENST00000352732 +ENST00000352903 +ENST00000352983 +ENST00000353047 +ENST00000353107 +ENST00000353172 +ENST00000353258 +ENST00000353339 +ENST00000353379 +ENST00000353383 +ENST00000353411 +ENST00000353479 +ENST00000353487 +ENST00000353533 +ENST00000353609 +ENST00000353704 +ENST00000354105 +ENST00000354161 +ENST00000354185 +ENST00000354193 +ENST00000354200 +ENST00000354209 +ENST00000354216 +ENST00000354221 +ENST00000354232 +ENST00000354250 +ENST00000354258 +ENST00000354283 +ENST00000354287 +ENST00000354300 +ENST00000354336 +ENST00000354366 +ENST00000354371 +ENST00000354377 +ENST00000354410 +ENST00000354449 +ENST00000354454 +ENST00000354464 +ENST00000354473 +ENST00000354475 +ENST00000354488 +ENST00000354513 +ENST00000354545 +ENST00000354546 +ENST00000354586 +ENST00000354618 +ENST00000354624 +ENST00000354666 +ENST00000354667 +ENST00000354670 +ENST00000354694 +ENST00000354698 +ENST00000354700 +ENST00000354725 +ENST00000354764 +ENST00000354775 +ENST00000354777 +ENST00000354817 +ENST00000354828 +ENST00000354831 +ENST00000354841 +ENST00000354858 +ENST00000354882 +ENST00000354883 +ENST00000354911 +ENST00000354914 +ENST00000354919 +ENST00000354926 +ENST00000354947 +ENST00000354952 +ENST00000354955 +ENST00000354957 +ENST00000354959 +ENST00000354960 +ENST00000354981 +ENST00000355029 +ENST00000355057 +ENST00000355072 +ENST00000355085 +ENST00000355091 +ENST00000355097 +ENST00000355105 +ENST00000355151 +ENST00000355190 +ENST00000355209 +ENST00000355237 +ENST00000355264 +ENST00000355272 +ENST00000355280 +ENST00000355295 +ENST00000355303 +ENST00000355312 +ENST00000355327 +ENST00000355377 +ENST00000355413 +ENST00000355417 +ENST00000355431 +ENST00000355451 +ENST00000355467 +ENST00000355480 +ENST00000355485 +ENST00000355520 +ENST00000355527 +ENST00000355528 +ENST00000355552 +ENST00000355585 +ENST00000355610 +ENST00000355619 +ENST00000355621 +ENST00000355622 +ENST00000355624 +ENST00000355630 +ENST00000355653 +ENST00000355661 +ENST00000355673 +ENST00000355689 +ENST00000355693 +ENST00000355697 +ENST00000355703 +ENST00000355716 +ENST00000355739 +ENST00000355740 +ENST00000355749 +ENST00000355754 +ENST00000355765 +ENST00000355773 +ENST00000355801 +ENST00000355815 +ENST00000355832 +ENST00000355841 +ENST00000355848 +ENST00000355849 +ENST00000355854 +ENST00000355897 +ENST00000355904 +ENST00000355906 +ENST00000355937 +ENST00000355943 +ENST00000355946 +ENST00000355947 +ENST00000355999 +ENST00000356056 +ENST00000356079 +ENST00000356080 +ENST00000356083 +ENST00000356091 +ENST00000356109 +ENST00000356116 +ENST00000356126 +ENST00000356136 +ENST00000356142 +ENST00000356150 +ENST00000356151 +ENST00000356166 +ENST00000356183 +ENST00000356189 +ENST00000356198 +ENST00000356208 +ENST00000356231 +ENST00000356232 +ENST00000356239 +ENST00000356260 +ENST00000356286 +ENST00000356289 +ENST00000356321 +ENST00000356357 +ENST00000356362 +ENST00000356386 +ENST00000356388 +ENST00000356401 +ENST00000356404 +ENST00000356406 +ENST00000356443 +ENST00000356448 +ENST00000356454 +ENST00000356455 +ENST00000356458 +ENST00000356464 +ENST00000356467 +ENST00000356493 +ENST00000356495 +ENST00000356518 +ENST00000356521 +ENST00000356537 +ENST00000356554 +ENST00000356577 +ENST00000356607 +ENST00000356628 +ENST00000356654 +ENST00000356657 +ENST00000356663 +ENST00000356692 +ENST00000356708 +ENST00000356709 +ENST00000356725 +ENST00000356763 +ENST00000356786 +ENST00000356792 +ENST00000356798 +ENST00000356805 +ENST00000356818 +ENST00000356819 +ENST00000356834 +ENST00000356838 +ENST00000356840 +ENST00000356847 +ENST00000356853 +ENST00000356860 +ENST00000356864 +ENST00000356865 +ENST00000356884 +ENST00000356891 +ENST00000356892 +ENST00000356896 +ENST00000356924 +ENST00000356929 +ENST00000356940 +ENST00000356948 +ENST00000356956 +ENST00000356978 +ENST00000356994 +ENST00000356998 +ENST00000357002 +ENST00000357006 +ENST00000357008 +ENST00000357033 +ENST00000357037 +ENST00000357066 +ENST00000357067 +ENST00000357082 +ENST00000357085 +ENST00000357103 +ENST00000357115 +ENST00000357137 +ENST00000357156 +ENST00000357164 +ENST00000357166 +ENST00000357182 +ENST00000357198 +ENST00000357214 +ENST00000357242 +ENST00000357260 +ENST00000357276 +ENST00000357277 +ENST00000357304 +ENST00000357324 +ENST00000357360 +ENST00000357365 +ENST00000357387 +ENST00000357388 +ENST00000357394 +ENST00000357402 +ENST00000357430 +ENST00000357436 +ENST00000357440 +ENST00000357447 +ENST00000357460 +ENST00000357479 +ENST00000357485 +ENST00000357500 +ENST00000357503 +ENST00000357529 +ENST00000357559 +ENST00000357586 +ENST00000357628 +ENST00000357635 +ENST00000357637 +ENST00000357640 +ENST00000357666 +ENST00000357668 +ENST00000357681 +ENST00000357700 +ENST00000357702 +ENST00000357727 +ENST00000357736 +ENST00000357742 +ENST00000357743 +ENST00000357749 +ENST00000357765 +ENST00000357799 +ENST00000357814 +ENST00000357847 +ENST00000357849 +ENST00000357877 +ENST00000357901 +ENST00000357949 +ENST00000357967 +ENST00000357988 +ENST00000357992 +ENST00000357997 +ENST00000358007 +ENST00000358011 +ENST00000358015 +ENST00000358022 +ENST00000358025 +ENST00000358056 +ENST00000358065 +ENST00000358075 +ENST00000358102 +ENST00000358117 +ENST00000358149 +ENST00000358173 +ENST00000358184 +ENST00000358201 +ENST00000358204 +ENST00000358215 +ENST00000358220 +ENST00000358227 +ENST00000358230 +ENST00000358273 +ENST00000358278 +ENST00000358290 +ENST00000358296 +ENST00000358303 +ENST00000358321 +ENST00000358337 +ENST00000358344 +ENST00000358350 +ENST00000358365 +ENST00000358368 +ENST00000358369 +ENST00000358372 +ENST00000358385 +ENST00000358387 +ENST00000358430 +ENST00000358431 +ENST00000358432 +ENST00000358435 +ENST00000358465 +ENST00000358485 +ENST00000358491 +ENST00000358495 +ENST00000358514 +ENST00000358531 +ENST00000358536 +ENST00000358572 +ENST00000358595 +ENST00000358602 +ENST00000358607 +ENST00000358625 +ENST00000358647 +ENST00000358658 +ENST00000358664 +ENST00000358666 +ENST00000358671 +ENST00000358689 +ENST00000358691 +ENST00000358697 +ENST00000358701 +ENST00000358704 +ENST00000358746 +ENST00000358752 +ENST00000358755 +ENST00000358776 +ENST00000358780 +ENST00000358791 +ENST00000358807 +ENST00000358812 +ENST00000358813 +ENST00000358823 +ENST00000358849 +ENST00000358867 +ENST00000358869 +ENST00000358901 +ENST00000358912 +ENST00000358933 +ENST00000358935 +ENST00000358951 +ENST00000359013 +ENST00000359015 +ENST00000359032 +ENST00000359039 +ENST00000359042 +ENST00000359052 +ENST00000359062 +ENST00000359114 +ENST00000359154 +ENST00000359156 +ENST00000359195 +ENST00000359204 +ENST00000359209 +ENST00000359232 +ENST00000359236 +ENST00000359242 +ENST00000359246 +ENST00000359263 +ENST00000359314 +ENST00000359315 +ENST00000359332 +ENST00000359376 +ENST00000359428 +ENST00000359429 +ENST00000359435 +ENST00000359462 +ENST00000359467 +ENST00000359470 +ENST00000359520 +ENST00000359523 +ENST00000359526 +ENST00000359530 +ENST00000359534 +ENST00000359541 +ENST00000359568 +ENST00000359579 +ENST00000359591 +ENST00000359593 +ENST00000359595 +ENST00000359600 +ENST00000359623 +ENST00000359626 +ENST00000359651 +ENST00000359653 +ENST00000359655 +ENST00000359676 +ENST00000359678 +ENST00000359741 +ENST00000359744 +ENST00000359775 +ENST00000359785 +ENST00000359786 +ENST00000359788 +ENST00000359798 +ENST00000359842 +ENST00000359863 +ENST00000359864 +ENST00000359866 +ENST00000359878 +ENST00000359890 +ENST00000359904 +ENST00000359930 +ENST00000359933 +ENST00000359943 +ENST00000359947 +ENST00000359971 +ENST00000360001 +ENST00000360003 +ENST00000360004 +ENST00000360009 +ENST00000360039 +ENST00000360057 +ENST00000360110 +ENST00000360121 +ENST00000360128 +ENST00000360131 +ENST00000360141 +ENST00000360150 +ENST00000360168 +ENST00000360184 +ENST00000360240 +ENST00000360256 +ENST00000360264 +ENST00000360270 +ENST00000360280 +ENST00000360299 +ENST00000360304 +ENST00000360310 +ENST00000360311 +ENST00000360321 +ENST00000360325 +ENST00000360356 +ENST00000360359 +ENST00000360375 +ENST00000360403 +ENST00000360409 +ENST00000360416 +ENST00000360465 +ENST00000360467 +ENST00000360468 +ENST00000360472 +ENST00000360526 +ENST00000360534 +ENST00000360535 +ENST00000360538 +ENST00000360540 +ENST00000360541 +ENST00000360565 +ENST00000360579 +ENST00000360586 +ENST00000360612 +ENST00000360614 +ENST00000360635 +ENST00000360647 +ENST00000360652 +ENST00000360689 +ENST00000360768 +ENST00000360779 +ENST00000360803 +ENST00000360814 +ENST00000360820 +ENST00000360840 +ENST00000360876 +ENST00000360900 +ENST00000360943 +ENST00000360961 +ENST00000360962 +ENST00000360971 +ENST00000360982 +ENST00000360986 +ENST00000361005 +ENST00000361050 +ENST00000361055 +ENST00000361069 +ENST00000361070 +ENST00000361084 +ENST00000361085 +ENST00000361092 +ENST00000361099 +ENST00000361101 +ENST00000361113 +ENST00000361114 +ENST00000361115 +ENST00000361121 +ENST00000361127 +ENST00000361138 +ENST00000361168 +ENST00000361170 +ENST00000361171 +ENST00000361183 +ENST00000361189 +ENST00000361193 +ENST00000361204 +ENST00000361216 +ENST00000361217 +ENST00000361221 +ENST00000361246 +ENST00000361247 +ENST00000361256 +ENST00000361264 +ENST00000361271 +ENST00000361272 +ENST00000361283 +ENST00000361288 +ENST00000361297 +ENST00000361309 +ENST00000361314 +ENST00000361328 +ENST00000361337 +ENST00000361357 +ENST00000361361 +ENST00000361362 +ENST00000361365 +ENST00000361367 +ENST00000361383 +ENST00000361384 +ENST00000361413 +ENST00000361421 +ENST00000361427 +ENST00000361428 +ENST00000361432 +ENST00000361436 +ENST00000361439 +ENST00000361441 +ENST00000361445 +ENST00000361464 +ENST00000361470 +ENST00000361475 +ENST00000361478 +ENST00000361479 +ENST00000361505 +ENST00000361507 +ENST00000361518 +ENST00000361523 +ENST00000361524 +ENST00000361531 +ENST00000361547 +ENST00000361565 +ENST00000361566 +ENST00000361574 +ENST00000361575 +ENST00000361580 +ENST00000361582 +ENST00000361605 +ENST00000361611 +ENST00000361618 +ENST00000361627 +ENST00000361640 +ENST00000361641 +ENST00000361642 +ENST00000361671 +ENST00000361673 +ENST00000361675 +ENST00000361677 +ENST00000361682 +ENST00000361717 +ENST00000361720 +ENST00000361722 +ENST00000361729 +ENST00000361731 +ENST00000361735 +ENST00000361738 +ENST00000361740 +ENST00000361752 +ENST00000361763 +ENST00000361771 +ENST00000361786 +ENST00000361802 +ENST00000361804 +ENST00000361807 +ENST00000361813 +ENST00000361822 +ENST00000361840 +ENST00000361842 +ENST00000361866 +ENST00000361871 +ENST00000361875 +ENST00000361891 +ENST00000361906 +ENST00000361908 +ENST00000361923 +ENST00000361937 +ENST00000361951 +ENST00000361952 +ENST00000361970 +ENST00000361972 +ENST00000361976 +ENST00000361983 +ENST00000362003 +ENST00000362007 +ENST00000362010 +ENST00000362012 +ENST00000362021 +ENST00000362031 +ENST00000362032 +ENST00000362034 +ENST00000362042 +ENST00000362063 +ENST00000362065 +ENST00000362089 +ENST00000366472 +ENST00000366481 +ENST00000366503 +ENST00000366510 +ENST00000366513 +ENST00000366514 +ENST00000366523 +ENST00000366535 +ENST00000366539 +ENST00000366541 +ENST00000366542 +ENST00000366553 +ENST00000366554 +ENST00000366559 +ENST00000366560 +ENST00000366574 +ENST00000366577 +ENST00000366582 +ENST00000366592 +ENST00000366600 +ENST00000366601 +ENST00000366607 +ENST00000366609 +ENST00000366613 +ENST00000366621 +ENST00000366624 +ENST00000366628 +ENST00000366630 +ENST00000366639 +ENST00000366641 +ENST00000366647 +ENST00000366649 +ENST00000366661 +ENST00000366663 +ENST00000366669 +ENST00000366672 +ENST00000366684 +ENST00000366690 +ENST00000366691 +ENST00000366695 +ENST00000366714 +ENST00000366728 +ENST00000366769 +ENST00000366773 +ENST00000366779 +ENST00000366783 +ENST00000366787 +ENST00000366794 +ENST00000366795 +ENST00000366812 +ENST00000366813 +ENST00000366835 +ENST00000366837 +ENST00000366844 +ENST00000366862 +ENST00000366872 +ENST00000366899 +ENST00000366910 +ENST00000366913 +ENST00000366917 +ENST00000366923 +ENST00000366928 +ENST00000366932 +ENST00000366935 +ENST00000366955 +ENST00000366956 +ENST00000366957 +ENST00000366958 +ENST00000366960 +ENST00000366962 +ENST00000366971 +ENST00000366977 +ENST00000366988 +ENST00000366991 +ENST00000366994 +ENST00000366997 +ENST00000366999 +ENST00000367021 +ENST00000367029 +ENST00000367033 +ENST00000367034 +ENST00000367048 +ENST00000367066 +ENST00000367070 +ENST00000367075 +ENST00000367080 +ENST00000367089 +ENST00000367090 +ENST00000367091 +ENST00000367097 +ENST00000367103 +ENST00000367104 +ENST00000367109 +ENST00000367128 +ENST00000367137 +ENST00000367139 +ENST00000367142 +ENST00000367145 +ENST00000367157 +ENST00000367162 +ENST00000367166 +ENST00000367178 +ENST00000367182 +ENST00000367187 +ENST00000367188 +ENST00000367202 +ENST00000367204 +ENST00000367233 +ENST00000367242 +ENST00000367249 +ENST00000367255 +ENST00000367261 +ENST00000367262 +ENST00000367274 +ENST00000367287 +ENST00000367294 +ENST00000367303 +ENST00000367306 +ENST00000367311 +ENST00000367339 +ENST00000367362 +ENST00000367384 +ENST00000367385 +ENST00000367405 +ENST00000367409 +ENST00000367411 +ENST00000367419 +ENST00000367434 +ENST00000367435 +ENST00000367455 +ENST00000367459 +ENST00000367460 +ENST00000367462 +ENST00000367463 +ENST00000367466 +ENST00000367467 +ENST00000367468 +ENST00000367478 +ENST00000367495 +ENST00000367498 +ENST00000367500 +ENST00000367505 +ENST00000367506 +ENST00000367510 +ENST00000367511 +ENST00000367535 +ENST00000367549 +ENST00000367553 +ENST00000367558 +ENST00000367559 +ENST00000367568 +ENST00000367569 +ENST00000367576 +ENST00000367577 +ENST00000367580 +ENST00000367590 +ENST00000367591 +ENST00000367595 +ENST00000367602 +ENST00000367603 +ENST00000367607 +ENST00000367609 +ENST00000367612 +ENST00000367619 +ENST00000367627 +ENST00000367635 +ENST00000367649 +ENST00000367651 +ENST00000367658 +ENST00000367660 +ENST00000367669 +ENST00000367679 +ENST00000367696 +ENST00000367701 +ENST00000367739 +ENST00000367749 +ENST00000367755 +ENST00000367763 +ENST00000367772 +ENST00000367797 +ENST00000367808 +ENST00000367811 +ENST00000367816 +ENST00000367818 +ENST00000367819 +ENST00000367833 +ENST00000367840 +ENST00000367846 +ENST00000367854 +ENST00000367866 +ENST00000367874 +ENST00000367875 +ENST00000367879 +ENST00000367882 +ENST00000367889 +ENST00000367895 +ENST00000367922 +ENST00000367926 +ENST00000367941 +ENST00000367942 +ENST00000367943 +ENST00000367963 +ENST00000367975 +ENST00000367976 +ENST00000367988 +ENST00000367993 +ENST00000367999 +ENST00000368002 +ENST00000368003 +ENST00000368006 +ENST00000368009 +ENST00000368010 +ENST00000368012 +ENST00000368013 +ENST00000368021 +ENST00000368026 +ENST00000368043 +ENST00000368046 +ENST00000368057 +ENST00000368061 +ENST00000368068 +ENST00000368069 +ENST00000368072 +ENST00000368073 +ENST00000368086 +ENST00000368090 +ENST00000368097 +ENST00000368107 +ENST00000368115 +ENST00000368121 +ENST00000368130 +ENST00000368131 +ENST00000368140 +ENST00000368141 +ENST00000368149 +ENST00000368192 +ENST00000368194 +ENST00000368206 +ENST00000368216 +ENST00000368222 +ENST00000368223 +ENST00000368235 +ENST00000368285 +ENST00000368300 +ENST00000368305 +ENST00000368309 +ENST00000368321 +ENST00000368322 +ENST00000368324 +ENST00000368328 +ENST00000368336 +ENST00000368352 +ENST00000368357 +ENST00000368364 +ENST00000368378 +ENST00000368399 +ENST00000368404 +ENST00000368407 +ENST00000368408 +ENST00000368440 +ENST00000368455 +ENST00000368457 +ENST00000368463 +ENST00000368467 +ENST00000368468 +ENST00000368474 +ENST00000368485 +ENST00000368488 +ENST00000368489 +ENST00000368494 +ENST00000368498 +ENST00000368521 +ENST00000368547 +ENST00000368552 +ENST00000368564 +ENST00000368567 +ENST00000368575 +ENST00000368576 +ENST00000368594 +ENST00000368605 +ENST00000368607 +ENST00000368608 +ENST00000368633 +ENST00000368636 +ENST00000368644 +ENST00000368648 +ENST00000368654 +ENST00000368655 +ENST00000368656 +ENST00000368662 +ENST00000368680 +ENST00000368685 +ENST00000368694 +ENST00000368702 +ENST00000368716 +ENST00000368720 +ENST00000368733 +ENST00000368738 +ENST00000368759 +ENST00000368797 +ENST00000368811 +ENST00000368830 +ENST00000368836 +ENST00000368842 +ENST00000368845 +ENST00000368847 +ENST00000368849 +ENST00000368851 +ENST00000368865 +ENST00000368868 +ENST00000368875 +ENST00000368884 +ENST00000368885 +ENST00000368886 +ENST00000368908 +ENST00000368910 +ENST00000368911 +ENST00000368918 +ENST00000368921 +ENST00000368924 +ENST00000368926 +ENST00000368931 +ENST00000368932 +ENST00000368947 +ENST00000368977 +ENST00000368984 +ENST00000368985 +ENST00000369002 +ENST00000369023 +ENST00000369026 +ENST00000369037 +ENST00000369043 +ENST00000369046 +ENST00000369064 +ENST00000369066 +ENST00000369068 +ENST00000369075 +ENST00000369076 +ENST00000369085 +ENST00000369093 +ENST00000369096 +ENST00000369102 +ENST00000369103 +ENST00000369109 +ENST00000369110 +ENST00000369124 +ENST00000369130 +ENST00000369144 +ENST00000369146 +ENST00000369151 +ENST00000369155 +ENST00000369162 +ENST00000369163 +ENST00000369168 +ENST00000369183 +ENST00000369209 +ENST00000369239 +ENST00000369244 +ENST00000369248 +ENST00000369258 +ENST00000369278 +ENST00000369287 +ENST00000369295 +ENST00000369301 +ENST00000369303 +ENST00000369306 +ENST00000369314 +ENST00000369329 +ENST00000369367 +ENST00000369393 +ENST00000369405 +ENST00000369406 +ENST00000369409 +ENST00000369415 +ENST00000369443 +ENST00000369448 +ENST00000369449 +ENST00000369452 +ENST00000369454 +ENST00000369462 +ENST00000369466 +ENST00000369478 +ENST00000369483 +ENST00000369485 +ENST00000369489 +ENST00000369498 +ENST00000369503 +ENST00000369519 +ENST00000369528 +ENST00000369534 +ENST00000369535 +ENST00000369536 +ENST00000369541 +ENST00000369550 +ENST00000369552 +ENST00000369558 +ENST00000369563 +ENST00000369569 +ENST00000369577 +ENST00000369583 +ENST00000369603 +ENST00000369604 +ENST00000369622 +ENST00000369660 +ENST00000369681 +ENST00000369682 +ENST00000369702 +ENST00000369705 +ENST00000369709 +ENST00000369713 +ENST00000369722 +ENST00000369724 +ENST00000369727 +ENST00000369732 +ENST00000369747 +ENST00000369755 +ENST00000369762 +ENST00000369763 +ENST00000369769 +ENST00000369792 +ENST00000369795 +ENST00000369797 +ENST00000369798 +ENST00000369799 +ENST00000369816 +ENST00000369836 +ENST00000369838 +ENST00000369839 +ENST00000369842 +ENST00000369847 +ENST00000369850 +ENST00000369851 +ENST00000369870 +ENST00000369878 +ENST00000369880 +ENST00000369886 +ENST00000369893 +ENST00000369902 +ENST00000369905 +ENST00000369909 +ENST00000369916 +ENST00000369937 +ENST00000369939 +ENST00000369940 +ENST00000369966 +ENST00000369977 +ENST00000369980 +ENST00000369982 +ENST00000369983 +ENST00000370008 +ENST00000370025 +ENST00000370032 +ENST00000370033 +ENST00000370035 +ENST00000370053 +ENST00000370056 +ENST00000370109 +ENST00000370110 +ENST00000370112 +ENST00000370114 +ENST00000370132 +ENST00000370141 +ENST00000370151 +ENST00000370152 +ENST00000370155 +ENST00000370179 +ENST00000370187 +ENST00000370192 +ENST00000370202 +ENST00000370205 +ENST00000370206 +ENST00000370211 +ENST00000370214 +ENST00000370220 +ENST00000370238 +ENST00000370244 +ENST00000370251 +ENST00000370272 +ENST00000370274 +ENST00000370277 +ENST00000370282 +ENST00000370298 +ENST00000370310 +ENST00000370315 +ENST00000370321 +ENST00000370331 +ENST00000370339 +ENST00000370345 +ENST00000370355 +ENST00000370360 +ENST00000370372 +ENST00000370377 +ENST00000370396 +ENST00000370397 +ENST00000370406 +ENST00000370435 +ENST00000370440 +ENST00000370449 +ENST00000370454 +ENST00000370455 +ENST00000370466 +ENST00000370473 +ENST00000370474 +ENST00000370475 +ENST00000370476 +ENST00000370481 +ENST00000370487 +ENST00000370489 +ENST00000370495 +ENST00000370500 +ENST00000370508 +ENST00000370509 +ENST00000370521 +ENST00000370526 +ENST00000370544 +ENST00000370548 +ENST00000370550 +ENST00000370557 +ENST00000370574 +ENST00000370575 +ENST00000370577 +ENST00000370580 +ENST00000370589 +ENST00000370597 +ENST00000370608 +ENST00000370626 +ENST00000370629 +ENST00000370630 +ENST00000370631 +ENST00000370641 +ENST00000370651 +ENST00000370654 +ENST00000370685 +ENST00000370693 +ENST00000370706 +ENST00000370733 +ENST00000370747 +ENST00000370751 +ENST00000370752 +ENST00000370759 +ENST00000370763 +ENST00000370766 +ENST00000370768 +ENST00000370775 +ENST00000370784 +ENST00000370791 +ENST00000370793 +ENST00000370801 +ENST00000370812 +ENST00000370823 +ENST00000370828 +ENST00000370867 +ENST00000370873 +ENST00000370888 +ENST00000370902 +ENST00000370920 +ENST00000370938 +ENST00000370940 +ENST00000370944 +ENST00000370950 +ENST00000370952 +ENST00000370963 +ENST00000370978 +ENST00000370981 +ENST00000370982 +ENST00000370986 +ENST00000370992 +ENST00000370995 +ENST00000370996 +ENST00000371019 +ENST00000371026 +ENST00000371065 +ENST00000371068 +ENST00000371069 +ENST00000371072 +ENST00000371084 +ENST00000371088 +ENST00000371108 +ENST00000371113 +ENST00000371122 +ENST00000371139 +ENST00000371141 +ENST00000371142 +ENST00000371153 +ENST00000371158 +ENST00000371199 +ENST00000371204 +ENST00000371207 +ENST00000371208 +ENST00000371217 +ENST00000371222 +ENST00000371224 +ENST00000371226 +ENST00000371244 +ENST00000371269 +ENST00000371276 +ENST00000371279 +ENST00000371281 +ENST00000371316 +ENST00000371361 +ENST00000371370 +ENST00000371374 +ENST00000371380 +ENST00000371384 +ENST00000371410 +ENST00000371419 +ENST00000371421 +ENST00000371429 +ENST00000371437 +ENST00000371442 +ENST00000371443 +ENST00000371460 +ENST00000371470 +ENST00000371471 +ENST00000371477 +ENST00000371485 +ENST00000371486 +ENST00000371497 +ENST00000371514 +ENST00000371521 +ENST00000371522 +ENST00000371538 +ENST00000371552 +ENST00000371554 +ENST00000371558 +ENST00000371568 +ENST00000371571 +ENST00000371579 +ENST00000371588 +ENST00000371589 +ENST00000371601 +ENST00000371610 +ENST00000371614 +ENST00000371620 +ENST00000371621 +ENST00000371626 +ENST00000371627 +ENST00000371655 +ENST00000371666 +ENST00000371692 +ENST00000371696 +ENST00000371711 +ENST00000371712 +ENST00000371717 +ENST00000371733 +ENST00000371738 +ENST00000371753 +ENST00000371756 +ENST00000371764 +ENST00000371790 +ENST00000371795 +ENST00000371804 +ENST00000371817 +ENST00000371818 +ENST00000371826 +ENST00000371833 +ENST00000371856 +ENST00000371873 +ENST00000371877 +ENST00000371901 +ENST00000371917 +ENST00000371923 +ENST00000371926 +ENST00000371930 +ENST00000371941 +ENST00000371942 +ENST00000371946 +ENST00000371953 +ENST00000371959 +ENST00000371964 +ENST00000371974 +ENST00000371975 +ENST00000371989 +ENST00000371996 +ENST00000371998 +ENST00000372003 +ENST00000372014 +ENST00000372022 +ENST00000372025 +ENST00000372027 +ENST00000372037 +ENST00000372040 +ENST00000372042 +ENST00000372050 +ENST00000372070 +ENST00000372073 +ENST00000372090 +ENST00000372108 +ENST00000372114 +ENST00000372133 +ENST00000372134 +ENST00000372146 +ENST00000372172 +ENST00000372181 +ENST00000372190 +ENST00000372192 +ENST00000372201 +ENST00000372207 +ENST00000372211 +ENST00000372216 +ENST00000372224 +ENST00000372227 +ENST00000372228 +ENST00000372236 +ENST00000372237 +ENST00000372257 +ENST00000372264 +ENST00000372271 +ENST00000372285 +ENST00000372289 +ENST00000372318 +ENST00000372330 +ENST00000372336 +ENST00000372343 +ENST00000372348 +ENST00000372358 +ENST00000372371 +ENST00000372383 +ENST00000372389 +ENST00000372391 +ENST00000372396 +ENST00000372409 +ENST00000372422 +ENST00000372435 +ENST00000372447 +ENST00000372458 +ENST00000372466 +ENST00000372469 +ENST00000372476 +ENST00000372479 +ENST00000372484 +ENST00000372491 +ENST00000372517 +ENST00000372518 +ENST00000372521 +ENST00000372523 +ENST00000372524 +ENST00000372525 +ENST00000372530 +ENST00000372538 +ENST00000372546 +ENST00000372548 +ENST00000372561 +ENST00000372564 +ENST00000372565 +ENST00000372569 +ENST00000372577 +ENST00000372586 +ENST00000372621 +ENST00000372622 +ENST00000372642 +ENST00000372645 +ENST00000372648 +ENST00000372661 +ENST00000372663 +ENST00000372685 +ENST00000372692 +ENST00000372699 +ENST00000372703 +ENST00000372706 +ENST00000372710 +ENST00000372715 +ENST00000372718 +ENST00000372728 +ENST00000372733 +ENST00000372739 +ENST00000372748 +ENST00000372759 +ENST00000372764 +ENST00000372771 +ENST00000372797 +ENST00000372806 +ENST00000372813 +ENST00000372827 +ENST00000372829 +ENST00000372830 +ENST00000372833 +ENST00000372836 +ENST00000372838 +ENST00000372839 +ENST00000372841 +ENST00000372852 +ENST00000372858 +ENST00000372868 +ENST00000372874 +ENST00000372890 +ENST00000372899 +ENST00000372902 +ENST00000372904 +ENST00000372919 +ENST00000372922 +ENST00000372936 +ENST00000372945 +ENST00000372950 +ENST00000372969 +ENST00000372970 +ENST00000372972 +ENST00000372977 +ENST00000372991 +ENST00000372994 +ENST00000373001 +ENST00000373004 +ENST00000373014 +ENST00000373019 +ENST00000373024 +ENST00000373030 +ENST00000373036 +ENST00000373044 +ENST00000373053 +ENST00000373055 +ENST00000373062 +ENST00000373068 +ENST00000373075 +ENST00000373078 +ENST00000373079 +ENST00000373087 +ENST00000373095 +ENST00000373116 +ENST00000373129 +ENST00000373151 +ENST00000373165 +ENST00000373166 +ENST00000373173 +ENST00000373176 +ENST00000373178 +ENST00000373189 +ENST00000373191 +ENST00000373202 +ENST00000373203 +ENST00000373204 +ENST00000373210 +ENST00000373212 +ENST00000373218 +ENST00000373232 +ENST00000373233 +ENST00000373237 +ENST00000373242 +ENST00000373243 +ENST00000373247 +ENST00000373255 +ENST00000373257 +ENST00000373264 +ENST00000373275 +ENST00000373284 +ENST00000373290 +ENST00000373298 +ENST00000373304 +ENST00000373312 +ENST00000373313 +ENST00000373316 +ENST00000373327 +ENST00000373330 +ENST00000373337 +ENST00000373344 +ENST00000373358 +ENST00000373365 +ENST00000373371 +ENST00000373383 +ENST00000373408 +ENST00000373433 +ENST00000373451 +ENST00000373452 +ENST00000373456 +ENST00000373464 +ENST00000373475 +ENST00000373477 +ENST00000373489 +ENST00000373491 +ENST00000373493 +ENST00000373509 +ENST00000373517 +ENST00000373534 +ENST00000373538 +ENST00000373548 +ENST00000373555 +ENST00000373573 +ENST00000373578 +ENST00000373580 +ENST00000373585 +ENST00000373586 +ENST00000373602 +ENST00000373605 +ENST00000373609 +ENST00000373616 +ENST00000373624 +ENST00000373625 +ENST00000373647 +ENST00000373659 +ENST00000373664 +ENST00000373669 +ENST00000373670 +ENST00000373672 +ENST00000373699 +ENST00000373703 +ENST00000373713 +ENST00000373714 +ENST00000373715 +ENST00000373719 +ENST00000373731 +ENST00000373758 +ENST00000373768 +ENST00000373783 +ENST00000373789 +ENST00000373795 +ENST00000373812 +ENST00000373818 +ENST00000373825 +ENST00000373830 +ENST00000373836 +ENST00000373840 +ENST00000373842 +ENST00000373855 +ENST00000373871 +ENST00000373874 +ENST00000373886 +ENST00000373887 +ENST00000373894 +ENST00000373896 +ENST00000373910 +ENST00000373912 +ENST00000373921 +ENST00000373930 +ENST00000373932 +ENST00000373935 +ENST00000373943 +ENST00000373944 +ENST00000373953 +ENST00000373960 +ENST00000373980 +ENST00000373991 +ENST00000374005 +ENST00000374011 +ENST00000374012 +ENST00000374022 +ENST00000374023 +ENST00000374037 +ENST00000374050 +ENST00000374076 +ENST00000374078 +ENST00000374080 +ENST00000374094 +ENST00000374103 +ENST00000374114 +ENST00000374135 +ENST00000374145 +ENST00000374168 +ENST00000374171 +ENST00000374183 +ENST00000374193 +ENST00000374198 +ENST00000374202 +ENST00000374206 +ENST00000374212 +ENST00000374213 +ENST00000374232 +ENST00000374242 +ENST00000374259 +ENST00000374266 +ENST00000374270 +ENST00000374271 +ENST00000374274 +ENST00000374279 +ENST00000374282 +ENST00000374293 +ENST00000374296 +ENST00000374332 +ENST00000374338 +ENST00000374343 +ENST00000374358 +ENST00000374362 +ENST00000374379 +ENST00000374385 +ENST00000374391 +ENST00000374399 +ENST00000374403 +ENST00000374431 +ENST00000374450 +ENST00000374466 +ENST00000374467 +ENST00000374479 +ENST00000374490 +ENST00000374492 +ENST00000374497 +ENST00000374500 +ENST00000374514 +ENST00000374517 +ENST00000374518 +ENST00000374530 +ENST00000374541 +ENST00000374542 +ENST00000374550 +ENST00000374561 +ENST00000374580 +ENST00000374586 +ENST00000374616 +ENST00000374618 +ENST00000374632 +ENST00000374639 +ENST00000374642 +ENST00000374647 +ENST00000374656 +ENST00000374662 +ENST00000374672 +ENST00000374677 +ENST00000374685 +ENST00000374690 +ENST00000374692 +ENST00000374694 +ENST00000374695 +ENST00000374704 +ENST00000374720 +ENST00000374736 +ENST00000374741 +ENST00000374759 +ENST00000374762 +ENST00000374767 +ENST00000374789 +ENST00000374810 +ENST00000374811 +ENST00000374837 +ENST00000374839 +ENST00000374840 +ENST00000374855 +ENST00000374859 +ENST00000374865 +ENST00000374866 +ENST00000374882 +ENST00000374888 +ENST00000374893 +ENST00000374899 +ENST00000374900 +ENST00000374902 +ENST00000374943 +ENST00000374975 +ENST00000374980 +ENST00000374987 +ENST00000374994 +ENST00000375001 +ENST00000375011 +ENST00000375040 +ENST00000375048 +ENST00000375050 +ENST00000375068 +ENST00000375071 +ENST00000375078 +ENST00000375094 +ENST00000375119 +ENST00000375120 +ENST00000375128 +ENST00000375135 +ENST00000375142 +ENST00000375147 +ENST00000375180 +ENST00000375203 +ENST00000375213 +ENST00000375234 +ENST00000375241 +ENST00000375244 +ENST00000375249 +ENST00000375254 +ENST00000375255 +ENST00000375256 +ENST00000375263 +ENST00000375299 +ENST00000375341 +ENST00000375344 +ENST00000375370 +ENST00000375377 +ENST00000375394 +ENST00000375398 +ENST00000375401 +ENST00000375412 +ENST00000375436 +ENST00000375440 +ENST00000375442 +ENST00000375446 +ENST00000375464 +ENST00000375472 +ENST00000375482 +ENST00000375486 +ENST00000375499 +ENST00000375541 +ENST00000375549 +ENST00000375550 +ENST00000375559 +ENST00000375571 +ENST00000375592 +ENST00000375599 +ENST00000375631 +ENST00000375643 +ENST00000375650 +ENST00000375651 +ENST00000375661 +ENST00000375687 +ENST00000375706 +ENST00000375708 +ENST00000375712 +ENST00000375734 +ENST00000375736 +ENST00000375743 +ENST00000375749 +ENST00000375754 +ENST00000375759 +ENST00000375766 +ENST00000375799 +ENST00000375807 +ENST00000375820 +ENST00000375847 +ENST00000375852 +ENST00000375856 +ENST00000375859 +ENST00000375882 +ENST00000375887 +ENST00000375898 +ENST00000375940 +ENST00000375963 +ENST00000375980 +ENST00000375992 +ENST00000376004 +ENST00000376030 +ENST00000376032 +ENST00000376059 +ENST00000376065 +ENST00000376083 +ENST00000376087 +ENST00000376088 +ENST00000376112 +ENST00000376215 +ENST00000376227 +ENST00000376228 +ENST00000376233 +ENST00000376236 +ENST00000376238 +ENST00000376257 +ENST00000376259 +ENST00000376285 +ENST00000376300 +ENST00000376327 +ENST00000376344 +ENST00000376371 +ENST00000376387 +ENST00000376389 +ENST00000376395 +ENST00000376414 +ENST00000376419 +ENST00000376436 +ENST00000376442 +ENST00000376447 +ENST00000376454 +ENST00000376460 +ENST00000376480 +ENST00000376495 +ENST00000376499 +ENST00000376509 +ENST00000376510 +ENST00000376511 +ENST00000376542 +ENST00000376547 +ENST00000376552 +ENST00000376561 +ENST00000376572 +ENST00000376573 +ENST00000376588 +ENST00000376592 +ENST00000376597 +ENST00000376630 +ENST00000376652 +ENST00000376687 +ENST00000376693 +ENST00000376701 +ENST00000376736 +ENST00000376741 +ENST00000376747 +ENST00000376753 +ENST00000376759 +ENST00000376770 +ENST00000376771 +ENST00000376810 +ENST00000376834 +ENST00000376836 +ENST00000376840 +ENST00000376854 +ENST00000376874 +ENST00000376887 +ENST00000376901 +ENST00000376911 +ENST00000376922 +ENST00000376936 +ENST00000376957 +ENST00000376958 +ENST00000376980 +ENST00000377022 +ENST00000377026 +ENST00000377038 +ENST00000377041 +ENST00000377044 +ENST00000377045 +ENST00000377050 +ENST00000377075 +ENST00000377095 +ENST00000377126 +ENST00000377182 +ENST00000377190 +ENST00000377191 +ENST00000377199 +ENST00000377205 +ENST00000377211 +ENST00000377223 +ENST00000377227 +ENST00000377244 +ENST00000377245 +ENST00000377252 +ENST00000377263 +ENST00000377264 +ENST00000377270 +ENST00000377275 +ENST00000377294 +ENST00000377298 +ENST00000377304 +ENST00000377325 +ENST00000377346 +ENST00000377387 +ENST00000377403 +ENST00000377411 +ENST00000377424 +ENST00000377452 +ENST00000377453 +ENST00000377474 +ENST00000377482 +ENST00000377524 +ENST00000377526 +ENST00000377575 +ENST00000377577 +ENST00000377595 +ENST00000377602 +ENST00000377603 +ENST00000377604 +ENST00000377648 +ENST00000377658 +ENST00000377669 +ENST00000377670 +ENST00000377671 +ENST00000377673 +ENST00000377674 +ENST00000377687 +ENST00000377698 +ENST00000377705 +ENST00000377707 +ENST00000377710 +ENST00000377724 +ENST00000377767 +ENST00000377768 +ENST00000377793 +ENST00000377798 +ENST00000377799 +ENST00000377801 +ENST00000377818 +ENST00000377833 +ENST00000377838 +ENST00000377921 +ENST00000377966 +ENST00000377967 +ENST00000377970 +ENST00000377982 +ENST00000377988 +ENST00000377990 +ENST00000378000 +ENST00000378024 +ENST00000378026 +ENST00000378037 +ENST00000378045 +ENST00000378060 +ENST00000378061 +ENST00000378076 +ENST00000378078 +ENST00000378103 +ENST00000378115 +ENST00000378119 +ENST00000378142 +ENST00000378156 +ENST00000378164 +ENST00000378165 +ENST00000378197 +ENST00000378198 +ENST00000378204 +ENST00000378230 +ENST00000378251 +ENST00000378292 +ENST00000378302 +ENST00000378313 +ENST00000378319 +ENST00000378344 +ENST00000378364 +ENST00000378372 +ENST00000378380 +ENST00000378386 +ENST00000378438 +ENST00000378444 +ENST00000378460 +ENST00000378482 +ENST00000378494 +ENST00000378495 +ENST00000378501 +ENST00000378509 +ENST00000378526 +ENST00000378531 +ENST00000378533 +ENST00000378536 +ENST00000378546 +ENST00000378565 +ENST00000378567 +ENST00000378572 +ENST00000378578 +ENST00000378588 +ENST00000378609 +ENST00000378615 +ENST00000378616 +ENST00000378617 +ENST00000378643 +ENST00000378654 +ENST00000378669 +ENST00000378670 +ENST00000378700 +ENST00000378719 +ENST00000378720 +ENST00000378743 +ENST00000378746 +ENST00000378748 +ENST00000378785 +ENST00000378802 +ENST00000378825 +ENST00000378827 +ENST00000378842 +ENST00000378863 +ENST00000378867 +ENST00000378875 +ENST00000378887 +ENST00000378891 +ENST00000378895 +ENST00000378896 +ENST00000378933 +ENST00000378943 +ENST00000378954 +ENST00000378962 +ENST00000379019 +ENST00000379031 +ENST00000379052 +ENST00000379066 +ENST00000379095 +ENST00000379097 +ENST00000379119 +ENST00000379153 +ENST00000379160 +ENST00000379161 +ENST00000379170 +ENST00000379177 +ENST00000379179 +ENST00000379205 +ENST00000379221 +ENST00000379226 +ENST00000379236 +ENST00000379238 +ENST00000379245 +ENST00000379263 +ENST00000379270 +ENST00000379287 +ENST00000379303 +ENST00000379310 +ENST00000379328 +ENST00000379341 +ENST00000379343 +ENST00000379359 +ENST00000379370 +ENST00000379378 +ENST00000379380 +ENST00000379388 +ENST00000379389 +ENST00000379400 +ENST00000379406 +ENST00000379416 +ENST00000379440 +ENST00000379446 +ENST00000379454 +ENST00000379480 +ENST00000379483 +ENST00000379484 +ENST00000379485 +ENST00000379487 +ENST00000379504 +ENST00000379516 +ENST00000379520 +ENST00000379540 +ENST00000379542 +ENST00000379561 +ENST00000379562 +ENST00000379565 +ENST00000379568 +ENST00000379597 +ENST00000379600 +ENST00000379607 +ENST00000379638 +ENST00000379643 +ENST00000379644 +ENST00000379660 +ENST00000379661 +ENST00000379663 +ENST00000379687 +ENST00000379715 +ENST00000379719 +ENST00000379731 +ENST00000379751 +ENST00000379757 +ENST00000379775 +ENST00000379802 +ENST00000379803 +ENST00000379834 +ENST00000379847 +ENST00000379883 +ENST00000379887 +ENST00000379938 +ENST00000379942 +ENST00000379953 +ENST00000379958 +ENST00000379965 +ENST00000379977 +ENST00000379979 +ENST00000379982 +ENST00000379999 +ENST00000380009 +ENST00000380034 +ENST00000380036 +ENST00000380044 +ENST00000380071 +ENST00000380079 +ENST00000380084 +ENST00000380097 +ENST00000380099 +ENST00000380113 +ENST00000380118 +ENST00000380122 +ENST00000380155 +ENST00000380171 +ENST00000380172 +ENST00000380183 +ENST00000380191 +ENST00000380198 +ENST00000380249 +ENST00000380250 +ENST00000380266 +ENST00000380274 +ENST00000380283 +ENST00000380320 +ENST00000380324 +ENST00000380325 +ENST00000380338 +ENST00000380345 +ENST00000380358 +ENST00000380377 +ENST00000380379 +ENST00000380393 +ENST00000380394 +ENST00000380412 +ENST00000380445 +ENST00000380482 +ENST00000380486 +ENST00000380488 +ENST00000380490 +ENST00000380492 +ENST00000380494 +ENST00000380502 +ENST00000380516 +ENST00000380520 +ENST00000380523 +ENST00000380525 +ENST00000380527 +ENST00000380542 +ENST00000380554 +ENST00000380591 +ENST00000380605 +ENST00000380607 +ENST00000380615 +ENST00000380620 +ENST00000380629 +ENST00000380636 +ENST00000380647 +ENST00000380649 +ENST00000380656 +ENST00000380659 +ENST00000380672 +ENST00000380680 +ENST00000380698 +ENST00000380701 +ENST00000380728 +ENST00000380739 +ENST00000380752 +ENST00000380753 +ENST00000380814 +ENST00000380815 +ENST00000380817 +ENST00000380821 +ENST00000380822 +ENST00000380833 +ENST00000380842 +ENST00000380843 +ENST00000380861 +ENST00000380871 +ENST00000380872 +ENST00000380874 +ENST00000380903 +ENST00000380913 +ENST00000380950 +ENST00000380956 +ENST00000380958 +ENST00000380985 +ENST00000381006 +ENST00000381007 +ENST00000381031 +ENST00000381042 +ENST00000381070 +ENST00000381095 +ENST00000381112 +ENST00000381125 +ENST00000381134 +ENST00000381140 +ENST00000381150 +ENST00000381151 +ENST00000381154 +ENST00000381163 +ENST00000381165 +ENST00000381192 +ENST00000381213 +ENST00000381223 +ENST00000381227 +ENST00000381249 +ENST00000381254 +ENST00000381271 +ENST00000381295 +ENST00000381297 +ENST00000381298 +ENST00000381309 +ENST00000381317 +ENST00000381323 +ENST00000381334 +ENST00000381337 +ENST00000381340 +ENST00000381344 +ENST00000381346 +ENST00000381356 +ENST00000381396 +ENST00000381401 +ENST00000381410 +ENST00000381431 +ENST00000381434 +ENST00000381440 +ENST00000381473 +ENST00000381480 +ENST00000381482 +ENST00000381501 +ENST00000381525 +ENST00000381527 +ENST00000381554 +ENST00000381556 +ENST00000381569 +ENST00000381571 +ENST00000381577 +ENST00000381588 +ENST00000381638 +ENST00000381647 +ENST00000381652 +ENST00000381657 +ENST00000381668 +ENST00000381685 +ENST00000381733 +ENST00000381736 +ENST00000381750 +ENST00000381765 +ENST00000381774 +ENST00000381782 +ENST00000381793 +ENST00000381801 +ENST00000381809 +ENST00000381844 +ENST00000381854 +ENST00000381870 +ENST00000381873 +ENST00000381883 +ENST00000381884 +ENST00000381897 +ENST00000381937 +ENST00000381938 +ENST00000381962 +ENST00000381967 +ENST00000381989 +ENST00000381990 +ENST00000382021 +ENST00000382038 +ENST00000382040 +ENST00000382044 +ENST00000382051 +ENST00000382085 +ENST00000382103 +ENST00000382114 +ENST00000382125 +ENST00000382142 +ENST00000382151 +ENST00000382159 +ENST00000382172 +ENST00000382199 +ENST00000382226 +ENST00000382247 +ENST00000382303 +ENST00000382361 +ENST00000382363 +ENST00000382374 +ENST00000382409 +ENST00000382496 +ENST00000382533 +ENST00000382554 +ENST00000382564 +ENST00000382592 +ENST00000382611 +ENST00000382708 +ENST00000382723 +ENST00000382743 +ENST00000382745 +ENST00000382751 +ENST00000382758 +ENST00000382771 +ENST00000382873 +ENST00000382905 +ENST00000382936 +ENST00000382985 +ENST00000382998 +ENST00000383018 +ENST00000383202 +ENST00000383233 +ENST00000383314 +ENST00000383463 +ENST00000383472 +ENST00000383657 +ENST00000383678 +ENST00000383791 +ENST00000383794 +ENST00000383820 +ENST00000383829 +ENST00000383836 +ENST00000383847 +ENST00000388712 +ENST00000388752 +ENST00000388820 +ENST00000388822 +ENST00000388825 +ENST00000388835 +ENST00000388857 +ENST00000388913 +ENST00000388918 +ENST00000388922 +ENST00000388948 +ENST00000388968 +ENST00000388975 +ENST00000388995 +ENST00000389005 +ENST00000389032 +ENST00000389061 +ENST00000389063 +ENST00000389082 +ENST00000389100 +ENST00000389120 +ENST00000389131 +ENST00000389156 +ENST00000389221 +ENST00000389253 +ENST00000389266 +ENST00000389286 +ENST00000389301 +ENST00000389378 +ENST00000389386 +ENST00000389418 +ENST00000389501 +ENST00000389532 +ENST00000389561 +ENST00000389617 +ENST00000389623 +ENST00000389629 +ENST00000389641 +ENST00000389682 +ENST00000389704 +ENST00000389709 +ENST00000389737 +ENST00000389749 +ENST00000389759 +ENST00000389805 +ENST00000389834 +ENST00000389851 +ENST00000389857 +ENST00000389879 +ENST00000389902 +ENST00000390645 +ENST00000390658 +ENST00000390667 +ENST00000391440 +ENST00000391701 +ENST00000391705 +ENST00000391835 +ENST00000391842 +ENST00000391857 +ENST00000391898 +ENST00000391945 +ENST00000391960 +ENST00000391967 +ENST00000391973 +ENST00000391975 +ENST00000391980 +ENST00000391984 +ENST00000392000 +ENST00000392006 +ENST00000392038 +ENST00000392045 +ENST00000392054 +ENST00000392062 +ENST00000392067 +ENST00000392092 +ENST00000392102 +ENST00000392133 +ENST00000392161 +ENST00000392185 +ENST00000392222 +ENST00000392237 +ENST00000392238 +ENST00000392246 +ENST00000392288 +ENST00000392320 +ENST00000392321 +ENST00000392325 +ENST00000392328 +ENST00000392329 +ENST00000392358 +ENST00000392359 +ENST00000392373 +ENST00000392403 +ENST00000392452 +ENST00000392456 +ENST00000392465 +ENST00000392485 +ENST00000392521 +ENST00000392524 +ENST00000392533 +ENST00000392547 +ENST00000392550 +ENST00000392552 +ENST00000392568 +ENST00000392627 +ENST00000392634 +ENST00000392644 +ENST00000392647 +ENST00000392650 +ENST00000392668 +ENST00000392687 +ENST00000392692 +ENST00000392693 +ENST00000392701 +ENST00000392708 +ENST00000392749 +ENST00000392750 +ENST00000392769 +ENST00000392783 +ENST00000392795 +ENST00000392806 +ENST00000392818 +ENST00000392839 +ENST00000392845 +ENST00000392857 +ENST00000392870 +ENST00000392872 +ENST00000392876 +ENST00000392920 +ENST00000392948 +ENST00000392993 +ENST00000393008 +ENST00000393033 +ENST00000393045 +ENST00000393067 +ENST00000393077 +ENST00000393085 +ENST00000393094 +ENST00000393099 +ENST00000393110 +ENST00000393114 +ENST00000393119 +ENST00000393132 +ENST00000393158 +ENST00000393193 +ENST00000393203 +ENST00000393218 +ENST00000393232 +ENST00000393261 +ENST00000393262 +ENST00000393313 +ENST00000393346 +ENST00000393366 +ENST00000393370 +ENST00000393376 +ENST00000393381 +ENST00000393399 +ENST00000393405 +ENST00000393408 +ENST00000393409 +ENST00000393430 +ENST00000393437 +ENST00000393451 +ENST00000393512 +ENST00000393537 +ENST00000393539 +ENST00000393545 +ENST00000393562 +ENST00000393593 +ENST00000393599 +ENST00000393600 +ENST00000393608 +ENST00000393609 +ENST00000393651 +ENST00000393667 +ENST00000393674 +ENST00000393695 +ENST00000393700 +ENST00000393708 +ENST00000393743 +ENST00000393760 +ENST00000393784 +ENST00000393792 +ENST00000393795 +ENST00000393812 +ENST00000393868 +ENST00000393892 +ENST00000393893 +ENST00000393909 +ENST00000393915 +ENST00000393931 +ENST00000393997 +ENST00000394053 +ENST00000394077 +ENST00000394095 +ENST00000394105 +ENST00000394109 +ENST00000394123 +ENST00000394128 +ENST00000394132 +ENST00000394140 +ENST00000394144 +ENST00000394152 +ENST00000394166 +ENST00000394196 +ENST00000394222 +ENST00000394224 +ENST00000394231 +ENST00000394235 +ENST00000394236 +ENST00000394243 +ENST00000394249 +ENST00000394258 +ENST00000394264 +ENST00000394295 +ENST00000394299 +ENST00000394323 +ENST00000394329 +ENST00000394334 +ENST00000394349 +ENST00000394370 +ENST00000394391 +ENST00000394412 +ENST00000394419 +ENST00000394422 +ENST00000394434 +ENST00000394440 +ENST00000394456 +ENST00000394520 +ENST00000394532 +ENST00000394540 +ENST00000394555 +ENST00000394562 +ENST00000394566 +ENST00000394607 +ENST00000394634 +ENST00000394650 +ENST00000394657 +ENST00000394668 +ENST00000394670 +ENST00000394671 +ENST00000394672 +ENST00000394689 +ENST00000394697 +ENST00000394701 +ENST00000394703 +ENST00000394729 +ENST00000394752 +ENST00000394767 +ENST00000394773 +ENST00000394780 +ENST00000394785 +ENST00000394795 +ENST00000394805 +ENST00000394807 +ENST00000394815 +ENST00000394817 +ENST00000394818 +ENST00000394829 +ENST00000394833 +ENST00000394836 +ENST00000394854 +ENST00000394863 +ENST00000394869 +ENST00000394885 +ENST00000394886 +ENST00000394894 +ENST00000394900 +ENST00000394904 +ENST00000394908 +ENST00000394936 +ENST00000394942 +ENST00000394947 +ENST00000394957 +ENST00000394963 +ENST00000394965 +ENST00000394975 +ENST00000394976 +ENST00000394980 +ENST00000394986 +ENST00000395003 +ENST00000395042 +ENST00000395067 +ENST00000395080 +ENST00000395095 +ENST00000395116 +ENST00000395123 +ENST00000395125 +ENST00000395146 +ENST00000395159 +ENST00000395176 +ENST00000395184 +ENST00000395198 +ENST00000395216 +ENST00000395226 +ENST00000395270 +ENST00000395284 +ENST00000395301 +ENST00000395310 +ENST00000395314 +ENST00000395326 +ENST00000395348 +ENST00000395366 +ENST00000395384 +ENST00000395386 +ENST00000395388 +ENST00000395422 +ENST00000395443 +ENST00000395461 +ENST00000395468 +ENST00000395471 +ENST00000395472 +ENST00000395473 +ENST00000395544 +ENST00000395550 +ENST00000395571 +ENST00000395593 +ENST00000395601 +ENST00000395641 +ENST00000395673 +ENST00000395681 +ENST00000395686 +ENST00000395694 +ENST00000395699 +ENST00000395706 +ENST00000395715 +ENST00000395741 +ENST00000395748 +ENST00000395762 +ENST00000395771 +ENST00000395787 +ENST00000395797 +ENST00000395811 +ENST00000395812 +ENST00000395834 +ENST00000395841 +ENST00000395850 +ENST00000395860 +ENST00000395862 +ENST00000395863 +ENST00000395867 +ENST00000395925 +ENST00000395957 +ENST00000395961 +ENST00000395965 +ENST00000396009 +ENST00000396020 +ENST00000396029 +ENST00000396033 +ENST00000396048 +ENST00000396049 +ENST00000396052 +ENST00000396056 +ENST00000396058 +ENST00000396060 +ENST00000396081 +ENST00000396105 +ENST00000396124 +ENST00000396128 +ENST00000396137 +ENST00000396153 +ENST00000396154 +ENST00000396161 +ENST00000396193 +ENST00000396197 +ENST00000396203 +ENST00000396209 +ENST00000396229 +ENST00000396271 +ENST00000396307 +ENST00000396319 +ENST00000396324 +ENST00000396368 +ENST00000396373 +ENST00000396398 +ENST00000396403 +ENST00000396408 +ENST00000396423 +ENST00000396432 +ENST00000396478 +ENST00000396496 +ENST00000396505 +ENST00000396556 +ENST00000396560 +ENST00000396591 +ENST00000396594 +ENST00000396596 +ENST00000396602 +ENST00000396618 +ENST00000396628 +ENST00000396651 +ENST00000396654 +ENST00000396659 +ENST00000396663 +ENST00000396667 +ENST00000396679 +ENST00000396703 +ENST00000396706 +ENST00000396720 +ENST00000396751 +ENST00000396789 +ENST00000396801 +ENST00000396807 +ENST00000396811 +ENST00000396821 +ENST00000396825 +ENST00000396842 +ENST00000396864 +ENST00000396878 +ENST00000396912 +ENST00000396930 +ENST00000396946 +ENST00000396958 +ENST00000396965 +ENST00000396976 +ENST00000396981 +ENST00000396987 +ENST00000397033 +ENST00000397061 +ENST00000397062 +ENST00000397066 +ENST00000397095 +ENST00000397133 +ENST00000397147 +ENST00000397149 +ENST00000397165 +ENST00000397166 +ENST00000397195 +ENST00000397224 +ENST00000397239 +ENST00000397292 +ENST00000397332 +ENST00000397333 +ENST00000397356 +ENST00000397358 +ENST00000397359 +ENST00000397375 +ENST00000397404 +ENST00000397410 +ENST00000397412 +ENST00000397420 +ENST00000397457 +ENST00000397498 +ENST00000397501 +ENST00000397527 +ENST00000397532 +ENST00000397558 +ENST00000397560 +ENST00000397572 +ENST00000397583 +ENST00000397588 +ENST00000397609 +ENST00000397622 +ENST00000397637 +ENST00000397640 +ENST00000397659 +ENST00000397661 +ENST00000397666 +ENST00000397668 +ENST00000397676 +ENST00000397677 +ENST00000397708 +ENST00000397712 +ENST00000397732 +ENST00000397747 +ENST00000397762 +ENST00000397771 +ENST00000397778 +ENST00000397786 +ENST00000397802 +ENST00000397820 +ENST00000397821 +ENST00000397843 +ENST00000397850 +ENST00000397860 +ENST00000397885 +ENST00000397901 +ENST00000397902 +ENST00000397906 +ENST00000397936 +ENST00000397942 +ENST00000397954 +ENST00000397967 +ENST00000397977 +ENST00000397979 +ENST00000397985 +ENST00000398000 +ENST00000398004 +ENST00000398015 +ENST00000398016 +ENST00000398020 +ENST00000398022 +ENST00000398027 +ENST00000398055 +ENST00000398073 +ENST00000398117 +ENST00000398130 +ENST00000398136 +ENST00000398145 +ENST00000398146 +ENST00000398148 +ENST00000398153 +ENST00000398165 +ENST00000398174 +ENST00000398208 +ENST00000398226 +ENST00000398238 +ENST00000398246 +ENST00000398292 +ENST00000398319 +ENST00000398333 +ENST00000398344 +ENST00000398392 +ENST00000398399 +ENST00000398411 +ENST00000398473 +ENST00000398491 +ENST00000398540 +ENST00000398558 +ENST00000398559 +ENST00000398571 +ENST00000398576 +ENST00000398594 +ENST00000398606 +ENST00000398610 +ENST00000398637 +ENST00000398665 +ENST00000398675 +ENST00000398712 +ENST00000398733 +ENST00000398755 +ENST00000398805 +ENST00000398812 +ENST00000398841 +ENST00000398844 +ENST00000398864 +ENST00000398868 +ENST00000398884 +ENST00000398904 +ENST00000398960 +ENST00000398988 +ENST00000399002 +ENST00000399004 +ENST00000399022 +ENST00000399069 +ENST00000399075 +ENST00000399138 +ENST00000399151 +ENST00000399231 +ENST00000399262 +ENST00000399300 +ENST00000399302 +ENST00000399312 +ENST00000399332 +ENST00000399395 +ENST00000399409 +ENST00000399410 +ENST00000399451 +ENST00000399464 +ENST00000399503 +ENST00000399562 +ENST00000399598 +ENST00000399602 +ENST00000399604 +ENST00000399688 +ENST00000399697 +ENST00000399722 +ENST00000399788 +ENST00000399794 +ENST00000399799 +ENST00000399808 +ENST00000399816 +ENST00000399817 +ENST00000399820 +ENST00000399878 +ENST00000399892 +ENST00000399921 +ENST00000399932 +ENST00000399933 +ENST00000399953 +ENST00000399959 +ENST00000399982 +ENST00000400137 +ENST00000400181 +ENST00000400198 +ENST00000400256 +ENST00000400286 +ENST00000400288 +ENST00000400314 +ENST00000400324 +ENST00000400331 +ENST00000400382 +ENST00000400384 +ENST00000400485 +ENST00000400556 +ENST00000400788 +ENST00000400809 +ENST00000400822 +ENST00000400889 +ENST00000400930 +ENST00000401041 +ENST00000401053 +ENST00000401061 +ENST00000401073 +ENST00000401088 +ENST00000401533 +ENST00000401558 +ENST00000401592 +ENST00000401604 +ENST00000401642 +ENST00000401695 +ENST00000401707 +ENST00000401827 +ENST00000401867 +ENST00000401878 +ENST00000401950 +ENST00000401959 +ENST00000402010 +ENST00000402038 +ENST00000402050 +ENST00000402077 +ENST00000402135 +ENST00000402157 +ENST00000402198 +ENST00000402291 +ENST00000402377 +ENST00000402384 +ENST00000402394 +ENST00000402418 +ENST00000402673 +ENST00000402676 +ENST00000402685 +ENST00000402693 +ENST00000402696 +ENST00000402738 +ENST00000402744 +ENST00000402859 +ENST00000402868 +ENST00000402924 +ENST00000403050 +ENST00000403245 +ENST00000403263 +ENST00000403359 +ENST00000403593 +ENST00000403625 +ENST00000403633 +ENST00000403662 +ENST00000403687 +ENST00000403714 +ENST00000403729 +ENST00000403766 +ENST00000403825 +ENST00000403892 +ENST00000403906 +ENST00000404125 +ENST00000404249 +ENST00000404338 +ENST00000404366 +ENST00000404488 +ENST00000404767 +ENST00000404792 +ENST00000404801 +ENST00000404816 +ENST00000404914 +ENST00000404922 +ENST00000404933 +ENST00000405018 +ENST00000405154 +ENST00000405159 +ENST00000405201 +ENST00000405303 +ENST00000405308 +ENST00000405315 +ENST00000405375 +ENST00000405557 +ENST00000405666 +ENST00000405709 +ENST00000405805 +ENST00000405858 +ENST00000405977 +ENST00000406189 +ENST00000406246 +ENST00000406360 +ENST00000406386 +ENST00000406396 +ENST00000406427 +ENST00000406438 +ENST00000406452 +ENST00000406462 +ENST00000406477 +ENST00000406686 +ENST00000406697 +ENST00000406829 +ENST00000406855 +ENST00000406870 +ENST00000406875 +ENST00000406877 +ENST00000406902 +ENST00000406925 +ENST00000406938 +ENST00000406961 +ENST00000407008 +ENST00000407242 +ENST00000407249 +ENST00000407280 +ENST00000407315 +ENST00000407364 +ENST00000407418 +ENST00000407426 +ENST00000407471 +ENST00000407540 +ENST00000407558 +ENST00000407559 +ENST00000407627 +ENST00000407690 +ENST00000407693 +ENST00000407775 +ENST00000407997 +ENST00000408011 +ENST00000408888 +ENST00000408901 +ENST00000408923 +ENST00000408925 +ENST00000408937 +ENST00000408939 +ENST00000408946 +ENST00000408953 +ENST00000408954 +ENST00000408957 +ENST00000408965 +ENST00000408968 +ENST00000409003 +ENST00000409012 +ENST00000409018 +ENST00000409020 +ENST00000409028 +ENST00000409031 +ENST00000409074 +ENST00000409080 +ENST00000409134 +ENST00000409150 +ENST00000409155 +ENST00000409158 +ENST00000409185 +ENST00000409202 +ENST00000409248 +ENST00000409261 +ENST00000409262 +ENST00000409293 +ENST00000409299 +ENST00000409333 +ENST00000409379 +ENST00000409418 +ENST00000409441 +ENST00000409502 +ENST00000409535 +ENST00000409548 +ENST00000409573 +ENST00000409587 +ENST00000409618 +ENST00000409636 +ENST00000409638 +ENST00000409644 +ENST00000409645 +ENST00000409652 +ENST00000409668 +ENST00000409672 +ENST00000409682 +ENST00000409687 +ENST00000409690 +ENST00000409746 +ENST00000409757 +ENST00000409784 +ENST00000409785 +ENST00000409790 +ENST00000409792 +ENST00000409817 +ENST00000409855 +ENST00000409858 +ENST00000409883 +ENST00000409900 +ENST00000409919 +ENST00000409936 +ENST00000409939 +ENST00000409947 +ENST00000409959 +ENST00000409960 +ENST00000409998 +ENST00000410014 +ENST00000410020 +ENST00000410022 +ENST00000410053 +ENST00000410062 +ENST00000410080 +ENST00000410111 +ENST00000411432 +ENST00000411486 +ENST00000411543 +ENST00000411850 +ENST00000411948 +ENST00000412036 +ENST00000412157 +ENST00000412331 +ENST00000412368 +ENST00000412477 +ENST00000412531 +ENST00000412585 +ENST00000412723 +ENST00000412770 +ENST00000412830 +ENST00000412916 +ENST00000413052 +ENST00000413272 +ENST00000413330 +ENST00000413366 +ENST00000413473 +ENST00000413566 +ENST00000413687 +ENST00000413817 +ENST00000413834 +ENST00000414202 +ENST00000414262 +ENST00000414423 +ENST00000414487 +ENST00000414645 +ENST00000414706 +ENST00000414716 +ENST00000414820 +ENST00000415050 +ENST00000415083 +ENST00000415229 +ENST00000415431 +ENST00000415673 +ENST00000415822 +ENST00000415913 +ENST00000415914 +ENST00000415922 +ENST00000415930 +ENST00000415954 +ENST00000416007 +ENST00000416165 +ENST00000416274 +ENST00000416614 +ENST00000416904 +ENST00000417098 +ENST00000417201 +ENST00000417314 +ENST00000417535 +ENST00000417564 +ENST00000417647 +ENST00000417717 +ENST00000417816 +ENST00000417961 +ENST00000418107 +ENST00000418109 +ENST00000418115 +ENST00000418153 +ENST00000418265 +ENST00000418331 +ENST00000418381 +ENST00000418458 +ENST00000418460 +ENST00000418476 +ENST00000418543 +ENST00000418577 +ENST00000418596 +ENST00000418600 +ENST00000418814 +ENST00000418929 +ENST00000418931 +ENST00000418988 +ENST00000419065 +ENST00000419198 +ENST00000419234 +ENST00000419277 +ENST00000419304 +ENST00000419308 +ENST00000419348 +ENST00000419445 +ENST00000419735 +ENST00000419783 +ENST00000419869 +ENST00000419880 +ENST00000419916 +ENST00000420283 +ENST00000420323 +ENST00000420353 +ENST00000420470 +ENST00000420554 +ENST00000420607 +ENST00000420613 +ENST00000420696 +ENST00000420699 +ENST00000420799 +ENST00000420826 +ENST00000420843 +ENST00000420886 +ENST00000420999 +ENST00000421176 +ENST00000421239 +ENST00000421367 +ENST00000421699 +ENST00000421745 +ENST00000421807 +ENST00000421812 +ENST00000421832 +ENST00000421852 +ENST00000421865 +ENST00000421967 +ENST00000421999 +ENST00000422003 +ENST00000422318 +ENST00000422424 +ENST00000422440 +ENST00000422514 +ENST00000422689 +ENST00000422728 +ENST00000422843 +ENST00000422945 +ENST00000422989 +ENST00000423014 +ENST00000423059 +ENST00000423302 +ENST00000423484 +ENST00000423485 +ENST00000423516 +ENST00000423557 +ENST00000423656 +ENST00000423777 +ENST00000423828 +ENST00000423833 +ENST00000423902 +ENST00000423947 +ENST00000424014 +ENST00000424120 +ENST00000424280 +ENST00000424479 +ENST00000424542 +ENST00000424576 +ENST00000424789 +ENST00000425042 +ENST00000425133 +ENST00000425175 +ENST00000425232 +ENST00000425280 +ENST00000425354 +ENST00000425368 +ENST00000425380 +ENST00000425441 +ENST00000425468 +ENST00000425528 +ENST00000425538 +ENST00000425611 +ENST00000425708 +ENST00000425753 +ENST00000425825 +ENST00000425876 +ENST00000425967 +ENST00000426077 +ENST00000426126 +ENST00000426216 +ENST00000426263 +ENST00000426333 +ENST00000426398 +ENST00000426508 +ENST00000426546 +ENST00000426548 +ENST00000426633 +ENST00000426739 +ENST00000427025 +ENST00000427060 +ENST00000427159 +ENST00000427177 +ENST00000427401 +ENST00000427569 +ENST00000427575 +ENST00000427587 +ENST00000427683 +ENST00000427704 +ENST00000427716 +ENST00000427738 +ENST00000427836 +ENST00000427980 +ENST00000428046 +ENST00000428135 +ENST00000428149 +ENST00000428202 +ENST00000428216 +ENST00000428304 +ENST00000428443 +ENST00000428559 +ENST00000428670 +ENST00000428675 +ENST00000428726 +ENST00000428826 +ENST00000428879 +ENST00000428931 +ENST00000428956 +ENST00000429149 +ENST00000429154 +ENST00000429205 +ENST00000429260 +ENST00000429277 +ENST00000429344 +ENST00000429538 +ENST00000429584 +ENST00000429586 +ENST00000429604 +ENST00000429644 +ENST00000429709 +ENST00000429711 +ENST00000429722 +ENST00000429772 +ENST00000429976 +ENST00000430046 +ENST00000430069 +ENST00000430070 +ENST00000430082 +ENST00000430249 +ENST00000430256 +ENST00000430297 +ENST00000430334 +ENST00000430365 +ENST00000430385 +ENST00000430430 +ENST00000430580 +ENST00000430889 +ENST00000430969 +ENST00000431156 +ENST00000431206 +ENST00000431232 +ENST00000431350 +ENST00000431561 +ENST00000431635 +ENST00000431802 +ENST00000431828 +ENST00000431843 +ENST00000431877 +ENST00000431975 +ENST00000432126 +ENST00000432329 +ENST00000432561 +ENST00000432564 +ENST00000432605 +ENST00000432641 +ENST00000432648 +ENST00000432825 +ENST00000432901 +ENST00000432992 +ENST00000432999 +ENST00000433034 +ENST00000433060 +ENST00000433197 +ENST00000433351 +ENST00000433389 +ENST00000433473 +ENST00000433529 +ENST00000433642 +ENST00000433866 +ENST00000433867 +ENST00000433922 +ENST00000433976 +ENST00000433985 +ENST00000434032 +ENST00000434316 +ENST00000434354 +ENST00000434415 +ENST00000434600 +ENST00000434634 +ENST00000434715 +ENST00000434724 +ENST00000434748 +ENST00000434752 +ENST00000434772 +ENST00000435030 +ENST00000435041 +ENST00000435070 +ENST00000435159 +ENST00000435205 +ENST00000435224 +ENST00000435363 +ENST00000435364 +ENST00000435456 +ENST00000435504 +ENST00000435506 +ENST00000435532 +ENST00000435564 +ENST00000435634 +ENST00000435680 +ENST00000435706 +ENST00000435765 +ENST00000435817 +ENST00000435819 +ENST00000435962 +ENST00000435989 +ENST00000436063 +ENST00000436066 +ENST00000436087 +ENST00000436120 +ENST00000436587 +ENST00000436636 +ENST00000436639 +ENST00000436693 +ENST00000436784 +ENST00000436874 +ENST00000436881 +ENST00000436909 +ENST00000437043 +ENST00000437048 +ENST00000437150 +ENST00000437198 +ENST00000437590 +ENST00000437633 +ENST00000437809 +ENST00000438146 +ENST00000438323 +ENST00000438331 +ENST00000438419 +ENST00000438447 +ENST00000438528 +ENST00000438552 +ENST00000438576 +ENST00000438607 +ENST00000438763 +ENST00000438796 +ENST00000438911 +ENST00000439040 +ENST00000439151 +ENST00000439174 +ENST00000439211 +ENST00000439326 +ENST00000439461 +ENST00000439502 +ENST00000439602 +ENST00000439696 +ENST00000439977 +ENST00000439986 +ENST00000440232 +ENST00000440314 +ENST00000440859 +ENST00000440863 +ENST00000440944 +ENST00000440973 +ENST00000441174 +ENST00000441222 +ENST00000441248 +ENST00000441310 +ENST00000441448 +ENST00000441463 +ENST00000441493 +ENST00000441607 +ENST00000441626 +ENST00000441802 +ENST00000441843 +ENST00000442011 +ENST00000442034 +ENST00000442196 +ENST00000442218 +ENST00000442241 +ENST00000442253 +ENST00000442267 +ENST00000442312 +ENST00000442325 +ENST00000442510 +ENST00000442561 +ENST00000442628 +ENST00000442697 +ENST00000442738 +ENST00000442744 +ENST00000442832 +ENST00000442977 +ENST00000443035 +ENST00000443185 +ENST00000443236 +ENST00000443527 +ENST00000443585 +ENST00000443617 +ENST00000443649 +ENST00000443824 +ENST00000443950 +ENST00000443980 +ENST00000444129 +ENST00000444149 +ENST00000444313 +ENST00000444449 +ENST00000444610 +ENST00000444614 +ENST00000444766 +ENST00000445061 +ENST00000445193 +ENST00000445217 +ENST00000445355 +ENST00000445409 +ENST00000445478 +ENST00000445716 +ENST00000445726 +ENST00000445902 +ENST00000446023 +ENST00000446113 +ENST00000446176 +ENST00000446197 +ENST00000446231 +ENST00000446248 +ENST00000446293 +ENST00000446378 +ENST00000446526 +ENST00000447079 +ENST00000447102 +ENST00000447110 +ENST00000447266 +ENST00000447411 +ENST00000447601 +ENST00000447630 +ENST00000447648 +ENST00000447750 +ENST00000447887 +ENST00000447944 +ENST00000448048 +ENST00000448105 +ENST00000448108 +ENST00000448116 +ENST00000448223 +ENST00000448276 +ENST00000448493 +ENST00000448552 +ENST00000448612 +ENST00000448803 +ENST00000448903 +ENST00000449076 +ENST00000449103 +ENST00000449131 +ENST00000449291 +ENST00000449309 +ENST00000449470 +ENST00000449592 +ENST00000449606 +ENST00000449802 +ENST00000449870 +ENST00000449934 +ENST00000449956 +ENST00000450053 +ENST00000450114 +ENST00000450136 +ENST00000450142 +ENST00000450169 +ENST00000450251 +ENST00000450361 +ENST00000450454 +ENST00000450689 +ENST00000450824 +ENST00000450845 +ENST00000450966 +ENST00000451137 +ENST00000451195 +ENST00000451237 +ENST00000451315 +ENST00000451320 +ENST00000451321 +ENST00000451882 +ENST00000451899 +ENST00000452135 +ENST00000452236 +ENST00000452400 +ENST00000452733 +ENST00000452796 +ENST00000452906 +ENST00000452929 +ENST00000453061 +ENST00000453153 +ENST00000453200 +ENST00000453321 +ENST00000453386 +ENST00000453514 +ENST00000453960 +ENST00000453981 +ENST00000453996 +ENST00000454077 +ENST00000454366 +ENST00000454376 +ENST00000454402 +ENST00000454497 +ENST00000454498 +ENST00000454652 +ENST00000454678 +ENST00000454872 +ENST00000455140 +ENST00000455146 +ENST00000455480 +ENST00000455511 +ENST00000455566 +ENST00000455600 +ENST00000455662 +ENST00000455784 +ENST00000455833 +ENST00000455915 +ENST00000455934 +ENST00000456013 +ENST00000456315 +ENST00000456318 +ENST00000456329 +ENST00000456397 +ENST00000456430 +ENST00000456556 +ENST00000456793 +ENST00000456849 +ENST00000456935 +ENST00000456936 +ENST00000457054 +ENST00000457143 +ENST00000457167 +ENST00000457354 +ENST00000457361 +ENST00000457408 +ENST00000457543 +ENST00000457749 +ENST00000458035 +ENST00000458143 +ENST00000458198 +ENST00000458235 +ENST00000458276 +ENST00000458385 +ENST00000458420 +ENST00000458497 +ENST00000458537 +ENST00000458549 +ENST00000458587 +ENST00000458591 +ENST00000458659 +ENST00000460006 +ENST00000460393 +ENST00000460469 +ENST00000460680 +ENST00000460843 +ENST00000460851 +ENST00000461366 +ENST00000461988 +ENST00000462683 +ENST00000462833 +ENST00000463745 +ENST00000464167 +ENST00000464233 +ENST00000464506 +ENST00000464848 +ENST00000465139 +ENST00000465148 +ENST00000465261 +ENST00000465271 +ENST00000465503 +ENST00000465530 +ENST00000465804 +ENST00000465995 +ENST00000466444 +ENST00000466490 +ENST00000466681 +ENST00000467148 +ENST00000467482 +ENST00000467728 +ENST00000467889 +ENST00000467963 +ENST00000468660 +ENST00000468694 +ENST00000468695 +ENST00000468812 +ENST00000468888 +ENST00000469217 +ENST00000469257 +ENST00000471115 +ENST00000471696 +ENST00000471841 +ENST00000472174 +ENST00000472487 +ENST00000472745 +ENST00000473183 +ENST00000473414 +ENST00000473539 +ENST00000473835 +ENST00000473989 +ENST00000474037 +ENST00000474267 +ENST00000474627 +ENST00000474629 +ENST00000474718 +ENST00000474844 +ENST00000474879 +ENST00000474889 +ENST00000475243 +ENST00000476071 +ENST00000476287 +ENST00000476371 +ENST00000476781 +ENST00000476832 +ENST00000477593 +ENST00000477616 +ENST00000477703 +ENST00000477853 +ENST00000477892 +ENST00000478253 +ENST00000478497 +ENST00000478722 +ENST00000479035 +ENST00000479303 +ENST00000479665 +ENST00000479870 +ENST00000479950 +ENST00000480798 +ENST00000480945 +ENST00000481138 +ENST00000481195 +ENST00000481247 +ENST00000481273 +ENST00000481445 +ENST00000481646 +ENST00000481739 +ENST00000481752 +ENST00000481909 +ENST00000482108 +ENST00000482504 +ENST00000483063 +ENST00000483209 +ENST00000483233 +ENST00000484302 +ENST00000484928 +ENST00000485050 +ENST00000485303 +ENST00000485511 +ENST00000485876 +ENST00000485972 +ENST00000486333 +ENST00000486442 +ENST00000486715 +ENST00000487099 +ENST00000487179 +ENST00000487273 +ENST00000487418 +ENST00000487519 +ENST00000487903 +ENST00000488423 +ENST00000488633 +ENST00000489288 +ENST00000489294 +ENST00000489418 +ENST00000489615 +ENST00000489671 +ENST00000489711 +ENST00000490103 +ENST00000490337 +ENST00000490531 +ENST00000490882 +ENST00000491238 +ENST00000491306 +ENST00000491381 +ENST00000491415 +ENST00000491431 +ENST00000491614 +ENST00000492112 +ENST00000492406 +ENST00000492622 +ENST00000492758 +ENST00000493422 +ENST00000493442 +ENST00000493615 +ENST00000493678 +ENST00000493763 +ENST00000493901 +ENST00000493960 +ENST00000494292 +ENST00000494426 +ENST00000494664 +ENST00000495186 +ENST00000495461 +ENST00000495827 +ENST00000495880 +ENST00000495893 +ENST00000496391 +ENST00000496455 +ENST00000496811 +ENST00000497547 +ENST00000497571 +ENST00000498165 +ENST00000498707 +ENST00000498907 +ENST00000498926 +ENST00000499023 +ENST00000499247 +ENST00000499666 +ENST00000499869 +ENST00000500337 +ENST00000500576 +ENST00000500728 +ENST00000500968 +ENST00000501748 +ENST00000502346 +ENST00000502412 +ENST00000502492 +ENST00000502717 +ENST00000502732 +ENST00000502781 +ENST00000502852 +ENST00000502935 +ENST00000503176 +ENST00000503362 +ENST00000503393 +ENST00000503585 +ENST00000503731 +ENST00000503771 +ENST00000503787 +ENST00000504087 +ENST00000504154 +ENST00000504156 +ENST00000504169 +ENST00000504228 +ENST00000504487 +ENST00000504771 +ENST00000504830 +ENST00000504904 +ENST00000504986 +ENST00000505065 +ENST00000505459 +ENST00000505490 +ENST00000505658 +ENST00000505747 +ENST00000505992 +ENST00000506447 +ENST00000506587 +ENST00000506784 +ENST00000507110 +ENST00000507142 +ENST00000507606 +ENST00000507656 +ENST00000507754 +ENST00000508177 +ENST00000508593 +ENST00000508632 +ENST00000508775 +ENST00000508821 +ENST00000508987 +ENST00000509578 +ENST00000509634 +ENST00000509910 +ENST00000510439 +ENST00000510708 +ENST00000510979 +ENST00000510994 +ENST00000511367 +ENST00000511437 +ENST00000511601 +ENST00000511685 +ENST00000511817 +ENST00000511912 +ENST00000512369 +ENST00000512439 +ENST00000512478 +ENST00000512560 +ENST00000512701 +ENST00000512783 +ENST00000512805 +ENST00000512944 +ENST00000513000 +ENST00000513610 +ENST00000514199 +ENST00000514251 +ENST00000514747 +ENST00000515098 +ENST00000515279 +ENST00000515385 +ENST00000515393 +ENST00000515673 +ENST00000515683 +ENST00000515768 +ENST00000517309 +ENST00000517956 +ENST00000517970 +ENST00000518127 +ENST00000518322 +ENST00000518406 +ENST00000518547 +ENST00000518802 +ENST00000519374 +ENST00000519449 +ENST00000519560 +ENST00000519561 +ENST00000519676 +ENST00000519685 +ENST00000519728 +ENST00000519807 +ENST00000519824 +ENST00000519948 +ENST00000520016 +ENST00000520164 +ENST00000520347 +ENST00000520429 +ENST00000520468 +ENST00000520539 +ENST00000520790 +ENST00000520965 +ENST00000521022 +ENST00000521089 +ENST00000521291 +ENST00000521381 +ENST00000521389 +ENST00000521420 +ENST00000521476 +ENST00000521508 +ENST00000521578 +ENST00000521580 +ENST00000521604 +ENST00000521688 +ENST00000521776 +ENST00000521861 +ENST00000521891 +ENST00000522212 +ENST00000522362 +ENST00000522677 +ENST00000522917 +ENST00000523037 +ENST00000523111 +ENST00000523116 +ENST00000523374 +ENST00000523377 +ENST00000523505 +ENST00000523638 +ENST00000523731 +ENST00000523908 +ENST00000524189 +ENST00000524230 +ENST00000524270 +ENST00000524300 +ENST00000524558 +ENST00000524717 +ENST00000524782 +ENST00000524794 +ENST00000524803 +ENST00000524821 +ENST00000525115 +ENST00000525239 +ENST00000525428 +ENST00000525451 +ENST00000525566 +ENST00000525621 +ENST00000525634 +ENST00000525815 +ENST00000525842 +ENST00000526495 +ENST00000526793 +ENST00000526893 +ENST00000526991 +ENST00000526995 +ENST00000527372 +ENST00000527447 +ENST00000527673 +ENST00000527786 +ENST00000527879 +ENST00000527881 +ENST00000527884 +ENST00000527958 +ENST00000528080 +ENST00000528157 +ENST00000528288 +ENST00000528372 +ENST00000528416 +ENST00000528494 +ENST00000528655 +ENST00000528737 +ENST00000528793 +ENST00000528838 +ENST00000528896 +ENST00000528919 +ENST00000528954 +ENST00000529006 +ENST00000529010 +ENST00000529032 +ENST00000529221 +ENST00000529230 +ENST00000529555 +ENST00000529639 +ENST00000529689 +ENST00000529694 +ENST00000529750 +ENST00000529983 +ENST00000530028 +ENST00000530167 +ENST00000530349 +ENST00000530507 +ENST00000530705 +ENST00000530758 +ENST00000531120 +ENST00000531154 +ENST00000531206 +ENST00000531224 +ENST00000531273 +ENST00000531380 +ENST00000532090 +ENST00000532324 +ENST00000532485 +ENST00000532692 +ENST00000532828 +ENST00000532868 +ENST00000532870 +ENST00000532887 +ENST00000532917 +ENST00000533050 +ENST00000533099 +ENST00000533211 +ENST00000533244 +ENST00000533400 +ENST00000533486 +ENST00000533626 +ENST00000533632 +ENST00000533655 +ENST00000534025 +ENST00000534061 +ENST00000534064 +ENST00000534070 +ENST00000534358 +ENST00000534548 +ENST00000534624 +ENST00000534898 +ENST00000534941 +ENST00000535273 +ENST00000535318 +ENST00000535366 +ENST00000535401 +ENST00000535424 +ENST00000535468 +ENST00000535601 +ENST00000535923 +ENST00000536163 +ENST00000536178 +ENST00000536354 +ENST00000536435 +ENST00000536438 +ENST00000536441 +ENST00000536459 +ENST00000536681 +ENST00000536769 +ENST00000537097 +ENST00000537098 +ENST00000537328 +ENST00000537345 +ENST00000537494 +ENST00000537763 +ENST00000537866 +ENST00000538010 +ENST00000538183 +ENST00000538426 +ENST00000538721 +ENST00000538771 +ENST00000538775 +ENST00000538872 +ENST00000538904 +ENST00000538966 +ENST00000539276 +ENST00000539294 +ENST00000539352 +ENST00000539644 +ENST00000539719 +ENST00000539745 +ENST00000539827 +ENST00000539867 +ENST00000539945 +ENST00000540052 +ENST00000540163 +ENST00000540225 +ENST00000540288 +ENST00000540331 +ENST00000540964 +ENST00000541231 +ENST00000541284 +ENST00000541412 +ENST00000541515 +ENST00000541970 +ENST00000542104 +ENST00000542230 +ENST00000542285 +ENST00000542342 +ENST00000542527 +ENST00000542569 +ENST00000542575 +ENST00000542802 +ENST00000542965 +ENST00000542996 +ENST00000543039 +ENST00000543095 +ENST00000543155 +ENST00000543196 +ENST00000543227 +ENST00000543245 +ENST00000543253 +ENST00000543341 +ENST00000543371 +ENST00000543473 +ENST00000543571 +ENST00000543663 +ENST00000543779 +ENST00000543796 +ENST00000543823 +ENST00000543824 +ENST00000544117 +ENST00000544216 +ENST00000544440 +ENST00000544665 +ENST00000544844 +ENST00000544848 +ENST00000544855 +ENST00000545145 +ENST00000545279 +ENST00000545336 +ENST00000545558 +ENST00000545588 +ENST00000545606 +ENST00000545712 +ENST00000545797 +ENST00000546361 +ENST00000546455 +ENST00000546954 +ENST00000547517 +ENST00000548058 +ENST00000548198 +ENST00000548553 +ENST00000548577 +ENST00000548825 +ENST00000548925 +ENST00000549117 +ENST00000549441 +ENST00000549555 +ENST00000549701 +ENST00000549920 +ENST00000549982 +ENST00000550078 +ENST00000550487 +ENST00000550536 +ENST00000550697 +ENST00000550722 +ENST00000550746 +ENST00000550765 +ENST00000550785 +ENST00000550804 +ENST00000551018 +ENST00000551295 +ENST00000551404 +ENST00000551568 +ENST00000551765 +ENST00000551812 +ENST00000552014 +ENST00000552029 +ENST00000552150 +ENST00000552283 +ENST00000552374 +ENST00000552695 +ENST00000552810 +ENST00000552864 +ENST00000552951 +ENST00000553066 +ENST00000553458 +ENST00000553532 +ENST00000553612 +ENST00000553645 +ENST00000553804 +ENST00000554659 +ENST00000554684 +ENST00000554922 +ENST00000555003 +ENST00000555019 +ENST00000555028 +ENST00000555265 +ENST00000555447 +ENST00000555523 +ENST00000555619 +ENST00000555661 +ENST00000555818 +ENST00000555868 +ENST00000556029 +ENST00000556143 +ENST00000556147 +ENST00000556440 +ENST00000556492 +ENST00000556564 +ENST00000556816 +ENST00000556994 +ENST00000557008 +ENST00000557016 +ENST00000557342 +ENST00000557943 +ENST00000558401 +ENST00000558518 +ENST00000558530 +ENST00000558815 +ENST00000558939 +ENST00000559228 +ENST00000559471 +ENST00000559488 +ENST00000559596 +ENST00000560031 +ENST00000560371 +ENST00000560869 +ENST00000561311 +ENST00000561878 +ENST00000564079 +ENST00000564104 +ENST00000564406 +ENST00000564466 +ENST00000564996 +ENST00000565263 +ENST00000565488 +ENST00000565678 +ENST00000565683 +ENST00000566157 +ENST00000566228 +ENST00000566339 +ENST00000566423 +ENST00000566454 +ENST00000566621 +ENST00000566780 +ENST00000566848 +ENST00000567759 +ENST00000568107 +ENST00000568377 +ENST00000568733 +ENST00000568954 +ENST00000568956 +ENST00000569529 +ENST00000569795 +ENST00000570137 +ENST00000570646 +ENST00000571133 +ENST00000571688 +ENST00000571995 +ENST00000572195 +ENST00000572272 +ENST00000573584 +ENST00000573600 +ENST00000574081 +ENST00000574298 +ENST00000574538 +ENST00000574876 +ENST00000575354 +ENST00000575842 +ENST00000575882 +ENST00000576409 +ENST00000576634 +ENST00000577809 +ENST00000578681 +ENST00000578921 +ENST00000579016 +ENST00000579534 +ENST00000579565 +ENST00000579794 +ENST00000579849 +ENST00000579991 +ENST00000581208 +ENST00000581216 +ENST00000581322 +ENST00000582970 +ENST00000583088 +ENST00000583535 +ENST00000584164 +ENST00000584307 +ENST00000584437 +ENST00000584667 +ENST00000584895 +ENST00000585124 +ENST00000585807 +ENST00000585916 +ENST00000586178 +ENST00000586534 +ENST00000586569 +ENST00000586686 +ENST00000586748 +ENST00000586790 +ENST00000587091 +ENST00000587230 +ENST00000587252 +ENST00000587708 +ENST00000587834 +ENST00000587989 +ENST00000588081 +ENST00000588173 +ENST00000588234 +ENST00000588268 +ENST00000588649 +ENST00000588750 +ENST00000588831 +ENST00000588852 +ENST00000589228 +ENST00000589334 +ENST00000589413 +ENST00000589666 +ENST00000589717 +ENST00000589913 +ENST00000590071 +ENST00000590208 +ENST00000590247 +ENST00000590320 +ENST00000590474 +ENST00000590602 +ENST00000590842 +ENST00000590918 +ENST00000591022 +ENST00000591340 +ENST00000591504 +ENST00000591608 +ENST00000591680 +ENST00000591899 +ENST00000591998 +ENST00000592502 +ENST00000592537 +ENST00000592540 +ENST00000592828 +ENST00000592875 +ENST00000592904 +ENST00000593726 +ENST00000593829 +ENST00000594009 +ENST00000594051 +ENST00000594083 +ENST00000594154 +ENST00000594369 +ENST00000595042 +ENST00000595090 +ENST00000595358 +ENST00000595464 +ENST00000595618 +ENST00000595646 +ENST00000595753 +ENST00000595883 +ENST00000595962 +ENST00000596217 +ENST00000596288 +ENST00000596731 +ENST00000597229 +ENST00000597436 +ENST00000597595 +ENST00000597629 +ENST00000598312 +ENST00000598334 +ENST00000598418 +ENST00000598441 +ENST00000598742 +ENST00000598810 +ENST00000599111 +ENST00000599180 +ENST00000599612 +ENST00000599916 +ENST00000600118 +ENST00000600228 +ENST00000600245 +ENST00000600324 +ENST00000600659 +ENST00000601048 +ENST00000601291 +ENST00000601440 +ENST00000602094 +ENST00000602142 +ENST00000602390 +ENST00000602402 +ENST00000602637 +ENST00000602676 +ENST00000602795 +ENST00000602925 +ENST00000603300 +ENST00000604458 +ENST00000605788 +ENST00000605895 +ENST00000606080 +ENST00000606117 +ENST00000606738 +ENST00000606794 +ENST00000607016 +ENST00000607484 +ENST00000607599 +ENST00000607778 +ENST00000608382 +ENST00000608443 +ENST00000608872 +ENST00000608933 +ENST00000608999 +ENST00000609256 +ENST00000609438 +ENST00000609923 +ENST00000610020 diff --git a/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.chrom b/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.chrom new file mode 100644 index 0000000..97dc394 --- /dev/null +++ b/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.chrom @@ -0,0 +1,639 @@ +1 248956422 +2 242193529 +3 198295559 +4 190214555 +5 181538259 +6 170805979 +7 159345973 +8 145138636 +9 138394717 +10 133797422 +11 135086622 +12 133275309 +13 114364328 +14 107043718 +15 101991189 +16 90338345 +17 83257441 +18 80373285 +19 58617616 +20 64444167 +21 46709983 +22 50818468 +X 156040895 +Y 57227415 +MT 16569 +CHR_HG76_PATCH 144938989 +CHR_HG2365_PATCH 102714182 +CHR_HSCHR15_4_CTG8 102071387 +CHR_HSCHR6_MHC_SSTO_CTG1 170946136 +CHR_HSCHR6_MHC_MCF_CTG1 170976334 +CHR_HSCHR6_MHC_COX_CTG1 170727598 +CHR_HSCHR6_MHC_MANN_CTG1 170959829 +CHR_HSCHR6_MHC_APD_CTG1 170845044 +CHR_HSCHR6_MHC_QBL_CTG1 170734801 +CHR_HSCHR6_MHC_DBB_CTG1 170783898 +CHR_HSCHR17_7_CTG4 83058228 +CHR_HSCHR16_1_CTG1 90426449 +CHR_HSCHR15_6_CTG8 101521929 +CHR_HG926_PATCH 90680781 +CHR_HSCHR17_1_CTG5 83552665 +CHR_HSCHR5_2_CTG1_1 180753562 +CHR_HSCHR14_7_CTG1 107045728 +CHR_HSCHR17_2_CTG5 83086355 +CHR_HSCHR14_3_CTG1 107067894 +CHR_HSCHR5_1_CTG1_1 180863570 +CHR_HSCHR7_2_CTG6 159407160 +CHR_HSCHR19LRC_LRC_J_CTG3_1 58650772 +CHR_HSCHR19_4_CTG3_1 58625731 +CHR_HSCHR19LRC_LRC_S_CTG3_1 58625321 +CHR_HSCHR19LRC_LRC_I_CTG3_1 58623235 +CHR_HG1815_PATCH 133281281 +CHR_HSCHR19LRC_LRC_T_CTG3_1 58561614 +CHR_HSCHR19LRC_COX1_CTG3_1 58546647 +CHR_HSCHR19LRC_PGF1_CTG3_1 58546031 +CHR_HSCHR8_8_CTG1 145123326 +CHR_HSCHR1_3_CTG32_1 248960761 +CHR_HSCHR6_1_CTG8 170810115 +CHR_HSCHR19LRC_PGF2_CTG3_1 58355410 +CHR_HSCHR19LRC_COX2_CTG3_1 58288451 +CHR_HG1_PATCH 107043717 +CHR_HSCHR7_3_CTG4_4 159441130 +CHR_HG30_PATCH 181539112 +CHR_HSCHR8_9_CTG1 144983589 +CHR_HG708_PATCH 159270839 +CHR_HSCHR4_1_CTG9 190096932 +CHR_HSCHR12_3_CTG2 133271566 +CHR_HSCHR4_7_CTG12 190225141 +CHR_HSCHR1_6_CTG3 248955842 +CHR_HG1362_PATCH 133275314 +CHR_HSCHR2_6_CTG7_2 242198149 +CHR_HG2513_PATCH 47068079 +CHR_HG109_PATCH 58617934 +CHR_HG2290_PATCH 242235269 +CHR_HG2263_PATCH 90338583 +CHR_HSCHR15_1_CTG1 101998275 +CHR_HG2266_PATCH 159346106 +CHR_HG1342_HG2282_PATCH 248929249 +CHR_HG1485_PATCH 50915261 +CHR_HG1832_PATCH 248959779 +CHR_HG545_PATCH 133833661 +CHR_HG2066_PATCH 198295555 +CHR_HSCHR9_1_CTG5 138404305 +CHR_HSCHR15_5_CTG8 102070278 +CHR_HSCHR1_1_CTG32_1 248960143 +CHR_HSCHR4_12_CTG12 190221648 +CHR_HG2244_HG2245_PATCH 133797425 +CHR_HG126_PATCH 198295908 +CHR_HG2512_PATCH 50818467 +CHR_HG2236_PATCH 198295537 +CHR_HG2509_PATCH 114364327 +CHR_HSCHR12_2_CTG2 133307257 +CHR_HG2213_PATCH 80377536 +CHR_HG26_PATCH 58617652 +CHR_HG439_PATCH 155960230 +CHR_HG2510_PATCH 107043717 +CHR_HG2511_PATCH 101991188 +CHR_HSCHR17_2_CTG2 83160220 +CHR_HSCHR15_2_CTG8 102003326 +CHR_HSCHR19_1_CTG2 58624032 +CHR_HSCHR4_6_CTG12 190218533 +CHR_HSCHR4_1_CTG6 190224838 +CHR_HSCHR17_1_CTG1 83290495 +CHR_HSCHR8_1_CTG7 145142033 +CHR_HG2235_PATCH 198295655 +CHR_HG2021_PATCH 58632883 +CHR_HG2198_PATCH 101993033 +CHR_HSCHR1_3_CTG31 248967909 +CHR_HG2232_PATCH 242193529 +CHR_HSCHR5_8_CTG1 181668817 +CHR_HG2291_PATCH 114534236 +CHR_HSCHR1_1_CTG3 248968406 +CHR_HSCHR1_4_CTG3 248963886 +CHR_HG2525_PATCH 190293418 +CHR_HG2030_PATCH 138394865 +CHR_HG2002_PATCH 248942227 +CHR_HSCHR15_1_CTG3 101994657 +CHR_HSCHR17_10_CTG4 83359087 +CHR_HSCHR14_1_CTG1 107047377 +CHR_HG1651_PATCH 170779650 +CHR_HSCHR8_5_CTG1 145137619 +CHR_HG2063_PATCH 133275140 +CHR_HSCHR10_1_CTG2 133813485 +CHR_HSCHR13_1_CTG1 114348172 +CHR_HG2022_PATCH 198295941 +CHR_HSCHR8_3_CTG7 145125643 +CHR_HG2095_PATCH 248959131 +CHR_HG2060_PATCH 135086593 +CHR_HSCHR22_1_CTG7 50872732 +CHR_HSCHR3_9_CTG2_1 198302489 +CHR_HSCHR11_2_CTG8 135117433 +CHR_HSCHR8_3_CTG1 145130612 +CHR_HG2246_HG2248_HG2276_PATCH 133274640 +CHR_HSCHR11_1_CTG7 135085484 +CHR_HSCHR15_1_CTG8 102002809 +CHR_HSCHR19KIR_CA01-TB04_CTG3_1 58750420 +CHR_HG1277_PATCH 133754853 +CHR_HSCHR8_1_CTG1 145124952 +CHR_HSCHR18_1_CTG1_1 80380517 +CHR_HSCHRX_1_CTG3 156043585 +CHR_HSCHR8_2_CTG1 145141567 +CHR_HSCHR19KIR_FH05_B_HAP_CTG3_1 58689016 +CHR_HG2285_HG106_HG2252_PATCH 83219555 +CHR_HG2114_PATCH 135091163 +CHR_HSCHR1_5_CTG3 248926662 +CHR_HSCHR17_4_CTG4 83257896 +CHR_HG2191_PATCH 133799479 +CHR_HSCHR17_3_CTG1 83267046 +CHR_HG705_PATCH 190172551 +CHR_HSCHRX_2_CTG3 156039875 +CHR_HSCHR6_1_CTG5 170815302 +CHR_HSCHR7_3_CTG6 159344441 +CHR_HG2471_PATCH 90341128 +CHR_HG28_PATCH 135088641 +CHR_HG2128_PATCH 170811684 +CHR_HSCHR16_4_CTG3_1 90343133 +CHR_HG2068_PATCH 145140411 +CHR_HG2334_PATCH 133797389 +CHR_HSCHR14_9_CTG1 107050362 +CHR_HSCHR22_1_CTG4 50824699 +CHR_HSCHR15_3_CTG3 101993763 +CHR_HSCHR22_1_CTG3 50827573 +CHR_HSCHR1_2_CTG3 248975002 +CHR_HG1309_PATCH 159365091 +CHR_HSCHR19KIR_FH15_B_HAP_CTG3_1 58689284 +CHR_HSCHR3_3_CTG2_1 198300421 +CHR_HSCHR17_11_CTG4 83264946 +CHR_HG2072_PATCH 170816182 +CHR_HSCHR15_3_CTG8 101999716 +CHR_HSCHR4_3_CTG12 190218028 +CHR_HG2057_PATCH 170805979 +CHR_HSCHR19KIR_CA01-TB01_CTG3_1 58645065 +CHR_HSCHR12_4_CTG2 133277582 +CHR_HSCHR4_9_CTG12 190219005 +CHR_HSCHR17_8_CTG4 83258474 +CHR_HG699_PATCH 190211220 +CHR_HSCHR19_3_CTG3_1 58625958 +CHR_HSCHR16_3_CTG1 90340304 +CHR_HG2412_PATCH 80373284 +CHR_HG2023_PATCH 190147504 +CHR_HSCHR8_7_CTG1 145138198 +CHR_HSCHR5_2_CTG1 181547139 +CHR_HSCHR3_4_CTG2_1 198301383 +CHR_HSCHR17_2_CTG4 83263494 +CHR_HSCHR2_4_CTG1 242191076 +CHR_HSCHR19KIR_0019-4656-B_CTG3_1 58675214 +CHR_HSCHR4_1_CTG4 190221757 +CHR_HSCHR11_3_CTG1 135092180 +CHR_HG2115_PATCH 135092089 +CHR_HSCHR19KIR_FH13_BA2_HAP_CTG3_1 58662330 +CHR_HSCHR3_5_CTG1 198305844 +CHR_HSCHR11_2_CTG1_1 135083841 +CHR_HSCHR2_2_CTG7 242223512 +CHR_HSCHR1_5_CTG32_1 248960213 +CHR_HG23_PATCH 133275184 +CHR_HSCHR11_1_CTG8 135088433 +CHR_HSCHR7_1_CTG7 159346281 +CHR_HG1535_PATCH 57187419 +CHR_HSCHR7_2_CTG4_4 159333789 +CHR_HSCHR19KIR_GRC212_AB_HAP_CTG3_1 58644315 +CHR_HG2233_PATCH 242193535 +CHR_HG2288_HG2289_PATCH 114360394 +CHR_HSCHR4_5_CTG12 190219562 +CHR_HSCHR4_11_CTG12 190233769 +CHR_HSCHR3_1_CTG3 198302882 +CHR_HSCHR19KIR_RSH_BA2_HAP_CTG3_1 58662237 +CHR_HSCHR18_5_CTG1_1 80378965 +CHR_HSCHR19KIR_G248_BA2_HAP_CTG3_1 58661364 +CHR_HSCHR11_1_CTG5 135097255 +CHR_HSCHR11_1_CTG1_2 135096748 +CHR_HSCHR21_2_CTG1_1 46716685 +CHR_HG142_HG150_NOVEL_TEST 135094228 +CHR_HSCHR19KIR_FH08_BAX_HAP_CTG3_1 58647709 +CHR_HSCHR18_2_CTG2 80442734 +CHR_HSCHR19KIR_FH05_A_HAP_CTG3_1 58616795 +CHR_HSCHR3_8_CTG2_1 198302280 +CHR_HSCHR6_1_CTG4 170808607 +CHR_HSCHR3_6_CTG3 198294921 +CHR_HG107_PATCH 135088590 +CHR_HSCHR17_1_CTG2 83256362 +CHR_HSCHR15_2_CTG3 101995966 +CHR_HSCHR5_3_CTG1 181542495 +CHR_HSCHR3_6_CTG2_1 198305007 +CHR_HG1398_PATCH 133274540 +CHR_HSCHR16_1_CTG3_1 90335239 +CHR_HSCHR13_1_CTG3 114370226 +CHR_HG151_NOVEL_TEST 135097696 +CHR_HSCHR19KIR_ABC08_A1_HAP_CTG3_1 58617625 +CHR_HSCHR7_2_CTG1 159348294 +CHR_HSCHR19KIR_FH06_BA1_HAP_CTG3_1 58603994 +CHR_HSCHR10_1_CTG4 133815819 +CHR_HSCHR19_3_CTG2 58625823 +CHR_HSCHRX_3_CTG7 156050387 +CHR_HSCHR19KIR_FH06_A_HAP_CTG3_1 58617587 +CHR_HG986_PATCH 248956639 +CHR_HSCHR22_1_CTG6 50842710 +CHR_HSCHR19KIR_FH08_A_HAP_CTG3_1 58617658 +CHR_HSCHR11_1_CTG2 135083598 +CHR_HSCHR6_1_CTG3 170836231 +CHR_HSCHR10_1_CTG6 133801239 +CHR_HSCHR1_4_CTG31 248955631 +CHR_HSCHR19KIR_T7526_BDEL_HAP_CTG3_1 58631206 +CHR_HSCHR19KIR_LUCE_BDEL_HAP_CTG3_1 58631446 +CHR_HSCHR3_9_CTG3 198291952 +CHR_HSCHR12_4_CTG2_1 133281351 +CHR_HSCHR20_1_CTG3 64447812 +CHR_HSCHR1_1_CTG31 248973653 +CHR_HG2116_PATCH 135090698 +CHR_HSCHR2_7_CTG7_2 242202531 +CHR_HSCHR10_1_CTG3 133783218 +CHR_HSCHR11_1_CTG3_1 135090845 +CHR_HSCHR14_2_CTG1 107050862 +CHR_HSCHR3_1_CTG2_1 198306097 +CHR_HSCHR13_1_CTG2 114368315 +CHR_HG2239_PATCH 159345319 +CHR_HSCHR10_1_CTG1 133844722 +CHR_HSCHR5_4_CTG1 181537434 +CHR_HSCHR17_1_CTG9 83255504 +CHR_HSCHR19KIR_502960008-2_CTG3_1 58616590 +CHR_HSCHR19KIR_RP5_B_HAP_CTG3_1 58631402 +CHR_HSCHR11_1_CTG6 135092332 +CHR_HG1298_PATCH 190196285 +CHR_HSCHR22_3_CTG1 50818468 +CHR_HSCHR3_4_CTG1 198310749 +CHR_HSCHR6_1_CTG7 170812567 +CHR_HSCHR12_8_CTG2_1 133282605 +CHR_HSCHR22_7_CTG1 50845852 +CHR_HSCHR2_3_CTG15 242194292 +CHR_HSCHR18_ALT21_CTG2_1 80376343 +CHR_HSCHR3_2_CTG2_1 198298736 +CHR_HSCHR5_1_CTG5 181543736 +CHR_HSCHR3_1_CTG1 198297480 +CHR_HSCHR5_4_CTG1_1 181546281 +CHR_HSCHR7_3_CTG1 159352526 +CHR_HSCHR14_8_CTG1 107050407 +CHR_HSCHR9_1_CTG3 138400797 +CHR_HSCHR19KIR_7191059-2_CTG3_1 58617604 +CHR_HSCHR19KIR_G248_A_HAP_CTG3_1 58617652 +CHR_HG2111_PATCH 135089248 +CHR_HSCHR19KIR_ABC08_AB_HAP_T_P_CTG3_1 58617636 +CHR_HSCHR19KIR_LUCE_A_HAP_CTG3_1 58617634 +CHR_HSCHR19KIR_RSH_A_HAP_CTG3_1 58617616 +CHR_HSCHR19KIR_T7526_A_HAP_CTG3_1 58617601 +CHR_HSCHR19KIR_FH15_A_HAP_CTG3_1 58617473 +CHR_HSCHR19KIR_G085_A_HAP_CTG3_1 58617601 +CHR_HSCHR19_2_CTG2 58627095 +CHR_HSCHR19KIR_CA01-TA01_1_CTG3_1 58617632 +CHR_HSCHR19KIR_FH13_A_HAP_CTG3_1 58616725 +CHR_HSCHR12_1_CTG2_1 133284468 +CHR_HSCHR16_3_CTG3_1 90346170 +CHR_HSCHR13_1_CTG4 114368332 +CHR_HSCHR13_1_CTG7 114374491 +CHR_HSCHR19KIR_CA01-TA01_2_CTG3_1 58617647 +CHR_HSCHR18_3_CTG2_1 80379039 +CHR_HSCHR18_1_CTG2_1 80382671 +CHR_HSCHR12_1_CTG1 133279324 +CHR_HSCHR21_8_CTG1_1 46713185 +CHR_HSCHR19KIR_502960008-1_CTG3_1 58617609 +CHR_HSCHR3_4_CTG3 198296867 +CHR_HG2058_PATCH 248956422 +CHR_HSCHR1_8_CTG3 248962151 +CHR_HSCHR1_2_CTG32_1 248962488 +CHR_HG2237_PATCH 198290329 +CHR_HSCHR3_8_CTG3 198295934 +CHR_HG1445_PATCH 135063159 +CHR_HG2419_PATCH 145138635 +CHR_HSCHR18_2_CTG1_1 80379367 +CHR_HSCHR5_6_CTG1 181540245 +CHR_HSCHR4_1_CTG12 190227204 +CHR_HSCHR3_7_CTG3 198294497 +CHR_HSCHR3_7_CTG2_1 198301024 +CHR_HSCHR19KIR_0019-4656-A_CTG3_1 58617441 +CHR_HSCHR9_1_CTG6 138399532 +CHR_HSCHR4_8_CTG12 190218480 +CHR_HSCHR3_5_CTG3 198293785 +CHR_HSCHR18_1_CTG1 80395815 +CHR_HSCHR9_1_CTG1 138409529 +CHR_HSCHR3_3_CTG3 198293223 +CHR_HSCHR22_1_CTG1 50806372 +CHR_HSCHR3_2_CTG3 198296961 +CHR_HSCHR1_ALT2_1_CTG32_1 248958866 +CHR_HSCHR2_1_CTG15 242198904 +CHR_HSCHR2_2_CTG15 242198544 +CHR_HSCHR19KIR_7191059-1_CTG3_1 58617649 +CHR_HSCHR18_2_CTG2_1 80378720 +CHR_HSCHR19KIR_HG2394_CTG3_1 58617630 +CHR_HSCHR8_4_CTG7 145143933 +CHR_HSCHR4_4_CTG12 190220704 +CHR_HG1523_PATCH 114458500 +CHR_HSCHR7_1_CTG4_4 159348604 +CHR_HSCHR7_1_CTG1 159349278 +CHR_HSCHR18_ALT2_CTG2_1 80376883 +CHR_HSCHR17_3_CTG2 83258211 +CHR_HSCHR19KIR_G085_BA1_HAP_CTG3_1 58603800 +CHR_HG2067_PATCH 145144434 +CHR_HSCHR19KIR_HG2393_CTG3_1 58583172 +CHR_HSCHR22_4_CTG1 50806321 +CHR_HSCHR22_6_CTG1 50815919 +CHR_HSCHR19_1_CTG3_1 58624789 +CHR_HSCHR19KIR_GRC212_BA1_HAP_CTG3_1 58602595 +CHR_HG2046_PATCH 83257439 +CHR_HSCHR11_1_CTG1_1 135092355 +CHR_HSCHR12_9_CTG2_1 133289677 +CHR_HSCHR22_5_CTG1 50832153 +CHR_HSCHR12_3_CTG2_1 133281486 +CHR_HSCHR6_1_CTG6 170818797 +CHR_HG2249_PATCH 114364211 +CHR_HG721_PATCH 242194216 +CHR_HSCHR19KIR_HG2396_CTG3_1 58603982 +CHR_HSCHR8_4_CTG1 145141010 +CHR_HSCHR22_8_CTG1 50832130 +CHR_HSCHRX_2_CTG12 156053172 +CHR_HSCHR21_6_CTG1_1 46713516 +CHR_HSCHR2_1_CTG5 242199562 +CHR_HG2088_PATCH 159351667 +CHR_HSCHR8_1_CTG6 145150400 +CHR_HSCHR1_3_CTG3 248961700 +CHR_HG1708_PATCH 135086620 +CHR_HSCHR2_8_CTG7_2 242199670 +CHR_HSCHR1_9_CTG3 248965380 +CHR_HG2121_PATCH 170808322 +CHR_HSCHR5_7_CTG1 181544732 +CHR_HSCHR12_2_CTG2_1 133282358 +CHR_HSCHR2_5_CTG7_2 242199685 +CHR_HG2087_PATCH 83260478 +CHR_HSCHR17_2_CTG1 83259496 +CHR_HSCHR8_6_CTG1 145136257 +CHR_HSCHR2_2_CTG1 242198346 +CHR_HSCHR5_9_CTG1 181543440 +CHR_HSCHR16_CTG2 90341867 +CHR_HSCHR9_1_CTG7 138399111 +CHR_HSCHR8_5_CTG7 145144538 +CHR_HSCHR17_1_CTG4 83264766 +CHR_HSCHR2_1_CTG7 242193540 +CHR_HSCHR8_2_CTG7 145141868 +CHR_HSCHR5_2_CTG5 181542206 +CHR_HSCHR5_3_CTG5 181538569 +CHR_HSCHR20_1_CTG1 64450183 +CHR_HSCHR7_2_CTG7 159349352 +CHR_HSCHR5_5_CTG1 181539933 +CHR_HG1296_PATCH 190208697 +CHR_HSCHR6_1_CTG2 170833811 +CHR_HSCHR2_1_CTG7_2 242210518 +CHR_HSCHR13_1_CTG8 114368996 +CHR_HSCHR19KIR_ABC08_AB_HAP_C_P_CTG3_1 58618008 +CHR_HG2104_PATCH 248958259 +CHR_HSCHR12_1_CTG2 133281368 +CHR_HSCHR2_1_CTG1 242194896 +CHR_HSCHR4_2_CTG12 190206797 +CHR_HSCHR12_6_CTG2_1 133275361 +CHR_HSCHR7_1_CTG6 159351981 +CHR_HSCHR20_1_CTG2 64441059 +CHR_HSCHR17_12_CTG4 83271781 +CHR_HSCHR21_4_CTG1_1 46719541 +CHR_HSCHR3_5_CTG2_1 198300594 +CHR_HSCHR4_1_CTG8_1 190218838 +CHR_HSCHR18_4_CTG1_1 80378406 +CHR_HSCHR2_4_CTG7_2 242196589 +CHR_HSCHR1_2_CTG31 248971826 +CHR_HSCHR2_3_CTG7_2 242194557 +CHR_HSCHR1_1_CTG11 248961539 +CHR_HSCHR12_2_CTG1 133282237 +CHR_HSCHR3_3_CTG1 198300110 +CHR_HG2217_PATCH 135086621 +CHR_HSCHR17_9_CTG4 83263791 +CHR_HSCHR11_2_CTG1 135093444 +CHR_HG2133_PATCH 198299611 +CHR_HSCHR18_1_CTG2 80386177 +CHR_HSCHR13_1_CTG6 114367169 +CHR_HSCHR8_7_CTG7 145147686 +CHR_HSCHR22_1_CTG5 50821308 +CHR_HSCHR5_3_CTG1_1 181554865 +CHR_HG2062_PATCH 57262172 +CHR_HG1311_PATCH 50818486 +CHR_HSCHR19KIR_CA04_CTG3_1 58537114 +CHR_HSCHR19KIR_0010-5217-AB_CTG3_1 58538377 +CHR_HG2499_PATCH 102001626 +CHR_HSCHR22_1_CTG2 50788525 +CHR_HSCHR2_2_CTG7_2 242199609 +CHR_HG2442_PATCH 80379182 +CHR_HSCHR4_2_CTG4 190217898 +CHR_HSCHR17_3_CTG4 83269063 +CHR_HG1395_PATCH 181537525 +CHR_HSCHR16_2_CTG3_1 90343477 +CHR_HSCHR17_6_CTG4 83246071 +CHR_HG2247_PATCH 133274000 +CHR_HG2242_HG2243_PATCH 133797297 +CHR_HG1384_PATCH 242195459 +CHR_HSCHR5_1_CTG1 181558402 +CHR_HSCHR21_5_CTG2 46712294 +CHR_HSCHR6_1_CTG10 170810830 +CHR_HSCHR16_5_CTG3_1 90338377 +CHR_HSCHR6_8_CTG1 170813052 +CHR_HSCHR12_5_CTG2_1 133279478 +CHR_HSCHR6_1_CTG9 170815583 +CHR_HSCHR21_3_CTG1_1 46715777 +CHR_HSCHR22_2_CTG1 50830603 +CHR_HG563_PATCH 170759097 +CHR_HSCHR9_1_CTG2 138402913 +CHR_HSCHR2_3_CTG1 242195626 +CHR_HSCHR17_5_CTG4 83247119 +CHR_HG1507_PATCH 155996656 +CHR_HSCHR11_1_CTG3 135090275 +CHR_HG1524_PATCH 114315104 +CHR_HG2047_PATCH 133275304 +CHR_HSCHR16_4_CTG1 90340369 +CHR_HSCHR21_1_CTG1_1 46722569 +CHR_HSCHR19_5_CTG2 58619095 +CHR_HSCHR9_1_CTG4 138405815 +CHR_HSCHR16_5_CTG1 90344275 +CHR_HSCHR20_1_CTG4 64446453 +CHR_HG1320_PATCH 83207673 +CHR_HSCHR12_7_CTG2_1 133289478 +CHR_HG1299_PATCH 190201596 +CHR_HSCHR19_4_CTG2 58619803 +CHR_HSCHR1_4_CTG32_1 248958766 +CHR_HG1531_PATCH 57177176 +CHR_HG1521_PATCH 135087279 +CHR_HG460_PATCH 248955838 +CHR_HSCHR19_2_CTG3_1 58618601 +CHR_HSCHR12_5_CTG2 133275237 +CHR_HSCHR13_1_CTG5 114365350 +CHR_HSCHR8_6_CTG7 145141837 +CHR_HG2216_PATCH 114376428 +CHR_HG1506_PATCH 155994589 +CHR_HG613_PATCH 138394874 +CHR_HG1466_PATCH 155848651 +CHR_HG1509_PATCH 155994530 +CHR_HG2241_PATCH 133792722 +CHR_HG494_PATCH 50818473 +CHR_HG1817_1_PATCH 114369395 +KI270728.1 1872759 +KI270727.1 448248 +KI270442.1 392061 +KI270729.1 280839 +GL000225.1 211173 +KI270743.1 210658 +GL000008.2 209709 +GL000009.2 201709 +KI270747.1 198735 +KI270722.1 194050 +GL000194.1 191469 +KI270742.1 186739 +GL000205.2 185591 +GL000195.1 182896 +KI270736.1 181920 +KI270733.1 179772 +GL000224.1 179693 +GL000219.1 179198 +KI270719.1 176845 +GL000216.2 176608 +KI270712.1 176043 +KI270706.1 175055 +KI270725.1 172810 +KI270744.1 168472 +KI270734.1 165050 +GL000213.1 164239 +GL000220.1 161802 +KI270715.1 161471 +GL000218.1 161147 +KI270749.1 158759 +KI270741.1 157432 +GL000221.1 155397 +KI270716.1 153799 +KI270731.1 150754 +KI270751.1 150742 +KI270750.1 148850 +KI270519.1 138126 +GL000214.1 137718 +KI270708.1 127682 +KI270730.1 112551 +KI270438.1 112505 +KI270737.1 103838 +KI270721.1 100316 +KI270738.1 99375 +KI270748.1 93321 +KI270435.1 92983 +GL000208.1 92689 +KI270538.1 91309 +KI270756.1 79590 +KI270739.1 73985 +KI270757.1 71251 +KI270709.1 66860 +KI270746.1 66486 +KI270753.1 62944 +KI270589.1 44474 +KI270726.1 43739 +KI270735.1 42811 +KI270711.1 42210 +KI270745.1 41891 +KI270714.1 41717 +KI270732.1 41543 +KI270713.1 40745 +KI270754.1 40191 +KI270710.1 40176 +KI270717.1 40062 +KI270724.1 39555 +KI270720.1 39050 +KI270723.1 38115 +KI270718.1 38054 +KI270317.1 37690 +KI270740.1 37240 +KI270755.1 36723 +KI270707.1 32032 +KI270579.1 31033 +KI270752.1 27745 +KI270512.1 22689 +KI270322.1 21476 +GL000226.1 15008 +KI270311.1 12399 +KI270366.1 8320 +KI270511.1 8127 +KI270448.1 7992 +KI270521.1 7642 +KI270581.1 7046 +KI270582.1 6504 +KI270515.1 6361 +KI270588.1 6158 +KI270591.1 5796 +KI270522.1 5674 +KI270507.1 5353 +KI270590.1 4685 +KI270584.1 4513 +KI270320.1 4416 +KI270382.1 4215 +KI270468.1 4055 +KI270467.1 3920 +KI270362.1 3530 +KI270517.1 3253 +KI270593.1 3041 +KI270528.1 2983 +KI270587.1 2969 +KI270364.1 2855 +KI270371.1 2805 +KI270333.1 2699 +KI270374.1 2656 +KI270411.1 2646 +KI270414.1 2489 +KI270510.1 2415 +KI270390.1 2387 +KI270375.1 2378 +KI270420.1 2321 +KI270509.1 2318 +KI270315.1 2276 +KI270302.1 2274 +KI270518.1 2186 +KI270530.1 2168 +KI270304.1 2165 +KI270418.1 2145 +KI270424.1 2140 +KI270417.1 2043 +KI270508.1 1951 +KI270303.1 1942 +KI270381.1 1930 +KI270529.1 1899 +KI270425.1 1884 +KI270396.1 1880 +KI270363.1 1803 +KI270386.1 1788 +KI270465.1 1774 +KI270383.1 1750 +KI270384.1 1658 +KI270330.1 1652 +KI270372.1 1650 +KI270548.1 1599 +KI270580.1 1553 +KI270387.1 1537 +KI270391.1 1484 +KI270305.1 1472 +KI270373.1 1451 +KI270422.1 1445 +KI270316.1 1444 +KI270340.1 1428 +KI270338.1 1428 +KI270583.1 1400 +KI270334.1 1368 +KI270429.1 1361 +KI270393.1 1308 +KI270516.1 1300 +KI270389.1 1298 +KI270466.1 1233 +KI270388.1 1216 +KI270544.1 1202 +KI270310.1 1201 +KI270412.1 1179 +KI270395.1 1143 +KI270376.1 1136 +KI270337.1 1121 +KI270335.1 1048 +KI270378.1 1048 +KI270379.1 1045 +KI270329.1 1040 +KI270419.1 1029 +KI270336.1 1026 +KI270312.1 998 +KI270539.1 993 +KI270385.1 990 +KI270423.1 981 +KI270392.1 971 +KI270394.1 970 \ No newline at end of file diff --git a/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.fa.fai b/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.fa.fai new file mode 100644 index 0000000..bef3483 --- /dev/null +++ b/src/SOPRANO/data/homo_sapiens/108_GRCh38/Homo_sapiens.GRCh38.dna.toplevel.fa.fai @@ -0,0 +1,639 @@ +1 248956422 56 60 61 +2 242193529 253105808 60 61 +3 198295559 499335952 60 61 +4 190214555 700936493 60 61 +5 181538259 894321347 60 61 +6 170805979 1078885300 60 61 +7 159345973 1252538102 60 61 +8 145138636 1414539898 60 61 +9 138394717 1562097568 60 61 +10 133797422 1702798922 60 61 +11 135086622 1838826360 60 61 +12 133275309 1976164484 60 61 +13 114364328 2111661107 60 61 +14 107043718 2227931566 60 61 +15 101991189 2336759404 60 61 +16 90338345 2440450504 60 61 +17 83257441 2532294546 60 61 +18 80373285 2616939669 60 61 +19 58617616 2698652566 60 61 +20 64444167 2758247200 60 61 +21 46709983 2823765494 60 61 +22 50818468 2871254034 60 61 +X 156040895 2922919533 60 61 +Y 57227415 3081561171 60 61 +MT 16569 3139742431 60 61 +CHR_HG76_PATCH 144938989 3139759365 60 61 +CHR_HG2365_PATCH 102714182 3287114096 60 61 +CHR_HSCHR15_4_CTG8 102071387 3391540272 60 61 +CHR_HSCHR6_MHC_SSTO_CTG1 170946136 3495312951 60 61 +CHR_HSCHR6_MHC_MCF_CTG1 170976334 3669108290 60 61 +CHR_HSCHR6_MHC_COX_CTG1 170727598 3842934330 60 61 +CHR_HSCHR6_MHC_MANN_CTG1 170959829 4016507490 60 61 +CHR_HSCHR6_MHC_APD_CTG1 170845044 4190316750 60 61 +CHR_HSCHR6_MHC_QBL_CTG1 170734801 4364009312 60 61 +CHR_HSCHR6_MHC_DBB_CTG1 170783898 4537589794 60 61 +CHR_HSCHR17_7_CTG4 83058228 4711220180 60 61 +CHR_HSCHR16_1_CTG1 90426449 4795662801 60 61 +CHR_HSCHR15_6_CTG8 101521929 4887596456 60 61 +CHR_HG926_PATCH 90680781 4990810507 60 61 +CHR_HSCHR17_1_CTG5 83552665 5083002724 60 61 +CHR_HSCHR5_2_CTG1_1 180753562 5167948026 60 61 +CHR_HSCHR14_7_CTG1 107045728 5351714238 60 61 +CHR_HSCHR17_2_CTG5 83086355 5460544151 60 61 +CHR_HSCHR14_3_CTG1 107067894 5545015369 60 61 +CHR_HSCHR5_1_CTG1_1 180863570 5653867820 60 61 +CHR_HSCHR7_2_CTG6 159407160 5837745871 60 61 +CHR_HSCHR19LRC_LRC_J_CTG3_1 58650772 5999809924 60 61 +CHR_HSCHR19_4_CTG3_1 58625731 6059438302 60 61 +CHR_HSCHR19LRC_LRC_S_CTG3_1 58625321 6119041236 60 61 +CHR_HSCHR19LRC_LRC_I_CTG3_1 58623235 6178643753 60 61 +CHR_HG1815_PATCH 133281281 6238244134 60 61 +CHR_HSCHR19LRC_LRC_T_CTG3_1 58561614 6373746877 60 61 +CHR_HSCHR19LRC_COX1_CTG3_1 58546647 6433284623 60 61 +CHR_HSCHR19LRC_PGF1_CTG3_1 58546031 6492807153 60 61 +CHR_HSCHR8_8_CTG1 145123326 6552329040 60 61 +CHR_HSCHR1_3_CTG32_1 248960761 6699871183 60 61 +CHR_HSCHR6_1_CTG8 170810115 6952981379 60 61 +CHR_HSCHR19LRC_PGF2_CTG3_1 58355410 7126638435 60 61 +CHR_HSCHR19LRC_COX2_CTG3_1 58288451 7185966541 60 61 +CHR_HG1_PATCH 107043717 7245226553 60 61 +CHR_HSCHR7_3_CTG4_4 159441130 7354054432 60 61 +CHR_HG30_PATCH 181539112 7516153003 60 61 +CHR_HSCHR8_9_CTG1 144983589 7700717855 60 61 +CHR_HG708_PATCH 159270839 7848117928 60 61 +CHR_HSCHR4_1_CTG9 190096932 8010043369 60 61 +CHR_HSCHR12_3_CTG2 133271566 8203308674 60 61 +CHR_HSCHR4_7_CTG12 190225141 8338801523 60 61 +CHR_HSCHR1_6_CTG3 248955842 8532197180 60 61 +CHR_HG1362_PATCH 133275314 8785302379 60 61 +CHR_HSCHR2_6_CTG7_2 242198149 8920799049 60 61 +CHR_HG2513_PATCH 47068079 9167033925 60 61 +CHR_HG109_PATCH 58617934 9214886561 60 61 +CHR_HG2290_PATCH 242235269 9274481553 60 61 +CHR_HG2263_PATCH 90338583 9520754168 60 61 +CHR_HSCHR15_1_CTG1 101998275 9612598485 60 61 +CHR_HG2266_PATCH 159346106 9716296824 60 61 +CHR_HG1342_HG2282_PATCH 248929249 9878298805 60 61 +CHR_HG1485_PATCH 50915261 10131376966 60 61 +CHR_HG1832_PATCH 248959779 10183140907 60 61 +CHR_HG545_PATCH 133833661 10436250106 60 61 +CHR_HG2066_PATCH 198295555 10572314421 60 61 +CHR_HSCHR9_1_CTG5 138404305 10773914990 60 61 +CHR_HSCHR15_5_CTG8 102070278 10914626124 60 61 +CHR_HSCHR1_1_CTG32_1 248960143 11018397668 60 61 +CHR_HSCHR4_12_CTG12 190221648 11271507247 60 61 +CHR_HG2244_HG2245_PATCH 133797425 11464899362 60 61 +CHR_HG126_PATCH 198295908 11600926835 60 61 +CHR_HG2512_PATCH 50818467 11802527766 60 61 +CHR_HG2236_PATCH 198295537 11854193300 60 61 +CHR_HG2509_PATCH 114364327 12055793855 60 61 +CHR_HSCHR12_2_CTG2 133307257 12172064345 60 61 +CHR_HG2213_PATCH 80377536 12307593481 60 61 +CHR_HG26_PATCH 58617652 12389310730 60 61 +CHR_HG439_PATCH 155960230 12448905433 60 61 +CHR_HG2510_PATCH 107043717 12607465093 60 61 +CHR_HG2511_PATCH 101991188 12716292964 60 61 +CHR_HSCHR17_2_CTG2 83160220 12819984095 60 61 +CHR_HSCHR15_2_CTG8 102003326 12904530409 60 61 +CHR_HSCHR19_1_CTG2 58624032 13008233880 60 61 +CHR_HSCHR4_6_CTG12 190218533 13067835070 60 61 +CHR_HSCHR4_1_CTG6 190224838 13261224000 60 61 +CHR_HSCHR17_1_CTG1 83290495 13454619341 60 61 +CHR_HSCHR8_1_CTG7 145142033 13539298099 60 61 +CHR_HG2235_PATCH 198295655 13686859258 60 61 +CHR_HG2021_PATCH 58632883 13888459932 60 61 +CHR_HG2198_PATCH 101993033 13948070122 60 61 +CHR_HSCHR1_3_CTG31 248967909 14051763129 60 61 +CHR_HG2232_PATCH 242193529 14304880596 60 61 +CHR_HSCHR5_8_CTG1 181668817 14551110780 60 61 +CHR_HG2291_PATCH 114534236 14735807503 60 61 +CHR_HSCHR1_1_CTG3 248968406 14852250731 60 61 +CHR_HSCHR1_4_CTG3 248963886 15105368707 60 61 +CHR_HG2525_PATCH 190293418 15358482084 60 61 +CHR_HG2030_PATCH 138394865 15551947151 60 61 +CHR_HG2002_PATCH 248942227 15692648690 60 61 +CHR_HSCHR15_1_CTG3 101994657 15945740045 60 61 +CHR_HSCHR17_10_CTG4 83359087 16049434704 60 61 +CHR_HSCHR14_1_CTG1 107047377 16134183200 60 61 +CHR_HG1651_PATCH 170779650 16243014792 60 61 +CHR_HSCHR8_5_CTG1 145137619 16416640858 60 61 +CHR_HG2063_PATCH 133275140 16564197530 60 61 +CHR_HSCHR10_1_CTG2 133813485 16699694013 60 61 +CHR_HSCHR13_1_CTG1 114348172 16835737813 60 61 +CHR_HG2022_PATCH 198295941 16951991880 60 61 +CHR_HSCHR8_3_CTG7 145125643 17153592842 60 61 +CHR_HG2095_PATCH 248959131 17301137338 60 61 +CHR_HG2060_PATCH 135086593 17554245880 60 61 +CHR_HSCHR22_1_CTG7 50872732 17691584006 60 61 +CHR_HSCHR3_9_CTG2_1 198302489 17743304717 60 61 +CHR_HSCHR11_2_CTG8 135117433 17944912346 60 61 +CHR_HSCHR8_3_CTG1 145130612 18082281825 60 61 +CHR_HG2246_HG2248_HG2276_PATCH 133274640 18229831401 60 61 +CHR_HSCHR11_1_CTG7 135085484 18365327375 60 61 +CHR_HSCHR15_1_CTG8 102002809 18502664374 60 61 +CHR_HSCHR19KIR_CA01-TB04_CTG3_1 58750420 18606367353 60 61 +CHR_HG1277_PATCH 133754853 18666097039 60 61 +CHR_HSCHR8_1_CTG1 145124952 18802081228 60 61 +CHR_HSCHR18_1_CTG1_1 80380517 18949625023 60 61 +CHR_HSCHRX_1_CTG3 156043585 19031345304 60 61 +CHR_HSCHR8_2_CTG1 145141567 19189989704 60 61 +CHR_HSCHR19KIR_FH05_B_HAP_CTG3_1 58689016 19337550415 60 61 +CHR_HG2285_HG106_HG2252_PATCH 83219555 19397217699 60 61 +CHR_HG2114_PATCH 135091163 19481824339 60 61 +CHR_HSCHR1_5_CTG3 248926662 19619167118 60 61 +CHR_HSCHR17_4_CTG4 83257896 19872242647 60 61 +CHR_HG2191_PATCH 133799479 19956888267 60 61 +CHR_HSCHR17_3_CTG1 83267046 20092917835 60 61 +CHR_HG705_PATCH 190172551 20177572756 60 61 +CHR_HSCHRX_2_CTG3 156039875 20370914938 60 61 +CHR_HSCHR6_1_CTG5 170815302 20529555566 60 61 +CHR_HSCHR7_3_CTG6 159344441 20703217878 60 61 +CHR_HG2471_PATCH 90341128 20865218151 60 61 +CHR_HG28_PATCH 135088641 20957065053 60 61 +CHR_HG2128_PATCH 170811684 21094405264 60 61 +CHR_HSCHR16_4_CTG3_1 90343133 21268063911 60 61 +CHR_HG2068_PATCH 145140411 21359912855 60 61 +CHR_HG2334_PATCH 133797389 21507472365 60 61 +CHR_HSCHR14_9_CTG1 107050362 21643499809 60 61 +CHR_HSCHR22_1_CTG4 50824699 21752334433 60 61 +CHR_HSCHR15_3_CTG3 101993763 21804006301 60 61 +CHR_HSCHR22_1_CTG3 50827573 21907700050 60 61 +CHR_HSCHR1_2_CTG3 248975002 21959374838 60 61 +CHR_HG1309_PATCH 159365091 22212499516 60 61 +CHR_HSCHR19KIR_FH15_B_HAP_CTG3_1 58689284 22374520809 60 61 +CHR_HSCHR3_3_CTG2_1 198300421 22434188340 60 61 +CHR_HSCHR17_11_CTG4 83264946 22635793868 60 61 +CHR_HG2072_PATCH 170816182 22720446656 60 61 +CHR_HSCHR15_3_CTG8 101999716 22894109865 60 61 +CHR_HSCHR4_3_CTG12 190218028 22997809667 60 61 +CHR_HG2057_PATCH 170805979 23191198088 60 61 +CHR_HSCHR19KIR_CA01-TB01_CTG3_1 58645065 23364850957 60 61 +CHR_HSCHR12_4_CTG2 133277582 23424473530 60 61 +CHR_HSCHR4_9_CTG12 190219005 23559972504 60 61 +CHR_HSCHR17_8_CTG4 83258474 23753361915 60 61 +CHR_HG699_PATCH 190211220 23838008121 60 61 +CHR_HSCHR19_3_CTG3_1 58625958 24031389621 60 61 +CHR_HSCHR16_3_CTG1 90340304 24090992768 60 61 +CHR_HG2412_PATCH 80373284 24182838835 60 61 +CHR_HG2023_PATCH 190147504 24264551766 60 61 +CHR_HSCHR8_7_CTG1 145138198 24457868484 60 61 +CHR_HSCHR5_2_CTG1 181547139 24605425740 60 61 +CHR_HSCHR3_4_CTG2_1 198301383 24789998757 60 61 +CHR_HSCHR17_2_CTG4 83263494 24991605253 60 61 +CHR_HSCHR2_4_CTG1 242191076 25076256560 60 61 +CHR_HSCHR19KIR_0019-4656-B_CTG3_1 58675214 25322484281 60 61 +CHR_HSCHR4_1_CTG4 190221757 25382137504 60 61 +CHR_HSCHR11_3_CTG1 135092180 25575529714 60 61 +CHR_HG2115_PATCH 135092089 25712873523 60 61 +CHR_HSCHR19KIR_FH13_BA2_HAP_CTG3_1 58662330 25850217268 60 61 +CHR_HSCHR3_5_CTG1 198305844 25909857400 60 61 +CHR_HSCHR11_2_CTG1_1 135083841 26111468436 60 61 +CHR_HSCHR2_2_CTG7 242223512 26248803763 60 61 +CHR_HSCHR1_5_CTG32_1 248960213 26495064436 60 61 +CHR_HG23_PATCH 133275184 26748174074 60 61 +CHR_HSCHR11_1_CTG8 135088433 26883670602 60 61 +CHR_HSCHR7_1_CTG7 159346281 27021010597 60 61 +CHR_HG1535_PATCH 57187419 27183012741 60 61 +CHR_HSCHR7_2_CTG4_4 159333789 27241153376 60 61 +CHR_HSCHR19KIR_GRC212_AB_HAP_CTG3_1 58644315 27403142852 60 61 +CHR_HG2233_PATCH 242193535 27462764665 60 61 +CHR_HG2288_HG2289_PATCH 114360394 27708994865 60 61 +CHR_HSCHR4_5_CTG12 190219562 27825261356 60 61 +CHR_HSCHR4_11_CTG12 190233769 28018651345 60 61 +CHR_HSCHR3_1_CTG3 198302882 28212055765 60 61 +CHR_HSCHR19KIR_RSH_BA2_HAP_CTG3_1 58662237 28413663815 60 61 +CHR_HSCHR18_5_CTG1_1 80378965 28473303857 60 61 +CHR_HSCHR19KIR_G248_BA2_HAP_CTG3_1 58661364 28555022593 60 61 +CHR_HSCHR11_1_CTG5 135097255 28614661737 60 61 +CHR_HSCHR11_1_CTG1_2 135096748 28752010715 60 61 +CHR_HSCHR21_2_CTG1_1 46716685 28889359169 60 61 +CHR_HG142_HG150_NOVEL_TEST 135094228 28936854572 60 61 +CHR_HSCHR19KIR_FH08_BAX_HAP_CTG3_1 58647709 29074200492 60 61 +CHR_HSCHR18_2_CTG2 80442734 29133825752 60 61 +CHR_HSCHR19KIR_FH05_A_HAP_CTG3_1 58616795 29215609316 60 61 +CHR_HSCHR3_8_CTG2_1 198302280 29275203158 60 61 +CHR_HSCHR6_1_CTG4 170808607 29476810564 60 61 +CHR_HSCHR3_6_CTG3 198294921 29650466070 60 61 +CHR_HG107_PATCH 135088590 29852065997 60 61 +CHR_HSCHR17_1_CTG2 83256362 29989406153 60 61 +CHR_HSCHR15_2_CTG3 101995966 30074050212 60 61 +CHR_HSCHR5_3_CTG1 181542495 30177746199 60 61 +CHR_HSCHR3_6_CTG2_1 198305007 30362314503 60 61 +CHR_HG1398_PATCH 133274540 30563924686 60 61 +CHR_HSCHR16_1_CTG3_1 90335239 30699420562 60 61 +CHR_HSCHR13_1_CTG3 114370226 30791261479 60 61 +CHR_HG151_NOVEL_TEST 135097696 30907537970 60 61 +CHR_HSCHR19KIR_ABC08_A1_HAP_CTG3_1 58617625 31044887416 60 61 +CHR_HSCHR7_2_CTG1 159348294 31104482090 60 61 +CHR_HSCHR19KIR_FH06_BA1_HAP_CTG3_1 58603994 31266486310 60 61 +CHR_HSCHR10_1_CTG4 133815819 31326067128 60 61 +CHR_HSCHR19_3_CTG2 58625823 31462113300 60 61 +CHR_HSCHRX_3_CTG7 156050387 31521716317 60 61 +CHR_HSCHR19KIR_FH06_A_HAP_CTG3_1 58617587 31680367661 60 61 +CHR_HG986_PATCH 248956639 31739962298 60 61 +CHR_HSCHR22_1_CTG6 50842710 31993068304 60 61 +CHR_HSCHR19KIR_FH08_A_HAP_CTG3_1 58617658 32044758510 60 61 +CHR_HSCHR11_1_CTG2 135083598 32104353219 60 61 +CHR_HSCHR6_1_CTG3 170836231 32241688299 60 61 +CHR_HSCHR10_1_CTG6 133801239 32415371899 60 61 +CHR_HSCHR1_4_CTG31 248955631 32551403249 60 61 +CHR_HSCHR19KIR_T7526_BDEL_HAP_CTG3_1 58631206 32804508266 60 61 +CHR_HSCHR19KIR_LUCE_BDEL_HAP_CTG3_1 58631446 32864116782 60 61 +CHR_HSCHR3_9_CTG3 198291952 32923725507 60 61 +CHR_HSCHR12_4_CTG2_1 133281351 33125322419 60 61 +CHR_HSCHR20_1_CTG3 64447812 33260825215 60 61 +CHR_HSCHR1_1_CTG31 248973653 33326347248 60 61 +CHR_HG2116_PATCH 135090698 33579470554 60 61 +CHR_HSCHR2_7_CTG7_2 242202531 33716812864 60 61 +CHR_HSCHR10_1_CTG3 133783218 33963052194 60 61 +CHR_HSCHR11_1_CTG3_1 135090845 34099065235 60 61 +CHR_HSCHR14_2_CTG1 107050862 34236407685 60 61 +CHR_HSCHR3_1_CTG2_1 198306097 34345242821 60 61 +CHR_HSCHR13_1_CTG2 114368315 34546854110 60 61 +CHR_HG2239_PATCH 159345319 34663128656 60 61 +CHR_HSCHR10_1_CTG1 133844722 34825129821 60 61 +CHR_HSCHR5_4_CTG1 181537434 34961205377 60 61 +CHR_HSCHR17_1_CTG9 83255504 35145768524 60 61 +CHR_HSCHR19KIR_502960008-2_CTG3_1 58616590 35230411747 60 61 +CHR_HSCHR19KIR_RP5_B_HAP_CTG3_1 58631402 35290005396 60 61 +CHR_HSCHR11_1_CTG6 135092332 35349614079 60 61 +CHR_HG1298_PATCH 190196285 35486958042 60 61 +CHR_HSCHR22_3_CTG1 50818468 35680324355 60 61 +CHR_HSCHR3_4_CTG1 198310749 35731989894 60 61 +CHR_HSCHR6_1_CTG7 170812567 35933605911 60 61 +CHR_HSCHR12_8_CTG2_1 133282605 36107265457 60 61 +CHR_HSCHR22_7_CTG1 50845852 36242769536 60 61 +CHR_HSCHR2_3_CTG15 242194292 36294462909 60 61 +CHR_HSCHR18_ALT21_CTG2_1 80376343 36540693874 60 61 +CHR_HSCHR3_2_CTG2_1 198298736 36622409915 60 61 +CHR_HSCHR5_1_CTG5 181543736 36824013718 60 61 +CHR_HSCHR3_1_CTG1 198297480 37008583271 60 61 +CHR_HSCHR5_4_CTG1_1 181546281 37210185801 60 61 +CHR_HSCHR7_3_CTG1 159352526 37394757950 60 61 +CHR_HSCHR14_8_CTG1 107050407 37556766450 60 61 +CHR_HSCHR9_1_CTG3 138400797 37665601119 60 61 +CHR_HSCHR19KIR_7191059-2_CTG3_1 58617604 37806308719 60 61 +CHR_HSCHR19KIR_G248_A_HAP_CTG3_1 58617652 37865903401 60 61 +CHR_HG2111_PATCH 135089248 37925498106 60 61 +CHR_HSCHR19KIR_ABC08_AB_HAP_T_P_CTG3_1 58617636 38062838971 60 61 +CHR_HSCHR19KIR_LUCE_A_HAP_CTG3_1 58617634 38122433685 60 61 +CHR_HSCHR19KIR_RSH_A_HAP_CTG3_1 58617616 38182028395 60 61 +CHR_HSCHR19KIR_T7526_A_HAP_CTG3_1 58617601 38241623091 60 61 +CHR_HSCHR19KIR_FH15_A_HAP_CTG3_1 58617473 38301217770 60 61 +CHR_HSCHR19KIR_G085_A_HAP_CTG3_1 58617601 38360812318 60 61 +CHR_HSCHR19_2_CTG2 58627095 38420406969 60 61 +CHR_HSCHR19KIR_CA01-TA01_1_CTG3_1 58617632 38480011310 60 61 +CHR_HSCHR19KIR_FH13_A_HAP_CTG3_1 58616725 38539606020 60 61 +CHR_HSCHR12_1_CTG2_1 133284468 38599199785 60 61 +CHR_HSCHR16_3_CTG3_1 90346170 38734705762 60 61 +CHR_HSCHR13_1_CTG4 114368332 38826557792 60 61 +CHR_HSCHR13_1_CTG7 114374491 38942832361 60 61 +CHR_HSCHR19KIR_CA01-TA01_2_CTG3_1 58617647 39059113221 60 61 +CHR_HSCHR18_3_CTG2_1 80379039 39118707922 60 61 +CHR_HSCHR18_1_CTG2_1 80382671 39200426705 60 61 +CHR_HSCHR12_1_CTG1 133279324 39282149178 60 61 +CHR_HSCHR21_8_CTG1_1 46713185 39417649918 60 61 +CHR_HSCHR19KIR_502960008-1_CTG3_1 58617609 39465141784 60 61 +CHR_HSCHR3_4_CTG3 198296867 39524736442 60 61 +CHR_HG2058_PATCH 248956422 39726338349 60 61 +CHR_HSCHR1_8_CTG3 248962151 39979444141 60 61 +CHR_HSCHR1_2_CTG32_1 248962488 40232555756 60 61 +CHR_HG2237_PATCH 198290329 40485667711 60 61 +CHR_HSCHR3_8_CTG3 198295934 40687262967 60 61 +CHR_HG1445_PATCH 135063159 40888863926 60 61 +CHR_HG2419_PATCH 145138635 41026178230 60 61 +CHR_HSCHR18_2_CTG1_1 80379367 41173735936 60 61 +CHR_HSCHR5_6_CTG1 181540245 41255455048 60 61 +CHR_HSCHR4_1_CTG12 190227204 41440021054 60 61 +CHR_HSCHR3_7_CTG3 198294497 41633418800 60 61 +CHR_HSCHR3_7_CTG2_1 198301024 41835018306 60 61 +CHR_HSCHR19KIR_0019-4656-A_CTG3_1 58617441 42036624475 60 61 +CHR_HSCHR9_1_CTG6 138399532 42096218970 60 61 +CHR_HSCHR4_8_CTG12 190218480 42236925259 60 61 +CHR_HSCHR3_5_CTG3 198293785 42430314135 60 61 +CHR_HSCHR18_1_CTG1 80395815 42631912914 60 61 +CHR_HSCHR9_1_CTG1 138409529 42713648748 60 61 +CHR_HSCHR3_3_CTG3 198293223 42854365191 60 61 +CHR_HSCHR22_1_CTG1 50806372 43055963391 60 61 +CHR_HSCHR3_2_CTG3 198296961 43107616624 60 61 +CHR_HSCHR1_ALT2_1_CTG32_1 248958866 43309218639 60 61 +CHR_HSCHR2_1_CTG15 242198904 43562326910 60 61 +CHR_HSCHR2_2_CTG15 242198544 43808562553 60 61 +CHR_HSCHR19KIR_7191059-1_CTG3_1 58617649 44054797863 60 61 +CHR_HSCHR18_2_CTG2_1 80378720 44114392566 60 61 +CHR_HSCHR19KIR_HG2394_CTG3_1 58617630 44196111049 60 61 +CHR_HSCHR8_4_CTG7 145143933 44255705728 60 61 +CHR_HSCHR4_4_CTG12 190220704 44403268817 60 61 +CHR_HG1523_PATCH 114458500 44596659959 60 61 +CHR_HSCHR7_1_CTG4_4 159348604 44713026193 60 61 +CHR_HSCHR7_1_CTG1 159349278 44875030696 60 61 +CHR_HSCHR18_ALT2_CTG2_1 80376883 45037035895 60 61 +CHR_HSCHR17_3_CTG2 83258211 45118752482 60 61 +CHR_HSCHR19KIR_G085_BA1_HAP_CTG3_1 58603800 45203398451 60 61 +CHR_HG2067_PATCH 145144434 45262979073 60 61 +CHR_HSCHR19KIR_HG2393_CTG3_1 58583172 45410542698 60 61 +CHR_HSCHR22_4_CTG1 50806321 45470102354 60 61 +CHR_HSCHR22_6_CTG1 50815919 45521755545 60 61 +CHR_HSCHR19_1_CTG3_1 58624789 45573418489 60 61 +CHR_HSCHR19KIR_GRC212_BA1_HAP_CTG3_1 58602595 45633020483 60 61 +CHR_HG2046_PATCH 83257439 45692599879 60 61 +CHR_HSCHR11_1_CTG1_1 135092355 45777245036 60 61 +CHR_HSCHR12_9_CTG2_1 133289677 45914589033 60 61 +CHR_HSCHR22_5_CTG1 50832153 46050100302 60 61 +CHR_HSCHR12_3_CTG2_1 133281486 46101779752 60 61 +CHR_HSCHR6_1_CTG6 170818797 46237282685 60 61 +CHR_HG2249_PATCH 114364211 46410948554 60 61 +CHR_HG721_PATCH 242194216 46527218926 60 61 +CHR_HSCHR19KIR_HG2396_CTG3_1 58603982 46773449830 60 61 +CHR_HSCHR8_4_CTG1 145141010 46833030634 60 61 +CHR_HSCHR22_8_CTG1 50832130 46980590758 60 61 +CHR_HSCHRX_2_CTG12 156053172 47032270181 60 61 +CHR_HSCHR21_6_CTG1_1 46713516 47190924333 60 61 +CHR_HSCHR2_1_CTG5 242199562 47238416496 60 61 +CHR_HG2088_PATCH 159351667 47484652810 60 61 +CHR_HSCHR8_1_CTG6 145150400 47646660427 60 61 +CHR_HSCHR1_3_CTG3 248961700 47794230097 60 61 +CHR_HG1708_PATCH 135086620 48047341251 60 61 +CHR_HSCHR2_8_CTG7_2 242199670 48184679415 60 61 +CHR_HSCHR1_9_CTG3 248965380 48430915843 60 61 +CHR_HG2121_PATCH 170808322 48684030738 60 61 +CHR_HSCHR5_7_CTG1 181544732 48857685962 60 61 +CHR_HSCHR12_2_CTG2_1 133282358 49042256534 60 61 +CHR_HSCHR2_5_CTG7_2 242199685 49177760357 60 61 +CHR_HG2087_PATCH 83260478 49423996795 60 61 +CHR_HSCHR17_2_CTG1 83259496 49508645037 60 61 +CHR_HSCHR8_6_CTG1 145136257 49593292280 60 61 +CHR_HSCHR2_2_CTG1 242198346 49740847563 60 61 +CHR_HSCHR5_9_CTG1 181543440 49987082645 60 61 +CHR_HSCHR16_CTG2 90341867 50171651894 60 61 +CHR_HSCHR9_1_CTG7 138399111 50263499555 60 61 +CHR_HSCHR8_5_CTG7 145144538 50404205406 60 61 +CHR_HSCHR17_1_CTG4 83264766 50551769109 60 61 +CHR_HSCHR2_1_CTG7 242193540 50636421710 60 61 +CHR_HSCHR8_2_CTG7 145141868 50882651897 60 61 +CHR_HSCHR5_2_CTG5 181542206 51030212885 60 61 +CHR_HSCHR5_3_CTG5 181538569 51214780883 60 61 +CHR_HSCHR20_1_CTG1 64450183 51399345184 60 61 +CHR_HSCHR7_2_CTG7 159349352 51464869625 60 61 +CHR_HSCHR5_5_CTG1 181539933 51626874888 60 61 +CHR_HG1296_PATCH 190208697 51811440579 60 61 +CHR_HSCHR6_1_CTG2 170833811 52004819509 60 61 +CHR_HSCHR2_1_CTG7_2 242210518 52178500643 60 61 +CHR_HSCHR13_1_CTG8 114368996 52424748101 60 61 +CHR_HSCHR19KIR_ABC08_AB_HAP_C_P_CTG3_1 58618008 52541023376 60 61 +CHR_HG2104_PATCH 248958259 52600618443 60 61 +CHR_HSCHR12_1_CTG2 133281368 52853726097 60 61 +CHR_HSCHR2_1_CTG1 242194896 52989228910 60 61 +CHR_HSCHR4_2_CTG12 190206797 53235460478 60 61 +CHR_HSCHR12_6_CTG2_1 133275361 53428837483 60 61 +CHR_HSCHR7_1_CTG6 159351981 53564334189 60 61 +CHR_HSCHR20_1_CTG2 64441059 53726342126 60 61 +CHR_HSCHR17_12_CTG4 83271781 53791857302 60 61 +CHR_HSCHR21_4_CTG1_1 46719541 53876517040 60 61 +CHR_HSCHR3_5_CTG2_1 198300594 53924015333 60 61 +CHR_HSCHR4_1_CTG8_1 190218838 54125621029 60 61 +CHR_HSCHR18_4_CTG1_1 80378406 54319010274 60 61 +CHR_HSCHR2_4_CTG7_2 242196589 54400728413 60 61 +CHR_HSCHR1_2_CTG31 248971826 54646961702 60 61 +CHR_HSCHR2_3_CTG7_2 242194557 54900083151 60 61 +CHR_HSCHR1_1_CTG11 248961539 55146314374 60 61 +CHR_HSCHR12_2_CTG1 133282237 55399425370 60 61 +CHR_HSCHR3_3_CTG1 198300110 55534929066 60 61 +CHR_HG2217_PATCH 135086621 55736534270 60 61 +CHR_HSCHR17_9_CTG4 83263791 55873872424 60 61 +CHR_HSCHR11_2_CTG1 135093444 55958524035 60 61 +CHR_HG2133_PATCH 198299611 56095869129 60 61 +CHR_HSCHR18_1_CTG2 80386177 56297473823 60 61 +CHR_HSCHR13_1_CTG6 114367169 56379199860 60 61 +CHR_HSCHR8_7_CTG7 145147686 56495473245 60 61 +CHR_HSCHR22_1_CTG5 50821308 56643040149 60 61 +CHR_HSCHR5_3_CTG1_1 181554865 56694708571 60 61 +CHR_HG2062_PATCH 57262172 56879289442 60 61 +CHR_HG1311_PATCH 50818486 56937506075 60 61 +CHR_HSCHR19KIR_CA04_CTG3_1 58537114 56989171649 60 61 +CHR_HSCHR19KIR_0010-5217-AB_CTG3_1 58538377 57048684511 60 61 +CHR_HG2499_PATCH 102001626 57108198620 60 61 +CHR_HSCHR22_1_CTG2 50788525 57211900363 60 61 +CHR_HSCHR2_2_CTG7_2 242199609 57263535456 60 61 +CHR_HG2442_PATCH 80379182 57509771817 60 61 +CHR_HSCHR4_2_CTG4 190217898 57591490749 60 61 +CHR_HSCHR17_3_CTG4 83269063 57784879035 60 61 +CHR_HG1395_PATCH 181537525 57869536008 60 61 +CHR_HSCHR16_2_CTG3_1 90343477 58054099252 60 61 +CHR_HSCHR17_6_CTG4 83246071 58145948543 60 61 +CHR_HG2247_PATCH 133274000 58230582141 60 61 +CHR_HG2242_HG2243_PATCH 133797297 58366077481 60 61 +CHR_HG1384_PATCH 242195459 58502104825 60 61 +CHR_HSCHR5_1_CTG1 181558402 58748336963 60 61 +CHR_HSCHR21_5_CTG2 46712294 58932921428 60 61 +CHR_HSCHR6_1_CTG10 170810830 58980412359 60 61 +CHR_HSCHR16_5_CTG3_1 90338377 59154070138 60 61 +CHR_HSCHR6_8_CTG1 170813052 59245914243 60 61 +CHR_HSCHR12_5_CTG2_1 133279478 59419574274 60 61 +CHR_HSCHR6_1_CTG9 170815583 59555075165 60 61 +CHR_HSCHR21_3_CTG1_1 46715777 59728737768 60 61 +CHR_HSCHR22_2_CTG1 50830603 59776232231 60 61 +CHR_HG563_PATCH 170759097 59827910101 60 61 +CHR_HSCHR9_1_CTG2 138402913 60001515271 60 61 +CHR_HSCHR2_3_CTG1 242195626 60142224988 60 61 +CHR_HSCHR17_5_CTG4 83247119 60388457297 60 61 +CHR_HG1507_PATCH 155996656 60473091960 60 61 +CHR_HSCHR11_1_CTG3 135090275 60631688651 60 61 +CHR_HG1524_PATCH 114315104 60769030523 60 61 +CHR_HG2047_PATCH 133275304 60885250971 60 61 +CHR_HSCHR16_4_CTG1 90340369 61020747620 60 61 +CHR_HSCHR21_1_CTG1_1 46722569 61112593755 60 61 +CHR_HSCHR19_5_CTG2 58619095 61160095123 60 61 +CHR_HSCHR9_1_CTG4 138405815 61219691291 60 61 +CHR_HSCHR16_5_CTG1 90344275 61360403967 60 61 +CHR_HSCHR20_1_CTG4 64446453 61452254069 60 61 +CHR_HG1320_PATCH 83207673 61517774721 60 61 +CHR_HSCHR12_7_CTG2_1 133289478 61602369283 60 61 +CHR_HG1299_PATCH 190201596 61737880345 60 61 +CHR_HSCHR19_4_CTG2 58619803 61931252057 60 61 +CHR_HSCHR1_4_CTG32_1 248958766 61990848951 60 61 +CHR_HG1531_PATCH 57177176 62243957121 60 61 +CHR_HG1521_PATCH 135087279 62302087342 60 61 +CHR_HG460_PATCH 248955838 62439426166 60 61 +CHR_HSCHR19_2_CTG3_1 58618601 62692531361 60 61 +CHR_HSCHR12_5_CTG2 133275237 62752127029 60 61 +CHR_HSCHR13_1_CTG5 114365350 62887623610 60 61 +CHR_HSCHR8_6_CTG7 145141837 63003895138 60 61 +CHR_HG2216_PATCH 114376428 63151456098 60 61 +CHR_HG1506_PATCH 155994589 63267738892 60 61 +CHR_HG613_PATCH 138394874 63426333481 60 61 +CHR_HG1466_PATCH 155848651 63567035029 60 61 +CHR_HG1509_PATCH 155994530 63725481250 60 61 +CHR_HG2241_PATCH 133792722 63884075781 60 61 +CHR_HG494_PATCH 50818473 64020098471 60 61 +CHR_HG1817_1_PATCH 114369395 64071764015 60 61 +KI270728.1 1872759 64188039635 60 61 +KI270727.1 448248 64189943674 60 61 +KI270442.1 392061 64190399460 60 61 +KI270729.1 280839 64190798123 60 61 +GL000225.1 211173 64191083710 60 61 +KI270743.1 210658 64191298470 60 61 +GL000008.2 209709 64191512706 60 61 +GL000009.2 201709 64191725978 60 61 +KI270747.1 198735 64191931116 60 61 +KI270722.1 194050 64192133231 60 61 +GL000194.1 191469 64192330583 60 61 +KI270742.1 186739 64192525311 60 61 +GL000205.2 185591 64192715230 60 61 +GL000195.1 182896 64192903982 60 61 +KI270736.1 181920 64193089994 60 61 +KI270733.1 179772 64193275013 60 61 +GL000224.1 179693 64193457849 60 61 +GL000219.1 179198 64193640604 60 61 +KI270719.1 176845 64193822856 60 61 +GL000216.2 176608 64194002716 60 61 +KI270712.1 176043 64194182335 60 61 +KI270706.1 175055 64194361380 60 61 +KI270725.1 172810 64194539420 60 61 +KI270744.1 168472 64194715178 60 61 +KI270734.1 165050 64194886525 60 61 +GL000213.1 164239 64195054393 60 61 +GL000220.1 161802 64195221437 60 61 +KI270715.1 161471 64195386003 60 61 +GL000218.1 161147 64195550233 60 61 +KI270749.1 158759 64195714133 60 61 +KI270741.1 157432 64195875605 60 61 +GL000221.1 155397 64196035728 60 61 +KI270716.1 153799 64196193782 60 61 +KI270731.1 150754 64196350212 60 61 +KI270751.1 150742 64196503546 60 61 +KI270750.1 148850 64196656868 60 61 +KI270519.1 138126 64196808266 60 61 +GL000214.1 137718 64196948762 60 61 +KI270708.1 127682 64197088843 60 61 +KI270730.1 112551 64197218721 60 61 +KI270438.1 112505 64197333215 60 61 +KI270737.1 103838 64197447663 60 61 +KI270721.1 100316 64197553299 60 61 +KI270738.1 99375 64197655353 60 61 +KI270748.1 93321 64197756451 60 61 +KI270435.1 92983 64197851394 60 61 +GL000208.1 92689 64197945993 60 61 +KI270538.1 91309 64198040293 60 61 +KI270756.1 79590 64198133190 60 61 +KI270739.1 73985 64198214173 60 61 +KI270757.1 71251 64198289458 60 61 +KI270709.1 66860 64198361963 60 61 +KI270746.1 66486 64198430004 60 61 +KI270753.1 62944 64198497665 60 61 +KI270589.1 44474 64198561725 60 61 +KI270726.1 43739 64198607007 60 61 +KI270735.1 42811 64198651541 60 61 +KI270711.1 42210 64198695132 60 61 +KI270745.1 41891 64198738112 60 61 +KI270714.1 41717 64198780768 60 61 +KI270732.1 41543 64198823247 60 61 +KI270713.1 40745 64198865549 60 61 +KI270754.1 40191 64198907040 60 61 +KI270710.1 40176 64198947967 60 61 +KI270717.1 40062 64198988879 60 61 +KI270724.1 39555 64199029675 60 61 +KI270720.1 39050 64199069956 60 61 +KI270723.1 38115 64199109723 60 61 +KI270718.1 38054 64199148540 60 61 +KI270317.1 37690 64199187295 60 61 +KI270740.1 37240 64199225680 60 61 +KI270755.1 36723 64199263607 60 61 +KI270707.1 32032 64199301009 60 61 +KI270579.1 31033 64199333641 60 61 +KI270752.1 27745 64199365258 60 61 +KI270512.1 22689 64199393532 60 61 +KI270322.1 21476 64199416666 60 61 +GL000226.1 15008 64199438566 60 61 +KI270311.1 12399 64199453891 60 61 +KI270366.1 8320 64199466562 60 61 +KI270511.1 8127 64199475086 60 61 +KI270448.1 7992 64199483414 60 61 +KI270521.1 7642 64199491605 60 61 +KI270581.1 7046 64199499440 60 61 +KI270582.1 6504 64199506669 60 61 +KI270515.1 6361 64199513347 60 61 +KI270588.1 6158 64199519880 60 61 +KI270591.1 5796 64199526206 60 61 +KI270522.1 5674 64199532164 60 61 +KI270507.1 5353 64199537998 60 61 +KI270590.1 4685 64199543506 60 61 +KI270584.1 4513 64199548335 60 61 +KI270320.1 4416 64199552989 60 61 +KI270382.1 4215 64199557544 60 61 +KI270468.1 4055 64199561895 60 61 +KI270467.1 3920 64199566083 60 61 +KI270362.1 3530 64199570134 60 61 +KI270517.1 3253 64199573788 60 61 +KI270593.1 3041 64199577161 60 61 +KI270528.1 2983 64199580318 60 61 +KI270587.1 2969 64199583416 60 61 +KI270364.1 2855 64199586500 60 61 +KI270371.1 2805 64199589468 60 61 +KI270333.1 2699 64199592385 60 61 +KI270374.1 2656 64199595194 60 61 +KI270411.1 2646 64199597960 60 61 +KI270414.1 2489 64199600716 60 61 +KI270510.1 2415 64199603312 60 61 +KI270390.1 2387 64199605833 60 61 +KI270375.1 2378 64199608325 60 61 +KI270420.1 2321 64199610808 60 61 +KI270509.1 2318 64199613233 60 61 +KI270315.1 2276 64199615655 60 61 +KI270302.1 2274 64199618034 60 61 +KI270518.1 2186 64199620411 60 61 +KI270530.1 2168 64199622699 60 61 +KI270304.1 2165 64199624969 60 61 +KI270418.1 2145 64199627236 60 61 +KI270424.1 2140 64199629482 60 61 +KI270417.1 2043 64199631723 60 61 +KI270508.1 1951 64199633866 60 61 +KI270303.1 1942 64199635915 60 61 +KI270381.1 1930 64199637955 60 61 +KI270529.1 1899 64199639983 60 61 +KI270425.1 1884 64199641979 60 61 +KI270396.1 1880 64199643960 60 61 +KI270363.1 1803 64199645937 60 61 +KI270386.1 1788 64199647836 60 61 +KI270465.1 1774 64199649719 60 61 +KI270383.1 1750 64199651588 60 61 +KI270384.1 1658 64199653433 60 61 +KI270330.1 1652 64199655184 60 61 +KI270372.1 1650 64199656929 60 61 +KI270548.1 1599 64199658672 60 61 +KI270580.1 1553 64199660363 60 61 +KI270387.1 1537 64199662007 60 61 +KI270391.1 1484 64199663635 60 61 +KI270305.1 1472 64199665209 60 61 +KI270373.1 1451 64199666771 60 61 +KI270422.1 1445 64199668312 60 61 +KI270316.1 1444 64199669847 60 61 +KI270340.1 1428 64199671381 60 61 +KI270338.1 1428 64199672898 60 61 +KI270583.1 1400 64199674415 60 61 +KI270334.1 1368 64199675904 60 61 +KI270429.1 1361 64199677360 60 61 +KI270393.1 1308 64199678809 60 61 +KI270516.1 1300 64199680204 60 61 +KI270389.1 1298 64199681591 60 61 +KI270466.1 1233 64199682976 60 61 +KI270388.1 1216 64199684295 60 61 +KI270544.1 1202 64199685597 60 61 +KI270310.1 1201 64199686885 60 61 +KI270412.1 1179 64199688172 60 61 +KI270395.1 1143 64199689436 60 61 +KI270376.1 1136 64199690664 60 61 +KI270337.1 1121 64199691884 60 61 +KI270335.1 1048 64199693089 60 61 +KI270378.1 1048 64199694220 60 61 +KI270379.1 1045 64199695351 60 61 +KI270329.1 1040 64199696479 60 61 +KI270419.1 1029 64199697602 60 61 +KI270336.1 1026 64199698714 60 61 +KI270312.1 998 64199699822 60 61 +KI270539.1 993 64199700901 60 61 +KI270385.1 990 64199701975 60 61 +KI270423.1 981 64199703046 60 61 +KI270392.1 971 64199704108 60 61 +KI270394.1 970 64199705160 60 61 diff --git a/src/SOPRANO/hla2ip.py b/src/SOPRANO/hla2ip.py new file mode 100755 index 0000000..8916e64 --- /dev/null +++ b/src/SOPRANO/hla2ip.py @@ -0,0 +1,113 @@ +import pathlib +from typing import List + +from SOPRANO.utils.path_utils import Directories +from SOPRANO.utils.sh_utils import pipe + + +def join_hla_alleles(*hla_alleles): + updated_hla_alleles = [] + + for allele in hla_alleles: + if not allele.startswith("HLA-"): + allele = f"HLA-{allele}".upper() + updated_hla_alleles.append(allele) + + return r"\|".join(updated_hla_alleles) + + +def join_transcript_ids(transcript_ids: List[str]): + return r"\|".join(transcript_ids) + + +def prior_filter_restrictions( + transcript_ids: List[str], output_path: pathlib.Path +): + tmp_path = output_path.with_suffix(".tmp") + hla_binders_path = Directories.data("allhlaBinders_exprmean1.IEDBpeps.bed") + print(f"Retaining transcripts {join_transcript_ids(transcript_ids)}") + pipe( + [ + "grep", + "-w", + "-e", + join_transcript_ids(transcript_ids), + hla_binders_path.as_posix(), + ], + output_path=tmp_path, + overwrite=True, + ) + return tmp_path + + +def prior_filter_exclusions( + transcript_ids: List[str], output_path: pathlib.Path | None = None +): + assert output_path is not None + + tmp_path = output_path.with_suffix(".tmp") + hla_binders_path = Directories.data("allhlaBinders_exprmean1.IEDBpeps.bed") + print(f"Excluding transcripts {join_transcript_ids(transcript_ids)}") + pipe( + [ + "grep", + "-v", + "-w", + "-e", + join_transcript_ids(transcript_ids), + hla_binders_path.as_posix(), + ], + output_path=tmp_path, + overwrite=True, + ) + return tmp_path + + +def immunopeptidome_from_hla( + *hla_alleles: str, + output_name: str, + cache_loc: pathlib.Path | None = None, + restricted_transcript_ids: List[str] = [], + excluded_transcript_ids: List[str] = [], +): + if not output_name.endswith(".bed"): + output_name = f"{output_name}.bed" + + if cache_loc is None: + cache_loc = Directories.app_immunopeptidomes() + + output_path = cache_loc / output_name + + n_restricted = len(restricted_transcript_ids) + n_excluded = len(excluded_transcript_ids) + + if (n_restricted > 0) and (n_excluded > 0): + raise ValueError( + "Cannot restrict and exclude transcripts simultaneously" + ) + elif n_restricted > 0: + use_input = prior_filter_restrictions( + restricted_transcript_ids, output_path=output_path + ) + elif n_excluded > 0: + print(excluded_transcript_ids, output_path) + use_input = prior_filter_exclusions( + excluded_transcript_ids, output_path=output_path + ) + else: + use_input = Directories.data("allhlaBinders_exprmean1.IEDBpeps.bed") + + joined_alleles = join_hla_alleles(*hla_alleles) + + print(f"Filtering by alleles: {joined_alleles}") + + pipe( + ["grep", "-w", "-e", joined_alleles, use_input.as_posix()], + ["sortBed", "-i", "stdin"], + ["mergeBed", "-i", "stdin"], + output_path=output_path, + ) + + tmp_path = output_path.with_suffix(".tmp") + tmp_path.unlink(missing_ok=True) + print(f"All done: {output_path.as_posix()}") diff --git a/src/SOPRANO/local.yml b/src/SOPRANO/local.yml index 83b1be0..ca66ee0 100755 --- a/src/SOPRANO/local.yml +++ b/src/SOPRANO/local.yml @@ -1,14 +1,14 @@ -name: soprano-dev channels: - conda-forge - bioconda + - anaconda dependencies: - perl - - ensembl-vep=110.1 + - ensembl-vep>=110 - bedtools=2.31.0 - ca-certificates - openssl - samtools - coreutils # [osx] - - python==3.11 + - python>=3.10,<3.12 - pip \ No newline at end of file diff --git a/src/SOPRANO/pipeline.py b/src/SOPRANO/pipeline.py index 0837a60..ff8ce8b 100755 --- a/src/SOPRANO/pipeline.py +++ b/src/SOPRANO/pipeline.py @@ -4,12 +4,15 @@ _build_flag_file, _check_triplet_counts, _col_correct, - _compute_theoretical_subs, + _compute_theoretical_subs_7, + _compute_theoretical_subs_192, _context_correction, - _correct_from_total_sites, + _correct_from_total_sites_ssb7, + _correct_from_total_sites_ssb192, _fix_simulated, _initial_triplet_counts, _sum_possible_across_region, + _transform_192_to_7, ) from SOPRANO.core.dnds import _compute_coverage, _intersect_introns from SOPRANO.core.intersect import ( @@ -35,7 +38,7 @@ _exclude_positively_selected_genes_disabled, _get_protein_complement, _non_randomized, - _prep_not_ssb192, + _prep_ssb7, _prep_ssb192, _randomize_with_target_file, _sort_excluded_regions_for_randomization, @@ -141,25 +144,17 @@ def _apply(self, params: Parameters): _get_protein_complement(params) -class _SSB192Selection(_PipelineComponent): - """Intermediate class for ssb192 mutrate selection""" +class PrepSSBSelection(_PipelineComponent): + msg = "Preparing coordinates" def check_ready(self, params: Parameters): _check_paths(params.epitopes) - -class UseSSB192(_SSB192Selection): - msg = "Preparing CDS coordinates using SSB 192 substitution" - - def _apply(self, params: Parameters): - _prep_ssb192(params) - - -class NotSSB192(_SSB192Selection): - msg = "Preparing CDS coordinates using SSB 7 substitution" - def _apply(self, params: Parameters): - _prep_not_ssb192(params) + if params.use_ssb192: + _prep_ssb192(params) + else: + _prep_ssb7(params) class BuildIntraEpitopesCDS(_PipelineComponent): @@ -204,8 +199,8 @@ def _apply(self, params: Parameters): ) -class ComputeSSB192TheoreticalSubs(_PipelineComponent): - msg = "Computing all theoretical substitutions for SSB192" +class ComputeTheoreticalSubs(_PipelineComponent): + msg = "Computing all theoretical substitutions" def check_ready(self, params: Parameters): _check_paths( @@ -216,10 +211,13 @@ def check_ready(self, params: Parameters): ) def _apply(self, params: Parameters): - _compute_theoretical_subs( - params.epitopes_cds_fasta, params.epitopes_trans_regs - ) - _compute_theoretical_subs( + if params.use_ssb192: + method = _compute_theoretical_subs_192 + else: + method = _compute_theoretical_subs_7 + + method(params.epitopes_cds_fasta, params.epitopes_trans_regs) + method( params.intra_epitopes_cds_fasta, params.intra_epitopes_trans_regs ) @@ -243,7 +241,6 @@ def _apply(self, params: Parameters): class FixSimulated(_PipelineComponent): - msg = "Processing VEP annotated file to estimated 192 rate parameters" # TODO: Fix msg def check_ready(self, params: Parameters): @@ -299,6 +296,9 @@ def check_ready(self, params: Parameters): def _apply(self, params: Parameters): _initial_triplet_counts(params) + if not params.use_ssb192: + _transform_192_to_7(params) + class SiteCorrections(_PipelineComponent): msg = "Performing site corrections" @@ -312,7 +312,10 @@ def check_ready(self, params: Parameters): _check_triplet_counts(params) def _apply(self, params: Parameters): - _correct_from_total_sites(params) + if params.use_ssb192: + _correct_from_total_sites_ssb192(params) + else: + _correct_from_total_sites_ssb7(params) class IntersectByFrequency(_PipelineComponent): @@ -511,28 +514,18 @@ def run_pipeline(params: Parameters): jobs.append(GeneExclusionsDisabled()) jobs.append(BuildProteinComplement()) - - if params.use_ssb192: - jobs.append(UseSSB192()) - else: - jobs.append(NotSSB192()) - + jobs.append(PrepSSBSelection()) jobs.append(BuildIntraEpitopesCDS()) jobs.append(ObtainFastaRegions()) jobs.append(GetTranscriptRegionsForSites()) - - if params.use_ssb192: - jobs.append(ComputeSSB192TheoreticalSubs()) - jobs.append(SumPossibleAcrossRegions()) - jobs.append(FixSimulated()) - jobs.append(ColumnCorrect()) - jobs.append(ContextCorrection()) - jobs.append(FlagComputations()) - jobs.append(TripletCounts()) - jobs.append(SiteCorrections()) - else: - raise KeyError("SSB7 requires implementation") - + jobs.append(ComputeTheoreticalSubs()) + jobs.append(SumPossibleAcrossRegions()) + jobs.append(FixSimulated()) + jobs.append(ColumnCorrect()) + jobs.append(ContextCorrection()) + jobs.append(FlagComputations()) + jobs.append(TripletCounts()) + jobs.append(SiteCorrections()) jobs.append(IntersectByFrequency()) jobs.append(GetSilentCounts()) jobs.append(GetNonSilentCounts()) diff --git a/src/SOPRANO/run.py b/src/SOPRANO/run.py index 1a1fe93..6cbfbb8 100755 --- a/src/SOPRANO/run.py +++ b/src/SOPRANO/run.py @@ -1,8 +1,9 @@ import subprocess +from SOPRANO import hla2ip from SOPRANO.core import objects from SOPRANO.pipeline import run_pipeline -from SOPRANO.utils.parse_utils import parse_args, parse_genome_args +from SOPRANO.utils.parse_utils import parse_args, parse_genome_args, parse_hla from SOPRANO.utils.path_utils import Directories from SOPRANO.utils.print_utils import startup_output from SOPRANO.utils.vep_utils import ( @@ -31,19 +32,34 @@ def link_vep_cache(): def download_genome(): - ref, release = parse_genome_args() - startup_output() - downloader_path = Directories.installers("download_homo_sapiens.sh") - data_dir = Directories.homo_sapien_genomes(f"{release}_{ref}") + args = parse_genome_args() + startup_output(**args.__dict__) + print("Starting download...") - if not data_dir.exists(): - data_dir.mkdir(parents=True) + if args.assembly == "GRCh37": + assert args.species == "homo_sapiens" + ensembl_data = objects.EnsemblData.homo_sapiens_GRCh37() + else: + ensembl_data = objects.EnsemblData(args.species, args.assembly) - assert downloader_path.exists(), downloader_path - assert data_dir.exists(), data_dir + if args.primary_assembly: + ensembl_data.download_primary_assembly(args.release) + if not args.download_only: + ensembl_data.compute_all_primary_assembly(args.release) + else: + ensembl_data.download_toplevel(args.release) + if not args.download_only: + ensembl_data.compute_all_toplevel(args.release) - subprocess.run( - ["bash", downloader_path.as_posix(), ref, release, data_dir.as_posix()] + +def hla2pip(): + args = parse_hla() + hla2ip.immunopeptidome_from_hla( + *args.hla_values, + output_name=args.output_id, + cache_loc=args.cache_dir, + restricted_transcript_ids=args.restricted_transcript_ids, + excluded_transcript_ids=args.excluded_transcript_ids, ) diff --git a/src/SOPRANO/run_localSSBselection_v4.sh b/src/SOPRANO/run_localSSBselection_v4.sh index db10d03..f48e2e1 100755 --- a/src/SOPRANO/run_localSSBselection_v4.sh +++ b/src/SOPRANO/run_localSSBselection_v4.sh @@ -7,10 +7,10 @@ BASEDIR=/mnt/c/Users/kmarzouk/software/SOPRANO/src/SOPRANO SUPA=$BASEDIR/data TRANS=$BASEDIR/data/ensemble_transcriptID.fasta -TMP=$BASEDIR/tmp -__DATA=/mnt/c/Users/kmarzouk/software/SOPRANO/src/SOPRANO/data +TMP=/home/kareem/SOPRANO_CACHE_TMP/tmp # $BASEDIR/tmp +__DATA=/mnt/c/Users/kmarzouk/software/SOPRANO/src/SOPRANO/data/homo_sapiens/110_GRCh37 FASTA=$__DATA/Homo_sapiens.GRCh37.dna.toplevel.fa -GENOME=$__DATA/chrom_GRCh37.sizes +GENOME=$__DATA/Homo_sapiens.GRCh37.dna.toplevel.chrom ###Check arguments before running diff --git a/src/SOPRANO/scripts/calculate_sites_signaturesLZ.pl b/src/SOPRANO/scripts/calculate_sites_signaturesLZ.pl old mode 100644 new mode 100755 diff --git a/src/SOPRANO/shell_utils/download_homo_sapiens.sh b/src/SOPRANO/shell_utils/download_homo_sapiens.sh deleted file mode 100755 index 2d53fca..0000000 --- a/src/SOPRANO/shell_utils/download_homo_sapiens.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/bash - -ref=$1 -release=$2 -data_dir=$3 - -if [ "$ref" == "GRCh37" ] -then - baseurl="https://ftp.ensembl.org/pub/grch37/release-$release/fasta/homo_sapiens/dna" -elif [ "$ref" == "GRCh38" ] -then - baseurl="https://ftp.ensembl.org/pub/release-$release/fasta/homo_sapiens/dna" -else - echo "Genome ref $ref not configured" - exit 1 -fi - -# Define filenames, urls and target paths - -# Basenames -toplevel_basename="Homo_sapiens.$ref.dna.toplevel" -primary_basename="Homo_sapiens.$ref.dna.primary_assembly" - -# fasta files -toplevel_fa="$toplevel_basename.fa" -toplevel_fa_path="$data_dir/$toplevel_fa" -primary_fa="$primary_basename.fa" -primary_fa_path="$data_dir/$primary_fa" - -# compressed fasta files -toplevel_gz="$toplevel_fa.gz" -toplevel_gz_path="$data_dir/$toplevel_gz" -primary_gz="$primary_fa.gz" -primary_gz_path="$data_dir/$primary_gz" - -# fasta index files -toplevel_fai="$toplevel_fa.fai" -toplevel_fai_path="$data_dir/$toplevel_fai" - -# chrom files -toplevel_chrom="$toplevel_basename.chrom" -toplevel_chrom_path="$data_dir/$toplevel_chrom" - -# source urls -toplevel_url="$baseurl/$toplevel_gz" -primary_url="$baseurl/$primary_gz" - - -# Download compressed toplevel fasta file if decompressed version not found -if [ ! -f "$toplevel_fa_path" ] -then - echo "Download $ref toplevel reference file? [Enter 'y' to download]" - read response - - if [ "$response" == "y" ] - then - echo "downloading $toplevel_url to $toplevel_gz_path" - wget "$toplevel_url" -O "$toplevel_gz_path" && echo "download complete." - - echo "decompressing $toplevel_gz_path to $toplevel_fa_path" - gunzip -c "$toplevel_gz_path" > "$toplevel_fa_path" && echo "decompression complete." - - echo "removing compressed file $toplevel_gz_path" - rm "$toplevel_gz_path" - else - echo "Interpreting $response as 'No'" - fi -else - echo "$ref toplevel reference already detected: $toplevel_fa_path" -fi - -# Download compressed primary fasta file if decompressed version not found -if [ ! -f "$primary_fa_path" ] -then - echo "Download $ref primary assembly reference file? [Enter 'y' to download]" - read response - - if [ "$response" == "y" ] - then - echo "downloading $primary_url to $primary_gz_path" - wget "$primary_url" -O "$primary_gz_path" && echo "download complete." - - echo "decompressing $primary_gz_path to $primary_fa_path" - gunzip -c "$primary_gz_path" > "$primary_fa_path" && echo "decompression complete." - - echo "removing compressed file $primary_gz_path" - rm "$primary_gz_path" - else - echo "Interpreting $response as 'No'" - fi -else - echo "$ref primary assembly reference already detected: $primary_fa_path" -fi - -# Run samtools faidx against fasta file if fasta index not found -if [ ! -f "$toplevel_fai_path" ] -then - echo "building fasta index file: $toplevel_fai_path" - samtools faidx "$toplevel_fa_path" -o "$toplevel_fai_path" -else - echo "fasta index file already detected: $toplevel_fai_path" -fi - -# Compute chrom sizes from fasta index file if not found -if [ ! -f "$toplevel_chrom_path" ] -then - echo "computing chrom sizes: $toplevel_chrom_path" - cut -f1,2 "$toplevel_fai_path" > "$toplevel_chrom_path" -else - echo "chrom sizes file already detected: $toplevel_chrom_path" -fi \ No newline at end of file diff --git a/src/SOPRANO/shell_utils/setup_data.sh b/src/SOPRANO/shell_utils/setup_data.sh deleted file mode 100755 index 4b1377f..0000000 --- a/src/SOPRANO/shell_utils/setup_data.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -fasta_file="$DATA_DIR_PATH/ensemble_transcriptID.fasta" -zipped_fasta_file="$DATA_DIR_PATH/ensemble_transcriptID.fasta.gz" - -if [ ! -f "$fasta_file" ] -then - echo "-- decompressing transcript IDs" - gunzip -k "$zipped_fasta_file" - echo "-- decompressed: $fasta_file" -else - echo "-- decompressed transcript IDs detected: $fasta_file" -fi \ No newline at end of file diff --git a/src/SOPRANO/shell_utils/setup_env.sh b/src/SOPRANO/shell_utils/setup_env.sh deleted file mode 100755 index 7718c03..0000000 --- a/src/SOPRANO/shell_utils/setup_env.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -# Mamba/conda path -_mamba_path=$(which mamba) -_conda_path=$(which conda) -_env_grep=$(conda env list | grep "soprano-dev") - -yml_path="src/SOPRANO/local.yml" - -function deactivate_all() { - for _ in $(seq "${CONDA_SHLVL}") - do - conda deactivate - done -} - -if [ -n "$_mamba_path" ] -then - echo "-- mamba detected" - deactivate_all - - if [ -z "$_env_grep" ] - then - echo "-- building environment" - mamba env create -f $yml_path - echo "-- activating soprano" - mamba activate soprano-dev - else - echo "-- soprano environment detected" - echo "-- activating soprano" - mamba activate soprano-dev - echo "-- checking for updates to environment" - mamba env update --file $yml_path --prune - fi - -elif [ -n "$_conda_path" ] -then - echo "-- conda detected" - deactivate_all - if [ -z "$_env_grep" ] - then - echo "-- building conda environment" - conda env create -f src/SOPRANO/local.yml - echo "-- activating soprano" - conda activate soprano-dev - else - echo "-- soprano environment detected" - echo "-- activating soprano" - conda activate soprano-dev - echo "-- checking for updates to environment" - conda env update --file $yml_path --prune - fi - -else - echo "No conda variant available to build environment!" -fi - -eval "$_PIP_CMD" \ No newline at end of file diff --git a/src/SOPRANO/utils/app_utils.py b/src/SOPRANO/utils/app_utils.py index bf8f817..09ddf4e 100755 --- a/src/SOPRANO/utils/app_utils.py +++ b/src/SOPRANO/utils/app_utils.py @@ -1,5 +1,104 @@ +import os +import pathlib from contextlib import contextmanager, redirect_stdout from io import StringIO +from time import time + +import pandas as pd +import streamlit as st +from streamlit.runtime.uploaded_file_manager import UploadedFile + +from SOPRANO.core.objects import EnsemblData, Parameters +from SOPRANO.hla2ip import immunopeptidome_from_hla +from SOPRANO.pipeline import run_pipeline +from SOPRANO.utils.parse_utils import fix_species_arg +from SOPRANO.utils.path_utils import Directories +from SOPRANO.utils.sh_utils import pipe +from SOPRANO.utils.vep_utils import ( + _get_src_dst_link_pairs, + _link_src_dst_pairs, +) + + +def _lines_ok(lines: list | tuple, min_args: int, max_args: int): + if min_args > max_args: + raise ValueError(f"(min = {min_args}) > (max = {max_args})") + + return min_args <= len(lines) <= max_args + + +def process_text_and_file_inputs( + raw_input: str | UploadedFile | None, + min_args=0, + max_args=int(1e9), + remove_empty_lines=True, +): + if raw_input is None: + return False, None + elif isinstance(raw_input, str): + if raw_input == "": + return False, None + else: + lines = raw_input.split("\n") + else: + lines = StringIO(raw_input.getvalue().decode("utf-8")).readlines() + lines = [line.strip() for line in lines] + + if remove_empty_lines: + lines = [line for line in lines if line != ""] + + status_ok = _lines_ok(lines, min_args, max_args) + + if not status_ok: + st.warning( + f"Number of arguments parsed from input not within bounds " + f"[{min_args}, {max_args}]" + ) + + return status_ok, lines + + +def text_or_file( + desc: str, + min_args: int = 0, + max_args: int = int(1e9), + help_text: str | None = None, + help_upload: str | None = None, +): + raw_text_input = st.text_area(desc, value="", help=help_text) + raw_file_input = st.file_uploader(desc, help=help_upload) + + text_ready, text_input = process_text_and_file_inputs( + raw_text_input, min_args=min_args, max_args=max_args + ) + file_ready, file_input = process_text_and_file_inputs( + raw_file_input, min_args=min_args, max_args=max_args + ) + + if text_ready == file_ready: + ready = False + content = None + + if text_ready: + st.warning( + "Multiple input selections detected!" + " Provide manual text input OR upload a file." + ) + + elif text_ready: + ready = True + content = text_input + elif file_ready: + ready = True + content = file_input + else: + ready = False + content = None + + assert isinstance(content, list | None), (content, type(content)) + + # Ready status should disable button prompt in UI + return ready, content @contextmanager @@ -20,3 +119,408 @@ def new_write(string): stdout.write = new_write yield + + +def _select_from_dict(selection: str, selection_dict: dict): + selection_value = selection_dict[selection] + st.text(f"Selected: {selection_value}") + return selection_value + + +class _PipelineUI: + @staticmethod + def genome_reference(*args, **kwargs): + pass + + @staticmethod + def annotated_mutations(*args, **kwargs): + pass + + @staticmethod + def immunopeptidome(*args, **kwargs): + pass + + @staticmethod + def substitution_method(*args, **kwargs): + pass + + @staticmethod + def coordinates(*args, **kwargs): + pass + + @staticmethod + def cache(*args, **kwargs): + pass + + +class PipelineUIOptions(_PipelineUI): + @staticmethod + def genome_reference(): + homo_sapiens_dir = Directories.genomes_homo_sapiens() + + genome_dirs = [ + item for item in homo_sapiens_dir.glob("*") if item.is_dir() + ] + + # Remove bad options (i.e. no toplevel fa and chrom files) + for item in genome_dirs[::-1]: + toplevel_path = item.glob("*dna*toplevel*.fa") + chrom_path = item.glob("*dna*toplevel*.chrom") + + if len(list(toplevel_path)) == len(list(chrom_path)) == 1: + pass + else: + genome_dirs.remove(item) + + genome_ids = [ + "{} - Ensembl release {}".format(*x.name.split("_")[::-1]) + for x in genome_dirs + ] + + options_dict = { + name: dir_path for name, dir_path in zip(genome_ids, genome_dirs) + } + + return options_dict + + @staticmethod + def annotated_mutations(): + options_dict = {} + for directory in ( + Directories.examples(), + Directories.app_annotated_inputs(), + ): + for x in directory.glob("*.anno*"): + options_dict[x.name] = x + return options_dict + + @staticmethod + def immunopeptidome(): + options_dict = {} + for directory in ( + Directories.immunopeptidomes_humans(), + Directories.app_immunopeptidomes(), + ): + for x in directory.glob("*.bed"): + options_dict[x.name] = x + return options_dict + + @staticmethod + def substitution_method(): + return {"SSB192": 192, "SSB7": 7} + + @staticmethod + def coordinates(): + options_dict = {None: None} + for x in Directories.app_coordinate_files().glob("*.bed"): + options_dict[x.name] = x + return options_dict + + +class PipelineUIProcessing(_PipelineUI): + @staticmethod + def genome_reference(genome_selection: str | None): + if genome_selection is None: + st.warning("Warning: No genome selection.") + return None + + assembly, release = genome_selection.split(" - Ensembl release ") + data = EnsemblData(species="homo_sapiens", assembly=assembly) + fasta_path = data.toplevel_fa_path(int(release)) + chrom_path = data.toplevel_chrom_path(int(release)) + st.text(f"Selected: {fasta_path}, {chrom_path}") + return data.get_genome_reference_paths(int(release)) + + @staticmethod + def annotated_mutations(annotation_selection: str): + options_dict = PipelineUIOptions.annotated_mutations() + return _select_from_dict(annotation_selection, options_dict) + + @staticmethod + def immunopeptidome(immunopeptidome_selection: str): + options_dict = PipelineUIOptions.immunopeptidome() + return _select_from_dict(immunopeptidome_selection, options_dict) + + @staticmethod + def substitution_method(subs_selection: str): + options_dict = PipelineUIOptions.substitution_method() + return _select_from_dict(subs_selection, options_dict) + + @staticmethod + def coordinates(coordinates_selection: str): + options_dict = PipelineUIOptions.coordinates() + return _select_from_dict(coordinates_selection, options_dict) + + @staticmethod + def job_name(job_name: str): + cache_dir = Directories.cache(job_name) + st.text(f"Selected: {cache_dir}") + return cache_dir + + @staticmethod + def cache(cache_selected: str): + if os.path.exists(cache_selected): + os.environ["SOPRANO_CACHE"] = cache_selected + st.text(f"Selected: {cache_selected}") + else: + st.warning(f"Cache directory does not exist: {cache_selected}") + return cache_selected + + +class _LinkVEPUI: + @staticmethod + def cache_location(*args, **kwargs): + pass + + +class LinkVEPUIOptions(_LinkVEPUI): + pass + + +class LinkVEPUIProcessing(_LinkVEPUI): + @staticmethod + def cache_location(cache_location: str): + output = pathlib.Path(cache_location) + st.text(f"Selected: {output}") + return output + + +class _DownloaderUI: + @staticmethod + def species(*args, **kwargs): + pass + + @staticmethod + def assembly(*args, **kwargs): + pass + + @staticmethod + def release(*args, **kwargs): + pass + + @staticmethod + def type(*args, **kwargs): + pass + + +class DownloaderUIOptions(_DownloaderUI): + @staticmethod + def type(): + return "toplevel", "primary_assembly" + + +class DownloaderUIProcessing(_DownloaderUI): + @staticmethod + def species(species_selection: str): + output = fix_species_arg(species_selection) + st.text(f"Selected: {output}") + return output + + @staticmethod + def assembly(assembly_selection: str): + st.text(f"Selected: {assembly_selection}") + return assembly_selection + + @staticmethod + def release(release: str): + output = int(release) + st.text(f"Selected: {output}") + + if output > 110: + st.text("[Warning] Oct 1 2023: Latest Ensembl release is 110") + + return output + + @staticmethod + def type(type_selection: str): + if type_selection not in ("toplevel", "primary_assembly"): + raise ValueError(type_selection) + + st.text(f"Selected: {type_selection}") + return type_selection + + +class _AnnotatorUI: + pass + + +class AnnotatorUIOptions(_AnnotatorUI): + pass + + +class AnnotatorUIProcessing(_AnnotatorUI): + pass + + +class _ImmunopeptidomeUI: + @staticmethod + def hla_alleles(*args, **kwargs): + pass + + @staticmethod + def transcript_ids(*args, **kwargs): + pass + + @staticmethod + def subset_method(*args, **kwargs): + pass + + @staticmethod + def name(*args, **kwargs): + pass + + +class ImmunopeptidomesUIOptions(_ImmunopeptidomeUI): + @staticmethod + def hla_alleles(): + hla_types_path = Directories.examples("TCGA_hlaTypesAll.tsv") + options = pipe( + ["cut", "-f3", hla_types_path.as_posix()], + ["tr", ",", "\n"], + ["sort", "-u"], + ).split("\n") + return options + + @staticmethod + def transcript_ids(): + hla_binders_path = Directories.data( + "allhlaBinders_exprmean1.IEDBpeps.bed.unique_ids" + ) + + with open(hla_binders_path, "r") as f: + transcript_options = f.read() + # eol marker generates empty so excluded + return transcript_options.split("\n")[:-1] + + @staticmethod + def subset_method(): + return "None", "Retention", "Exclusion" + + +class ImmunopeptidomeUIProcessing(_ImmunopeptidomeUI): + @staticmethod + def hla_alleles(alleles_selected: list): + st.text(f"Selected: {sorted(alleles_selected)}") + return alleles_selected + + @staticmethod + def transcript_ids(transcript_ids: list): + st.text(f"Selected: {sorted(transcript_ids)}") + return transcript_ids + + @staticmethod + def subset_method(transcripts: list, method: str): + if len(transcripts) == 0 or method == "None": + st.text("No subset selected.") + return [], [] + elif method == "Retention": + st.text(f"Retaining subset of transcripts: {transcripts}") + return transcripts, [] + elif method == "Exclusion": + st.text(f"Excluding subset of transcripts: {transcripts}") + return [], transcripts + else: + raise ValueError( + f"Method does not belong to options: " + f"{ImmunopeptidomesUIOptions.subset_method()}" + ) + + @staticmethod + def name(name: str): + if not name.endswith(".bed"): + name += ".bed" + + st.text( + f"Output file will be saved to " + f"{Directories.app_immunopeptidomes(name)}" + ) + return name + + +class RunTab: + @staticmethod + def pipeline(params: Parameters): + params.cache_dir.mkdir(exist_ok=True) + output = st.empty() + with st_capture(output.code): + t_start = time() + output = st.empty() + with st_capture(output.code): + run_pipeline(params) + t_end = time() + + data_frame = pd.read_csv(params.results_path, sep="\t") + + st.text(f"Pipeline run in {int(t_end - t_start)} seconds") + st.dataframe(data_frame, hide_index=True) + st.text(f"dN/dS file: {params.results_path}") + + @staticmethod + def link_vep(cache_location: pathlib.Path): + output = st.empty() + with st_capture(output.code): + src_dst_links = _get_src_dst_link_pairs(cache_location) + _link_src_dst_pairs(src_dst_links, _skip_user_input=True) + + @staticmethod + def download( + species: str, assembly: str, release: int, download_type: str + ): + if assembly == "GRCh37": + assert species == "homo_sapiens" + data = EnsemblData.homo_sapiens_GRCh37() + else: + data = EnsemblData(species=species, assembly=assembly) + + t_start = time() + output = st.empty() + with st_capture(output.code): + if download_type == "toplevel": + data.compute_all_toplevel(release) + checks = ( + data.toplevel_gz_done, + data.toplevel_fa_done, + data.toplevel_fai_done, + data.sizes_done, + ) + else: + data.compute_all_primary_assembly(release=release) + checks = ( + data.primary_assembly_gz_done, + data.primary_assembly_fa_done, + data.primary_assembly_fai_done, + {release}, + ) + + process_ok = all([release in check for check in checks]) + st.text(f"All complete: {process_ok}") + t_end = time() + st.text(f"... in {int(t_end - t_start)} seconds") + + @staticmethod + def annotate(*args, **kwargs): + pass + + @staticmethod + def immunopeptidome( + hla_selections, + output_name, + transcripts_retained, + transcripts_excluded, + ): + try: + immunopeptidome_from_hla( + *hla_selections, + output_name=output_name, + restricted_transcript_ids=transcripts_retained, + excluded_transcript_ids=transcripts_excluded, + ) + st.text( + f"Completed: {Directories.app_immunopeptidomes(output_name)}" + ) + except RuntimeError: + st.warning( + "Process failed with currently defined options. This was " + "likely caused by the selected HLA being unavailable in " + "the (filtered) transcript file." + ) diff --git a/src/SOPRANO/utils/parse_utils.py b/src/SOPRANO/utils/parse_utils.py index 3c1f688..621ca36 100755 --- a/src/SOPRANO/utils/parse_utils.py +++ b/src/SOPRANO/utils/parse_utils.py @@ -2,50 +2,67 @@ import pathlib from SOPRANO.core import objects -from SOPRANO.utils.path_utils import check_cli_path +from SOPRANO.utils.path_utils import Directories, check_cli_path -def parse_genome_args(): - parser = argparse.ArgumentParser(description="Genome reference") +def _add_core_genome_args(parser: argparse.ArgumentParser): + parser.add_argument( + "--species", + "-s", + dest="species", + type=str, + help="Ensembl species Latin name. E.g., 'Homo sapiens'/homo_sapiens.", + default="homo_sapiens", + ) parser.add_argument( - "--reference", - "-r", - dest="genome_ref", + "--assembly", + "-a", + dest="assembly", type=str, - help="GRCh37 or GRCh38", - required=True, + help="Ensembl genome assembly ID. E.g., GRCh38.", + default="GRCh38", ) parser.add_argument( "--release", + "-r", dest="release", - type=str, - help="Ensemblv release number, e.g., 109, 110. Defaults to 110.", - default="110", + type=int, + help="Ensembl release number. E.g., 110.", + default=110, ) - ref_release = check_genome(parser.parse_args()) + return parser - return ref_release +def fix_species_arg(species: str) -> str: + return species.replace(" ", "_").lower() -def check_genome(_namespace: argparse.Namespace) -> tuple: - ref = _namespace.genome_ref - release = _namespace.release - available_refs = ("GRCh37", "GRCh38") +def fix_ns_species_arg(_namespace: argparse.Namespace) -> argparse.Namespace: + _namespace.species = fix_species_arg(_namespace.species) + return _namespace + + +def parse_genome_args(argv=None): + parser = argparse.ArgumentParser(description="Genome reference") + parser = _add_core_genome_args(parser) - if ref not in available_refs: - raise ValueError( - f"Reference {ref} not supported. " - f"Permitted choices: {available_refs}" - ) + parser.add_argument( + "--primary_assembly", + "-p", + dest="primary_assembly", + action="store_true", + ) - return ref, release + parser.add_argument( + "--download_only", "-d", dest="download_only", action="store_true" + ) + return fix_ns_species_arg(parser.parse_args(argv)) -def parse_args(): +def parse_args(argv=None): parser = argparse.ArgumentParser(description="SOPRANO input arguments") parser.add_argument( @@ -90,7 +107,7 @@ def parse_args(): analysis_params_group.add_argument( "--random_regions", "-m", - dest="random_regions", # TODO: Update to random_regions + dest="random_regions", type=pathlib.Path, help="Provide a bed file with regions to randomize.", ) @@ -158,32 +175,10 @@ def parse_args(): type=pathlib.Path, ) - genome_args = parser.add_argument_group() - - genome_args.add_argument( - "--reference", - "-r", - dest="genome_ref", - default="GRCh37", - type=str, - help="Reference genome file definition. By default, uses GRCh37. Pass " - "instead GRCh38 if preferred. In order to download the reference " - "fasta file, you can execute the command:\n" - "GET_GENOMES -r GRCh37\n" - "or\n" - "GET_GENOMES -r GRCh38", - ) - - genome_args.add_argument( - "--release", - "-q", - dest="release", - type=str, - help="Ensembl release number, e.g., 109, 110. Defaults to 110.", - default="110", - ) + _add_core_genome_args(parser) - args = parser.parse_args() + args = parser.parse_args(argv) + args = fix_ns_species_arg(args) check_cli_path(args.input_path) check_cli_path(args.bed_path) @@ -192,6 +187,55 @@ def parse_args(): check_cli_path(args.transcript) check_cli_path(args.protein_transcript) check_cli_path(args.transcript_ids) - check_genome(args) return args + + +def parse_hla(argv=None): + parser = argparse.ArgumentParser("Parse HLA parameters") + parser.add_argument( + "--alleles", + "-a", + dest="hla_values", + nargs="+", + type=str, + required=True, + help="Space seperated HLA alleles.", + ) + parser.add_argument( + "--output", + "-o", + dest="output_id", + type=str, + required=True, + help="Identifying name for the output immunopeptidome file.", + ) + parser.add_argument( + "--cache", + "-c", + dest="cache_dir", + type=pathlib.Path, + default=Directories.app_immunopeptidomes(), + ) + parser.add_argument( + "--restrict", + "-r", + dest="restricted_transcript_ids", + nargs="*", + type=str, + required=False, + help="Space seperated Ensembl transcript IDs.", + default=[], + ) + parser.add_argument( + "--excluded", + "-e", + dest="excluded_transcript_ids", + nargs="*", + type=str, + required=False, + help="Space seperated Ensembl transcript IDs.", + default=[], + ) + + return parser.parse_args(argv) diff --git a/src/SOPRANO/utils/path_utils.py b/src/SOPRANO/utils/path_utils.py index 3b60d2c..afb208d 100755 --- a/src/SOPRANO/utils/path_utils.py +++ b/src/SOPRANO/utils/path_utils.py @@ -1,6 +1,7 @@ import os import pathlib +# Common dirs from source root src/SOPRANO _SOPRANO_SRC = pathlib.Path(__file__).parent.parent _SOPRANO_SCRIPTS = _SOPRANO_SRC / "scripts" _SOPRANO_DATA = _SOPRANO_SRC / "data" @@ -8,14 +9,25 @@ _SOPRANO_IMMUNO = _SOPRANO_SRC / "immunopeptidomes" _SOPRANO_IMMUNO_HUMANS = _SOPRANO_IMMUNO / "human" _SOPRANO_EXAMPLES = _SOPRANO_SRC / "examples" +_SOPRANO_INSTALLERS = _SOPRANO_SRC / "shell_utils" + +# Common dirs from repository root _SOPRANO_REPO = _SOPRANO_SRC.parent.parent _SOPRANO_DEFAULT_CACHE = _SOPRANO_REPO / "pipeline_cache" + +# Test dirs _SOPRANO_TESTS = _SOPRANO_REPO / "tests" _SOPRANO_UNIT_TESTS = _SOPRANO_TESTS / "test_units" _SOPRANO_INT_TESTS = _SOPRANO_TESTS / "test_integrations" _SOPRANO_CFG_TESTS = _SOPRANO_TESTS / "test_configuration" -_SOPRANO_INSTALLERS = _SOPRANO_SRC / "shell_utils" +# Common dirs from app sources +_SOPRANO_APP_SOURCES = _SOPRANO_REPO / "app_sources" +_SOPRANO_APP_ANNOTATED_INPUTS = _SOPRANO_APP_SOURCES / "annotated_inputs" +_SOPRANO_APP_IMMUNO = _SOPRANO_APP_SOURCES / "immunopeptidomes" +_SOPRANO_APP_COORDS = _SOPRANO_APP_SOURCES / "coordinate_files" + +# Other system paths _STD_SYS_VEP = pathlib.Path.home() / ".vep" @@ -33,7 +45,7 @@ def data(sub_path_item="") -> pathlib.Path: return _SOPRANO_DATA.joinpath(sub_path_item) @staticmethod - def homo_sapien_genomes(sub_path_item="") -> pathlib.Path: + def genomes_homo_sapiens(sub_path_item="") -> pathlib.Path: return _SOPRANO_HOMO_SAPIENS.joinpath(sub_path_item) @staticmethod @@ -41,7 +53,7 @@ def immunopeptidomes(sub_path_item="") -> pathlib.Path: return _SOPRANO_IMMUNO.joinpath(sub_path_item) @staticmethod - def immuno_humans(sub_path_item="") -> pathlib.Path: + def immunopeptidomes_humans(sub_path_item="") -> pathlib.Path: return _SOPRANO_IMMUNO_HUMANS.joinpath(sub_path_item) @staticmethod @@ -51,12 +63,14 @@ def examples(sub_path_item="") -> pathlib.Path: @staticmethod def cache(sub_path_item="") -> pathlib.Path: if "SOPRANO_CACHE" in os.environ.keys(): - return pathlib.Path(os.environ["SOPRANO_CACHE"]) + active_cache = pathlib.Path(os.environ["SOPRANO_CACHE"]) + else: + if not _SOPRANO_DEFAULT_CACHE.exists(): + _SOPRANO_DEFAULT_CACHE.mkdir() - if not _SOPRANO_DEFAULT_CACHE.exists(): - _SOPRANO_DEFAULT_CACHE.joinpath(sub_path_item).mkdir() + active_cache = _SOPRANO_DEFAULT_CACHE - return _SOPRANO_DEFAULT_CACHE.joinpath(sub_path_item) + return active_cache.joinpath(sub_path_item) @staticmethod def tests(sub_path_item="") -> pathlib.Path: @@ -82,6 +96,22 @@ def installers(sub_path_item="") -> pathlib.Path: def std_sys_vep(sub_path_item="") -> pathlib.Path: return _STD_SYS_VEP.joinpath(sub_path_item) + @staticmethod + def app_sources(sub_path_item="") -> pathlib.Path: + return _SOPRANO_APP_SOURCES.joinpath(sub_path_item) + + @staticmethod + def app_annotated_inputs(sub_path_item="") -> pathlib.Path: + return _SOPRANO_APP_ANNOTATED_INPUTS.joinpath(sub_path_item) + + @staticmethod + def app_coordinate_files(sub_path_item="") -> pathlib.Path: + return _SOPRANO_APP_COORDS.joinpath(sub_path_item) + + @staticmethod + def app_immunopeptidomes(sub_path_item="") -> pathlib.Path: + return _SOPRANO_APP_IMMUNO.joinpath(sub_path_item) + def is_empty(path: pathlib.Path) -> bool: """ @@ -119,7 +149,7 @@ def genome_pars_to_paths(ref, release): :param release: Ensembl release ID :return: Tuple of paths: reference fasta file, chrom sizes """ - data_dir = Directories.homo_sapien_genomes(f"{release}_{ref}") + data_dir = Directories.genomes_homo_sapiens(f"{release}_{ref}") genome_path = data_dir.joinpath(f"Homo_sapiens.{ref}.dna.toplevel.fa") chroms_path = data_dir.joinpath(f"Homo_sapiens.{ref}.dna.toplevel.chrom") return genome_path, chroms_path diff --git a/src/SOPRANO/utils/url_utils.py b/src/SOPRANO/utils/url_utils.py new file mode 100755 index 0000000..b066d64 --- /dev/null +++ b/src/SOPRANO/utils/url_utils.py @@ -0,0 +1,216 @@ +import gzip +import pathlib +import pickle as pk +import shutil +from pathlib import Path + +import requests +from clint.textui import progress + +from SOPRANO.utils.path_utils import Directories +from SOPRANO.utils.print_utils import task_output +from SOPRANO.utils.sh_utils import pipe + +_SOPRANO_ENSEMBL_RELEASES = Directories.data("ensembl.releases") + + +class DownloadError(Exception): + pass + + +class BadResponse(Exception): + pass + + +def filename_from_url(url: str): + return url.split("/")[-1] + + +def download_from_url(url: str, target_path: Path | None = None): + task_output(f"Attempting request from: {url}") + + response = requests.get(url, stream=True) + + if response.status_code != 200: + raise DownloadError(f"Download status code = {response.status_code}") + + if "content-disposition" in response.headers: + content_disposition = response.headers["content-disposition"] + filename = content_disposition.split("filename=")[1] + else: + filename = filename_from_url(url) + + if target_path is None: + target_path = Path.cwd().joinpath(filename) + + task_output(f"Writing content to {target_path.as_posix()}") + + with open(target_path, "wb") as f: + # fmt: off + total_length = int(response.headers.get("content-length")) # type: ignore[arg-type] + # fmt: on + for chunk in progress.bar( + response.iter_content(chunk_size=1024), + expected_size=(total_length / 1024) + 1, + ): + if chunk: + f.write(chunk) + f.flush() + + +def decompress(gz_path: pathlib.Path): + if not gz_path.exists(): + raise FileNotFoundError(gz_path) + + output_path = gz_path.with_suffix("") + + task_output(f"Decompressing {gz_path}") + with gzip.open(gz_path, "rb") as f_in: + with open(output_path, "wb") as f_out: + shutil.copyfileobj(f_in, f_out) + + +def compute_fasta_index(fa_path: pathlib.Path): + if not fa_path.exists(): + raise FileNotFoundError(fa_path) + + index_path = fa_path.with_suffix(".fa.fai") + + task_output(f"Computing fasta index file from {fa_path}") + pipe( + ["samtools", "faidx", fa_path.as_posix(), "-o", index_path.as_posix()] + ) + + +def compute_chrom_sizes(fai_path: pathlib.Path): + if not fai_path.exists(): + raise FileNotFoundError(fai_path) + + if not fai_path.name.endswith(".fa.fai"): + raise ValueError(f"Bad extension: {fai_path}") + + chrom_path = fai_path.with_suffix("").with_suffix(".chrom") + + task_output(f"Computing chromosome sizes from {fai_path}") + pipe(["cut", "-f1,2", fai_path.as_posix()], output_path=chrom_path) + + +def get_dna_url(species: str): + return ( + "https://ftp.ensembl.org/pub/release-{RELEASE}" + + f"/fasta/{species}/dna" + ) + + +def check_ensembl_dna_url(dna_url: str, release: int): + dna_url = dna_url.format(RELEASE=release) + response = requests.get(dna_url) + if response.status_code != 200: + raise BadResponse( + f"Response for {dna_url} = {response.status_code}\n" + f"It is likely that " + f"there is no ensembl release {release} for the target genome " + f"reference." + ) + + +def check_ensembl_file_url(file_url: str, release: int): + file_url = file_url.format(RELEASE=release) + response = requests.head(file_url) + if response.status_code != 200: + raise BadResponse( + f"Response for {file_url} = {response.status_code}\nIt is " + f"likely that there is no ensembl release {release} for the " + f"target genome reference." + ) + + +def get_cached_release_dict(): + try: + with open(_SOPRANO_ENSEMBL_RELEASES, "rb") as f: + release_dict = pk.load(f) + except FileNotFoundError: + release_dict = {} + + return release_dict + + +def get_cached_release_value(dna_url: str): + release_dict = get_cached_release_dict() + return release_dict.get(dna_url, [-1, -1]) + + +def _cache_release_data(toplevel_url: str, release: int, _earliest: bool): + cache_index = 0 if _earliest else 1 + cached_release_dict = get_cached_release_dict() + releases_list = cached_release_dict.get(toplevel_url, [-1, -1]) + + if releases_list[cache_index] < release: + releases_list[cache_index] = release + + cached_release_dict[toplevel_url] = releases_list + + _SOPRANO_ENSEMBL_RELEASES.unlink(missing_ok=True) + with open(_SOPRANO_ENSEMBL_RELEASES, "wb") as f: + pk.dump(cached_release_dict, f) + + +def cache_earliest_release(toplevel_url: str, release: int): + _cache_release_data(toplevel_url, release, True) + + +def cache_latest_release(toplevel_url: str, release: int): + _cache_release_data(toplevel_url, release, False) + + +def find_earliest_release(toplevel_url: str, _max_release=200): + cached_earliest = get_cached_release_value(toplevel_url)[0] + + if cached_earliest > -1: + return cached_earliest + + release = 0 + + while release < _max_release: + try: + check_ensembl_file_url(toplevel_url, release) + break + except BadResponse: + release += 1 + + if release == _max_release: + raise BadResponse(f"Unable to find release content for {toplevel_url}") + + cache_earliest_release(toplevel_url, release) + + return release + + +def find_latest_release(toplevel_url: str, _max_release=200): + release = max(get_cached_release_value(toplevel_url)) + + if release == -1: + release = find_earliest_release(toplevel_url, _max_release) + + while release < _max_release: + try: + check_ensembl_file_url(toplevel_url, release) + release += 1 + except BadResponse: + release -= 1 + break + + cache_latest_release(toplevel_url, release) + + return release + + +def build_ensembl_urls(species: str, reference: str): + mixed_case_species = species[0].upper() + species[1:] + dna_url = get_dna_url(species) + _url = f"{dna_url}/{mixed_case_species}.{reference}.dna" + + toplevel_url = f"{_url}.toplevel.fa.gz" + primary_assembly_url = f"{_url}.primary_assembly.fa.gz" + + return {"toplevel": toplevel_url, "primary_assembly": primary_assembly_url} diff --git a/src/SOPRANO/utils/vep_utils.py b/src/SOPRANO/utils/vep_utils.py index 656b3d4..63558ce 100755 --- a/src/SOPRANO/utils/vep_utils.py +++ b/src/SOPRANO/utils/vep_utils.py @@ -24,7 +24,8 @@ def _get_src_dst_link_pairs(vep_cache: pathlib.Path): src_dirs = [] for item in [ - [release for release in vs.glob("*")] for vs in species_caches + [release for release in vs.glob("*") if release.is_dir()] + for vs in species_caches ]: src_dirs += item @@ -86,10 +87,11 @@ def _process( def _link_src_dst_pairs( - src_dst_pairs: List[Tuple[pathlib.Path, pathlib.Path]] + src_dst_pairs: List[Tuple[pathlib.Path, pathlib.Path]], + _skip_user_input=False, ): for src, dst in src_dst_pairs: - str_response = "" + str_response = "y" if _skip_user_input else "" input_options = ("y", "n") diff --git a/test.yml b/test.yml new file mode 100755 index 0000000..e90aad4 --- /dev/null +++ b/test.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - python==3.11 + - pip diff --git a/tests/test_configuration/test_setup_conda.py b/tests/test_configuration/test_setup_conda.py index b357d22..060a2eb 100755 --- a/tests/test_configuration/test_setup_conda.py +++ b/tests/test_configuration/test_setup_conda.py @@ -1,3 +1,5 @@ +import os + import pytest from SOPRANO.utils.env_utils import ( @@ -8,6 +10,8 @@ vep_installed, ) +IN_GITHUB_ACTIONS = os.getenv("GITHUB_ACTIONS") == "true" + @pytest.mark.dependency(name="has_conda") def test__has_conda(): @@ -19,6 +23,7 @@ def test_running_soprano_env(): assert running_soprano_env() +@pytest.mark.skipif(IN_GITHUB_ACTIONS, reason="Not built in CI (for now)") @pytest.mark.dependency(depends=["has_conda"]) def test_vep_installed(): assert vep_installed() diff --git a/tests/test_integrations/TCGA-05-4396.tsv b/tests/test_integrations/TCGA-05-4396_SSB192.tsv similarity index 100% rename from tests/test_integrations/TCGA-05-4396.tsv rename to tests/test_integrations/TCGA-05-4396_SSB192.tsv diff --git a/tests/test_integrations/TCGA-05-4396_SSB7.tsv b/tests/test_integrations/TCGA-05-4396_SSB7.tsv new file mode 100644 index 0000000..2d9ec70 --- /dev/null +++ b/tests/test_integrations/TCGA-05-4396_SSB7.tsv @@ -0,0 +1,3 @@ +Coverage ON_dNdS ON_Low_CI ON_High_CI ON_Mutations OFF_dNdS OFF_Low_CI OFF_High_CI OFF_Mutations Pvalue ON_na ON_NA ON_ns ON_NS OFF_na OFF_NA OFF_ns OFF_NS +Exonic_Only 0.17320730117340286 0.031724321858695226 0.9456709370621603 6.0 0.866868735958057 0.49699058713838856 1.5120234161945458 63.0 0.34485641679719375 2.0 1027780.0 4.0 356038.0 46.0 10627300.0 17.0 3404610.0 +Exonic_Intronic 0.17320730117340286 0.031724321858695226 0.9456709370621603 6.0 0.866868735958057 0.49699058713838856 1.5120234161945458 63.0 0.34485641679719375 2.0 1027780.0 4.0 356038.0 46.0 10627300.0 17.0 3404610.0 diff --git a/tests/test_integrations/test_TCGA_05_4396.py b/tests/test_integrations/test_TCGA_05_4396.py index a309598..05bb356 100755 --- a/tests/test_integrations/test_TCGA_05_4396.py +++ b/tests/test_integrations/test_TCGA_05_4396.py @@ -4,38 +4,28 @@ from SOPRANO.pipeline import run_pipeline from SOPRANO.utils.path_utils import Directories +# Common definitions for test file input_file = Directories.examples("TCGA-05-4396-01A-21D-1855-08.annotated") -bed_file = Directories.immuno_humans( +bed_file = Directories.immunopeptidomes_humans( "TCGA-05-4396.Expressed.IEDBpeps.SB.epitope.bed" ) name = "TCGA-05-4396" -genome_ref = "GRCh37" exclude_drivers = True release = 110 -expected_path = Directories.int_tests("TCGA-05-4396.tsv") -assert expected_path.exists() +# Differentiate SSB192 and SSB7 test cases +expected_tsv_ssb192_path = Directories.int_tests("TCGA-05-4396_SSB192.tsv") +expected_tsv_ssb7_path = Directories.int_tests("TCGA-05-4396_SSB7.tsv") -def test_pipeline(tmp_path): +def _run_and_assert(params): """ - Test the TCGA-05-4396 end-to-end for validation. + Run the pipeline and check all core files are generated - :param tmp_path: invoked by pytest fixture - uses /tmp + :param params: parameters instasnce """ - params = objects.Parameters( - analysis_name=name, - input_path=input_file, - bed_path=bed_file, - cache_dir=tmp_path, - random_regions=None, - use_ssb192=True, - use_random=False, - exclude_drivers=exclude_drivers, - seed=-1, - transcripts=objects.TranscriptPaths.defaults(), - genomes=objects.GenomePaths.GRCh37(), - ) + + # TODO: Turn into fixture run_pipeline(params) @@ -115,11 +105,57 @@ def test_pipeline(tmp_path): # Check results file exists! assert params.results_path.exists() + +def test_pipeline_ssb192(tmp_path): + """ + Test the TCGA-05-4396 end-to-end for validation using SSB192 + + :param tmp_path: invoked by pytest fixture - uses /tmp + """ + params = objects.Parameters( + analysis_name=name, + input_path=input_file, + bed_path=bed_file, + cache_dir=tmp_path, + random_regions=None, + use_ssb192=True, + use_random=False, + exclude_drivers=exclude_drivers, + seed=-1, + transcripts=objects.TranscriptPaths.defaults(), + genomes=objects.GenomePaths.GRCh37(), + ) + _run_and_assert(params) + computed_tsv = pd.read_csv(params.results_path, sep="\t") - expected_tsv = pd.read_csv(expected_path, sep="\t") + expected_tsv = pd.read_csv(expected_tsv_ssb192_path, sep="\t") assert computed_tsv.equals(expected_tsv), (computed_tsv, expected_tsv) - # coverage ON_dnds ON_lowci ON_highci ON_muts OFF_dnds OFF_lowci OFF_highci OFF_muts Pval ON_na ON_NA ON_ns ON_NS OFF_na OFF_NA OFF_ns OFF_NS # noqa: E501 - # ExonicOnly 0.170545315483698 0.0312367028034305 0.931140579583117 6 0.890687718057257 0.510646130660438 1.5535705238312 63 0.330510882590904 2 1974270 4 673405 46 19525700 17 6427220 # noqa: E501 - # ExonicIntronic 0.170545315483698 0.0312367028034305 0.931140579583117 6 0.890687718057257 0.510646130660438 1.5535705238312 63 0.330510882590904 2 1974270 4 673405 46 19525700 17 6427220 # noqa: E501 + +def test_pipeline_ssb7(tmp_path): + """ + Test the TCGA-05-4396 end-to-end for validation using SSB7 + + :param tmp_path: invoked by pytest fixture - uses /tmp + """ + params = objects.Parameters( + analysis_name=name, + input_path=input_file, + bed_path=bed_file, + cache_dir=tmp_path, + random_regions=None, + use_ssb192=False, + use_random=False, + exclude_drivers=exclude_drivers, + seed=-1, + transcripts=objects.TranscriptPaths.defaults(), + genomes=objects.GenomePaths.GRCh37(), + ) + + _run_and_assert(params) + + computed_tsv = pd.read_csv(params.results_path, sep="\t") + expected_tsv = pd.read_csv(expected_tsv_ssb7_path, sep="\t") + + assert computed_tsv.equals(expected_tsv), (computed_tsv, expected_tsv) diff --git a/tests/test_units/_app_utils_fixtures.py b/tests/test_units/_app_utils_fixtures.py new file mode 100755 index 0000000..4d974d5 --- /dev/null +++ b/tests/test_units/_app_utils_fixtures.py @@ -0,0 +1,11 @@ +import pytest + +from SOPRANO.utils.path_utils import Directories + + +@pytest.fixture +def mock_genome_dir(): + assembly, release = "FOO", 999 + mock_dir = Directories.data() / "homo_sapiens" / f"{release}_{assembly}" + + return assembly, release, mock_dir diff --git a/tests/test_units/_url_fixtures.py b/tests/test_units/_url_fixtures.py new file mode 100755 index 0000000..f013608 --- /dev/null +++ b/tests/test_units/_url_fixtures.py @@ -0,0 +1,34 @@ +import pickle as pk + +import pytest + +from SOPRANO.core.objects import _GatherReferences +from SOPRANO.utils.url_utils import _SOPRANO_ENSEMBL_RELEASES + + +@pytest.fixture +def backup_releases_cache(): + if not _SOPRANO_ENSEMBL_RELEASES.exists(): + with open(_SOPRANO_ENSEMBL_RELEASES, "wb") as f: + pk.dump({}, f) + + backup_name = _SOPRANO_ENSEMBL_RELEASES.with_suffix(".releases.backup") + backup_releases_path = _SOPRANO_ENSEMBL_RELEASES.parent.joinpath( + backup_name + ) + _SOPRANO_ENSEMBL_RELEASES.rename(backup_releases_path) + return backup_releases_path + + +@pytest.fixture +def foo_bar_reference(): + x = _GatherReferences() + species = "foo" + reference = "bar" + x.species = species + x.assembly = reference + x.toplevel_url = "soprano.com/{RELEASE}/foo/bar/toplevel.fa.gz" + x.primary_assembly_url = ( + "soprano.com/{RELEASE}/foo/bar/primary_assembly.fa.gz" + ) + return x diff --git a/tests/test_units/conftest.py b/tests/test_units/conftest.py index e4b526a..cd4f315 100755 --- a/tests/test_units/conftest.py +++ b/tests/test_units/conftest.py @@ -1,3 +1,8 @@ +from _app_utils_fixtures import mock_genome_dir # noqa: F401 from _step2_fixtures import step_2_defs # noqa: F401 from _step3_fixtures import step_3_defs # noqa: F401 from _step6_fixtures import tcga_05_4396_ssb192_cfg # noqa: F401 +from _url_fixtures import ( # noqa: F401 + backup_releases_cache, + foo_bar_reference, +) diff --git a/tests/test_units/test_app_utils.py b/tests/test_units/test_app_utils.py new file mode 100755 index 0000000..4ee1d6c --- /dev/null +++ b/tests/test_units/test_app_utils.py @@ -0,0 +1,284 @@ +import os +from pathlib import Path + +import pytest + +from SOPRANO.core.objects import GenomePaths +from SOPRANO.utils.app_utils import ( + DownloaderUIOptions, + DownloaderUIProcessing, + ImmunopeptidomesUIOptions, + ImmunopeptidomeUIProcessing, + LinkVEPUIProcessing, + PipelineUIOptions, + PipelineUIProcessing, + _lines_ok, + _select_from_dict, + process_text_and_file_inputs, +) +from SOPRANO.utils.path_utils import _SOPRANO_DEFAULT_CACHE, Directories + + +class TemporaryFiles: + def __init__(self, pass_ext, fail_ext, target_dir, mkdir, files): + self._pass_ext = pass_ext + self._fail_ext = fail_ext + self._target_dir = target_dir + self._mkdir = mkdir + self._files = files + + @classmethod + def tmp_in_dir(cls, target_dir: Path, ext: str): + files = target_dir / f"pytest.{ext}", target_dir / "pytest.fail" + return cls( + pass_ext=files[0], + fail_ext=files[1], + target_dir=target_dir, + mkdir=False, + files=files, + ) + + @classmethod + def tmp_files(cls, target_dir: Path, *names: str, mkdir=False): + files = [target_dir / n for n in names] + return cls( + pass_ext=None, + fail_ext=None, + target_dir=target_dir, + mkdir=mkdir, + files=files, + ) + + def __enter__(self): + if self._mkdir: + self._target_dir.mkdir(exist_ok=False) + + for f in self._files: + f.touch(exist_ok=False) + + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + for f in self._files: + f.unlink(missing_ok=False) + + if self._mkdir: + self._target_dir.rmdir() + + +def _check_options_generator(method, directory: Path, extension: str): + with TemporaryFiles.tmp_in_dir(directory, extension) as c: + options = method() + assert c._pass_ext.name in options + assert options[c._pass_ext.name] == c._pass_ext + assert c._fail_ext.name not in options + with pytest.raises(KeyError): + assert options[c._fail_ext.name] == c._fail_ext + + +def test__select_from_dict(): + k, v = "foo", "bar" + assert _select_from_dict(k, {k: v}) == v + + +def test_pipeline_options_genome_reference(mock_genome_dir): + assembly, release, mock_dir = mock_genome_dir + + with TemporaryFiles.tmp_files( + mock_dir, + "something.dna.toplevel.fa", + "something.dna.toplevel.chrom", + mkdir=True, + ): + options = PipelineUIOptions.genome_reference() + assert "{} - Ensembl release {}".format(assembly, release) in options + + +def test_pipeline_options_annotated_mutations(): + _check_options_generator( + PipelineUIOptions.annotated_mutations, + Directories.app_annotated_inputs(), + "anno", + ) + + +def test_pipeline_options_immunopeptidome(): + _check_options_generator( + PipelineUIOptions.immunopeptidome, + Directories.app_immunopeptidomes(), + "bed", + ) + + +def test_pipeline_options_substitution_method(): + for v in (192, 7): + assert v in PipelineUIOptions.substitution_method().values() + + +def test_pipeline_options_coordinates(): + _check_options_generator( + PipelineUIOptions.coordinates, + Directories.app_coordinate_files(), + "bed", + ) + + +def test_pipeline_processing_genome_reference(mock_genome_dir): + assembly, release, mock_dir = mock_genome_dir + + selection_string = "{} - Ensembl release {}".format(assembly, release) + + output = PipelineUIProcessing.genome_reference(selection_string) + + assert isinstance(output, GenomePaths) + assert output.fasta.name.endswith(".fa") + assert output.sizes.name.endswith(".chrom") + + +def test_pipeline_processing_annotated_mutations(): + with TemporaryFiles.tmp_in_dir( + Directories.app_annotated_inputs(), "anno" + ) as c: + assert ( + PipelineUIProcessing.annotated_mutations(c._pass_ext.name) + == c._pass_ext + ) + + with pytest.raises(KeyError): + PipelineUIProcessing.annotated_mutations(c._fail_ext.name) + + +def test_pipeline_processing_immunopeptidome(): + with TemporaryFiles.tmp_in_dir( + Directories.app_immunopeptidomes(), "bed" + ) as c: + assert ( + PipelineUIProcessing.immunopeptidome(c._pass_ext.name) + == c._pass_ext + ) + + with pytest.raises(KeyError): + PipelineUIProcessing.immunopeptidome(c._fail_ext.name) + + +def test_pipeline_processing_substitution_method(): + assert PipelineUIProcessing.substitution_method("SSB192") == 192 + assert PipelineUIProcessing.substitution_method("SSB7") == 7 + + with pytest.raises(KeyError): + PipelineUIProcessing.substitution_method("SSB000") + + +def test_pipeline_processing_job_name(): + cache_key = "SOPRANO_CACHE" + if cache_key in os.environ: + _soprano_cache = os.environ[cache_key] + del os.environ[cache_key] + else: + _soprano_cache = _SOPRANO_DEFAULT_CACHE.as_posix() + try: + mock_dir = Path("/just/for/pytest") + os.environ[cache_key] = mock_dir.as_posix() + job_name = "soprano" + assert PipelineUIProcessing.job_name(job_name) == mock_dir / job_name + finally: + os.environ[cache_key] = _soprano_cache + + +def test_vep_processing_cache_location(): + test_loc = Path.cwd() + assert LinkVEPUIProcessing.cache_location(test_loc.as_posix()) == test_loc + + +def test_downloader_options_type(): + options = DownloaderUIOptions.type() + assert "toplevel" in options + assert "primary_assembly" in options + + +def test_downloader_processing_species(): + assert DownloaderUIProcessing.species("Big Dog") == "big_dog" + + +def test_downloader_processing_assembly(): + assert DownloaderUIProcessing.assembly("cat") == "cat" + + +def test_downloader_processing_release(): + assert DownloaderUIProcessing.release("123") == 123 + + +def test_downloader_processing_type(): + with pytest.raises(ValueError): + DownloaderUIProcessing.type("cat") + + for permitted in ("primary_assembly", "toplevel"): + assert DownloaderUIProcessing.type(permitted) == permitted + + +def test_immunopeptidome_options_hla_alleles(): + options = ImmunopeptidomesUIOptions.hla_alleles() + + assert isinstance(options, list) + assert len(options) == 354 # NOTE: Based on hard coded file... 13 Oct 2023 + + +def test_immunopeptidome_options_transcript_ids(): + options = ImmunopeptidomesUIOptions.transcript_ids() + + assert isinstance(options, list) + assert ( + len(options) == 9754 + ) # NOTE: Based on hard coded file... 13 Oct 2023 + + +def test_immunopeptidome_options_subset_method(): + expected = {"None", "Retention", "Exclusion"} + + assert set(ImmunopeptidomesUIOptions.subset_method()) == expected + + +def test_immunopeptidome_processing_hla_alleles(): + assert ImmunopeptidomeUIProcessing.hla_alleles([1, 2, 3]) == [1, 2, 3] + + +def test_immunopeptidome_processing_transcript_ids(): + assert ImmunopeptidomeUIProcessing.transcript_ids([1, 2, 3]) == [1, 2, 3] + + +def test_immunopeptidome_processing_subset_method(): + assert ImmunopeptidomeUIProcessing.subset_method([], "foo") == ([], []) + assert ImmunopeptidomeUIProcessing.subset_method([1, 2, 3], "None") == ( + [], + [], + ) + + assert ImmunopeptidomeUIProcessing.subset_method([1, 2], "Retention") == ( + [1, 2], + [], + ) + assert ImmunopeptidomeUIProcessing.subset_method([1, 2], "Exclusion") == ( + [], + [1, 2], + ) + with pytest.raises(ValueError): + ImmunopeptidomeUIProcessing.subset_method([1, 2], "bar") + + +def test_immunopeptidome_processing_name(): + assert ImmunopeptidomeUIProcessing.name("x") == "x.bed" + assert ImmunopeptidomeUIProcessing.name("x.bed") == "x.bed" + + +def test__lines_ok(): + assert _lines_ok(["a", "b", "c"], 0, 10) + assert not _lines_ok(["a", "b", "c"], 0, 2) + with pytest.raises(ValueError): + _lines_ok(["a", "b", "c"], 4, 3) + + +def test_process_text_and_file_inputs(): + assert process_text_and_file_inputs("cats\nand\ndogs") == ( + True, + ["cats", "and", "dogs"], + ) diff --git a/tests/test_units/test_dnds.py b/tests/test_units/test_dnds.py index d37ee72..c11d301 100755 --- a/tests/test_units/test_dnds.py +++ b/tests/test_units/test_dnds.py @@ -1,6 +1,6 @@ import pandas as pd -import SOPRANO.core.dnds +import SOPRANO.core.dnds as dnds def test__preprocess_dfs(tcga_05_4396_ssb192_cfg): @@ -11,7 +11,7 @@ def test__preprocess_dfs(tcga_05_4396_ssb192_cfg): sites_intra_path, ) = tcga_05_4396_ssb192_cfg - merged, sites_extra, sites_intra = SOPRANO.core.dnds._preprocess_dfs(paths) + merged, sites_extra, sites_intra = dnds._preprocess_dfs(paths) assert merged.head().equals(pd.read_csv(merged_path, delimiter="\t")) assert sites_extra.head().equals( @@ -53,7 +53,7 @@ def test__compute_mutation_counts(): ], ) - computed_series = SOPRANO.core.dnds._compute_mutation_counts(mock_df) + computed_series = dnds._compute_mutation_counts(mock_df) assert computed_series.equals(expected_series) @@ -67,9 +67,7 @@ def test__define_variables(): {"m_1": 1, "m_2": 2, "x_1": 3, "x_2": 4, "y_1": 5, "y_2": 6} ) - computed_series = SOPRANO.core.dnds._define_variables( - mock_series, mock_df_1, mock_df_2 - ) + computed_series = dnds._define_variables(mock_series, mock_df_1, mock_df_2) assert computed_series.equals(expected_series) @@ -86,10 +84,7 @@ def test__rescale_intron_by_synonymous(): ) expected_value = 1.0 - assert ( - SOPRANO.core.dnds._rescale_intron_by_synonymous(mock_vars) - == expected_value - ) + assert dnds._rescale_intron_by_synonymous(mock_vars) == expected_value def test__compute_kaks_intra_extra(): @@ -106,8 +101,8 @@ def test__compute_kaks_intra_extra(): } ) - assert SOPRANO.core.dnds._compute_kaks_extra(mock_vars) == 1 - assert SOPRANO.core.dnds._compute_kaks_intra(mock_vars) == 4 + assert dnds._compute_kaks_extra(mock_vars) == 1 + assert dnds._compute_kaks_intra(mock_vars) == 4 def test__compute_kaks_intron(): @@ -125,7 +120,7 @@ def test__compute_kaks_intron(): } ) - assert SOPRANO.core.dnds._compute_kaks_intron(mock_vars) == 1.0 + assert dnds._compute_kaks_intron(mock_vars) == 1.0 def test__compute_conf_interval(): diff --git a/tests/test_units/test_objects.py b/tests/test_units/test_objects.py index 679cbdd..1be58b7 100755 --- a/tests/test_units/test_objects.py +++ b/tests/test_units/test_objects.py @@ -6,7 +6,6 @@ def test_Transcripts(): assert defaults.transcript_length.exists() assert defaults.protein_transcript_length.exists() - assert defaults.transcript_fasta.exists() def test_GRCh37(): diff --git a/tests/test_units/test_parse_utils.py b/tests/test_units/test_parse_utils.py new file mode 100755 index 0000000..e381e4a --- /dev/null +++ b/tests/test_units/test_parse_utils.py @@ -0,0 +1,29 @@ +from argparse import Namespace +from unittest.mock import patch + +from SOPRANO.utils.parse_utils import fix_ns_species_arg, parse_genome_args + + +def test__fix_species_arg(): + ns = Namespace(species="Homo Sapiens") + assert fix_ns_species_arg(ns).species == "homo_sapiens" + + +def test_parse_genome_args(capsys): + with patch("sys.argv", ["parse_genome_args"]): + args = parse_genome_args() + assert args.species == "homo_sapiens" + assert args.assembly == "GRCh38" + assert args.release == 110 + assert args.primary_assembly is False + assert args.download_only is False + + with patch( + "sys.argv", ["parse_genome_args", "-s", "foo", "-a", "bar", "-p"] + ): + args = parse_genome_args() + assert args.species == "foo" + assert args.assembly == "bar" + assert args.release == 110 + assert args.primary_assembly is True + assert args.download_only is False diff --git a/tests/test_units/test_prepare_coordinates.py b/tests/test_units/test_prepare_coordinates.py index ca6713c..3ea10a9 100755 --- a/tests/test_units/test_prepare_coordinates.py +++ b/tests/test_units/test_prepare_coordinates.py @@ -269,7 +269,7 @@ def test__prep_not_ssb192(step_2_defs): + tab_line(*start_stop_235) ) - prep_coords._prep_not_ssb192(paths) + prep_coords._prep_ssb7(paths) def _map(start_stop: tuple): chrom, start, stop = start_stop diff --git a/tests/test_units/test_url_utils.py b/tests/test_units/test_url_utils.py new file mode 100755 index 0000000..8eb87f3 --- /dev/null +++ b/tests/test_units/test_url_utils.py @@ -0,0 +1,280 @@ +import os +import pickle as pk + +import pytest + +import SOPRANO.core.objects +from SOPRANO.utils import url_utils + +IN_GITHUB_ACTIONS = os.getenv("GITHUB_ACTIONS") == "true" + + +def test_filename_from_url(): + base = "path/to/dir" + file_name = "something.gz" + + joined = base + "/" + file_name + + assert url_utils.filename_from_url(joined) == file_name + + +@pytest.mark.skipif(IN_GITHUB_ACTIONS, reason="Too slow...") +def test_download_from_url(tmp_path): + test_url = "https://www.icr.ac.uk/assets/img/logo_share.jpg" + test_target_path = tmp_path.joinpath("icr_logo.jpg") + url_utils.download_from_url(test_url, target_path=test_target_path) + assert test_target_path.exists() + + +def test_get_dna_url(): + species = "foo" + dna_url = url_utils.get_dna_url(species) + assert dna_url.endswith(f"{species}/dna") + + +def test_check_ensembl_dna_url(): + dna_url = ( + "https://ftp.ensembl.org/pub/release-{RELEASE}/" + "fasta/homo_sapiens/dna" + ) + + url_utils.check_ensembl_dna_url(dna_url, 110) # No error expected + + with pytest.raises(url_utils.BadResponse): + url_utils.check_ensembl_dna_url(dna_url, 1000) # Error expected + + +def test_check_ensembl_file_url(): + toplevel_url = ( + "https://ftp.ensembl.org/pub/grch37/release-{RELEASE}/" + "fasta/homo_sapiens/dna/" + "Homo_sapiens.GRCh37.dna.toplevel.fa.gz" + ) + + url_utils.check_ensembl_file_url(toplevel_url, 110) # No error expected + + with pytest.raises(url_utils.BadResponse): + url_utils.check_ensembl_file_url(toplevel_url, 1000) + + +def test_get_cached_release_dict(): + retrieved = url_utils.get_cached_release_dict() + assert isinstance(retrieved, dict) + + +def test_get_cached_release_value(backup_releases_cache): + backup_releases_path = backup_releases_cache + + url_to_return_defaults = "https://pytest4defaults.soprano" + assert [-1, -1] == url_utils.get_cached_release_value( + url_to_return_defaults + ) + + url_to_return_values = "https://pytest4values.soprano" + url_values = [100, 105] + url_dict = {url_to_return_values: url_values} + + with open(url_utils._SOPRANO_ENSEMBL_RELEASES, "wb") as f: + pk.dump(url_dict, f) + + assert url_values == url_utils.get_cached_release_value( + url_to_return_values + ) + + url_utils._SOPRANO_ENSEMBL_RELEASES.unlink(missing_ok=False) + backup_releases_path.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +@pytest.mark.skipif(IN_GITHUB_ACTIONS, reason="Too slow...") +def test_find_earliest_release(backup_releases_cache): + toplevel_url = ( + "https://ftp.ensembl.org/pub/release-{RELEASE}/fasta/" + "homo_sapiens/dna/Homo_sapiens.GRCh38.dna.toplevel.fa.gz" + ) + assert url_utils.find_earliest_release(toplevel_url) == 76 + backup_releases_cache.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +def test_find_latest_release(backup_releases_cache): + toplevel_url = ( + "https://ftp.ensembl.org/pub/release-{RELEASE}/fasta/" + "homo_sapiens/dna/Homo_sapiens.GRCh38.dna.toplevel.fa.gz" + ) + + # As of 06 Oct 2023, latest is 110 + + # Insert "old" value that is to be updated in cache + url_utils.cache_earliest_release(toplevel_url, 109) + + # Check that updated value is indeed larger + assert url_utils.find_latest_release(toplevel_url) > 109 + backup_releases_cache.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +def test__cache_release_data(backup_releases_cache): + toplevel_url = "https://ftp.ensembl.org/foo/bar" + + url_utils._cache_release_data(toplevel_url, 100, True) + assert url_utils.get_cached_release_value(toplevel_url) == [100, -1] + + url_utils._cache_release_data(toplevel_url, 99, True) + assert url_utils.get_cached_release_value(toplevel_url) == [100, -1] + + url_utils._cache_release_data(toplevel_url, 101, True) + assert url_utils.get_cached_release_value(toplevel_url) == [101, -1] + + url_utils._cache_release_data(toplevel_url, 110, False) + assert url_utils.get_cached_release_value(toplevel_url) == [101, 110] + + backup_releases_cache.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +def test_cache_latest_release(backup_releases_cache): + toplevel_url = "https://ftp.ensembl.org/foo/bar" + + url_utils._cache_release_data(toplevel_url, 100, False) + with open(url_utils._SOPRANO_ENSEMBL_RELEASES, "rb") as f: + _x = pk.load(f) + + url_utils._SOPRANO_ENSEMBL_RELEASES.unlink() + + url_utils.cache_latest_release(toplevel_url, 100) + with open(url_utils._SOPRANO_ENSEMBL_RELEASES, "rb") as f: + x = pk.load(f) + + assert _x == x + + backup_releases_cache.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +def test_cache_earliest_release(backup_releases_cache): + toplevel_url = "https://ftp.ensembl.org/foo/bar" + + url_utils._cache_release_data(toplevel_url, 100, True) + with open(url_utils._SOPRANO_ENSEMBL_RELEASES, "rb") as f: + _x = pk.load(f) + + url_utils._SOPRANO_ENSEMBL_RELEASES.unlink() + + url_utils.cache_earliest_release(toplevel_url, 100) + with open(url_utils._SOPRANO_ENSEMBL_RELEASES, "rb") as f: + x = pk.load(f) + + assert _x == x + + backup_releases_cache.rename(url_utils._SOPRANO_ENSEMBL_RELEASES) + + +def test_build_ensembl_urls(): + species = "foo" + reference = "bar" + + expected_toplevel = ( + "https://ftp.ensembl.org/pub/release-{RELEASE}/" + "fasta/foo/dna/" + "Foo.bar.dna.toplevel.fa.gz" + ) + expected_primary_assembly = ( + "https://ftp.ensembl.org/pub/release-{RELEASE}/" + "fasta/foo/dna/" + "Foo.bar.dna.primary_assembly.fa.gz" + ) + + expected_dict = { + "toplevel": expected_toplevel, + "primary_assembly": expected_primary_assembly, + } + + assert expected_dict == url_utils.build_ensembl_urls(species, reference) + + +def test__dest_directory(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + posix_path = x._dest_directory(release).as_posix() + + assert posix_path.split("/")[-2] == x.species + assert posix_path.split("/")[-1] == f"{release}_{x.assembly}" + + +def test__dest_fa_gz(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert ( + x._dest_fa_gz(release, _toplevel=True).name + == x.toplevel_url.split("/")[-1] + ) + assert ( + x._dest_fa_gz(release, _toplevel=False).name + == x.primary_assembly_url.split("/")[-1] + ) + + +def test__dest_fa(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x._dest_fa(release, _toplevel=True).name == x.toplevel_url.split( + "/" + )[-1].rstrip(".gz") + assert x._dest_fa( + release, _toplevel=False + ).name == x.primary_assembly_url.split("/")[-1].rstrip(".gz") + + +def test__dest_chrom(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x.dest_chrom(release, _toplevel=True).name == x.toplevel_url.split( + "/" + )[-1].replace(".fa.gz", ".chrom") + + +def test_toplevel_fa_gz_path(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x.toplevel_fa_gz_path(release) == x._dest_fa_gz( + release, _toplevel=True + ) + + +def test_toplevel_fa_path(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x.toplevel_fa_path(release) == x._dest_fa(release, _toplevel=True) + + +def test_primary_assembly_fa_gz_path(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x.primary_assembly_fa_gz_path(release) == x._dest_fa_gz( + release, _toplevel=False + ) + + +def test_primary_assembly_fa_path(foo_bar_reference): + x: SOPRANO.core.objects._GatherReferences = foo_bar_reference + release = 100 + + assert x.primary_assembly_fa_path(release) == x._dest_fa( + release, _toplevel=False + ) + + +def test__check_release_ok(): + for x in ( + SOPRANO.core.objects.EnsemblData.homo_sapiens_GRCh38(), + SOPRANO.core.objects.EnsemblData.homo_sapiens_GRCh37(), + ): + x._check_release_ok(100) # Should be fine + + # Check val error raised on out of range releases + with pytest.raises(ValueError): + x._check_release_ok(1) + with pytest.raises(ValueError): + x._check_release_ok(1000)