Repository: openvax/mhcflurry Branch: master Commit: f011145590f0 Files: 238 Total size: 2.4 MB Directory structure: gitextract_be3gthnp/ ├── .dockerignore ├── .github/ │ └── workflows/ │ ├── build.yml │ ├── ci.yml │ ├── release.yml │ └── release_testpypi.yml ├── .gitignore ├── AGENTS.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── NOTES.md ├── README.md ├── TODO.md ├── code-of-conduct.md ├── compatibility_check/ │ └── figures/ │ └── summary.csv ├── develop.sh ├── docs/ │ ├── Makefile │ ├── README.md │ ├── api.rst │ ├── commandline_tools.rst │ ├── commandline_tutorial.rst │ ├── conf.py │ ├── doctest.sh │ ├── example.fasta │ ├── index.rst │ ├── intro.rst │ ├── python_tutorial.rst │ └── requirements.txt ├── downloads-generation/ │ ├── README.md │ ├── allele_sequences/ │ │ ├── GENERATE.sh │ │ ├── class1_pseudosequences.csv │ │ ├── filter_sequences.py │ │ ├── make_allele_sequences.py │ │ └── select_alleles_to_disambiguate.py │ ├── analysis_predictor_info/ │ │ ├── GENERATE.sh │ │ ├── cluster_submit_script_header.mssm_hpc.lsf │ │ ├── generate_artifacts.py │ │ ├── generate_model_selection_with_decoys.py │ │ ├── predict_on_model_selection_data.py │ │ └── requirements.txt │ ├── data_curated/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── curate.py │ │ ├── curate_ms_by_pmid.py │ │ └── requirements.txt │ ├── data_evaluation/ │ │ ├── GENERATE.sh │ │ ├── cluster_submit_script_header.mssm_hpc.lsf │ │ ├── join_with_precomputed.py │ │ ├── make_benchmark.py │ │ └── split_by_sample.py │ ├── data_iedb/ │ │ ├── GENERATE.sh │ │ └── README.md │ ├── data_mass_spec_annotated/ │ │ ├── GENERATE.sh │ │ ├── annotate.py │ │ └── requirements.txt │ ├── data_predictions/ │ │ ├── GENERATE.WITH_HPC_CLUSTER.sh │ │ ├── GENERATE.sh │ │ ├── cluster_submit_script_header.mssm_hpc.gpu.lsf │ │ ├── cluster_submit_script_header.mssm_hpc.nogpu.lsf │ │ ├── requirements.txt │ │ ├── run_predictors.py │ │ ├── write_allele_list.py │ │ └── write_proteome_peptides.py │ ├── data_published/ │ │ ├── GENERATE.sh │ │ └── README.md │ ├── data_references/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── process.py │ │ └── requirements.txt │ ├── data_systemhcatlas/ │ │ ├── GENERATE.sh │ │ └── README.md │ ├── models_class1/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ └── write_validation_data.py │ ├── models_class1_kim_benchmark/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── class1_pseudosequences.csv │ │ ├── curate.py │ │ ├── generate_hyperparameters.py │ │ └── write_validation_data.py │ ├── models_class1_minimal/ │ │ ├── GENERATE.sh │ │ └── README.md │ ├── models_class1_pan/ │ │ ├── GENERATE.WITH_HPC_CLUSTER.sh │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── additional_alleles.txt │ │ ├── cluster_submit_script_header.mssm_hpc.lsf │ │ ├── generate_hyperparameters.py │ │ └── reassign_mass_spec_training_data.py │ ├── models_class1_pan_variants/ │ │ ├── GENERATE.WITH_HPC_CLUSTER.sh │ │ ├── GENERATE.sh │ │ ├── cluster_submit_script_header.mssm_hpc.gpu.lsf │ │ ├── exclude_data_from_training.py │ │ └── generate_hyperparameters.py │ ├── models_class1_presentation/ │ │ ├── GENERATE.sh │ │ ├── cluster_submit_script_header.mssm_hpc.lsf │ │ └── make_train_data.py │ ├── models_class1_processing/ │ │ ├── GENERATE.WITH_HPC_CLUSTER.sh │ │ ├── GENERATE.sh │ │ ├── annotate_hits_with_expression.py │ │ ├── cluster_submit_script_header.mssm_hpc.lsf │ │ ├── generate_hyperparameters.base.py │ │ ├── generate_hyperparameters.variants.py │ │ └── make_train_data.py │ ├── models_class1_selected_no_mass_spec/ │ │ └── GENERATE.sh │ ├── models_class1_trained_with_mass_spec/ │ │ └── GENERATE.sh │ ├── models_class1_unselected/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── class1_pseudosequences.csv │ │ └── generate_hyperparameters.py │ ├── models_class1_unselected_with_mass_spec/ │ │ ├── GENERATE.sh │ │ ├── README.md │ │ ├── class1_pseudosequences.csv │ │ └── generate_hyperparameters.py │ └── random_peptide_predictions/ │ ├── GENERATE.sh │ └── random_predictions.py ├── lint.sh ├── mhcflurry/ │ ├── __init__.py │ ├── allele_encoding.py │ ├── amino_acid.py │ ├── calibrate_percentile_ranks_command.py │ ├── class1_affinity_predictor.py │ ├── class1_neural_network.py │ ├── class1_presentation_predictor.py │ ├── class1_processing_neural_network.py │ ├── class1_processing_predictor.py │ ├── cluster_parallelism.py │ ├── cluster_worker_entry_point.py │ ├── common.py │ ├── custom_loss.py │ ├── data_dependent_weights_initialization.py │ ├── downloads.py │ ├── downloads.yml │ ├── downloads_command.py │ ├── encodable_sequences.py │ ├── ensemble_centrality.py │ ├── fasta.py │ ├── flanking_encoding.py │ ├── hyperparameters.py │ ├── local_parallelism.py │ ├── percent_rank_transform.py │ ├── predict_command.py │ ├── predict_scan_command.py │ ├── pytorch_layers.py │ ├── pytorch_losses.py │ ├── random_negative_peptides.py │ ├── regression_target.py │ ├── scoring.py │ ├── select_allele_specific_models_command.py │ ├── select_pan_allele_models_command.py │ ├── select_processing_models_command.py │ ├── testing_utils.py │ ├── train_allele_specific_models_command.py │ ├── train_pan_allele_models_command.py │ ├── train_presentation_models_command.py │ ├── train_processing_models_command.py │ └── version.py ├── notebooks/ │ ├── example1.ipynb │ └── mhcflurry-colab.ipynb ├── pylintrc ├── readthedocs.yml ├── requirements.txt ├── scripts/ │ ├── compare_tf_pytorch_random_outputs.py │ ├── cross_allele_parity_analysis.py │ ├── extract_high_presentation_fixture.py │ ├── generate_fixture_error_report.py │ ├── modal_train_mhcflurry.py │ ├── plot_fixture_diffs.py │ └── validate_allele_sequences.py ├── selected-peptides.csv ├── setup.py ├── setup_local_env.sh ├── test/ │ ├── __init__.py │ ├── conftest.py │ ├── data/ │ │ ├── data_10mer.csv │ │ ├── data_8mer.csv │ │ ├── data_9mer.csv │ │ ├── example.fasta │ │ ├── hpv_predictions.csv │ │ ├── master_affinity_fixture_config.json │ │ ├── master_affinity_fixture_predictions.json │ │ ├── master_affinity_fixture_weights.npz │ │ ├── master_densenet_fixture_config.json │ │ ├── master_densenet_fixture_predictions.json │ │ ├── master_densenet_fixture_weights.npz │ │ ├── master_multi_output_fixture_config.json │ │ ├── master_multi_output_fixture_predictions.json │ │ ├── master_multi_output_fixture_weights.npz │ │ ├── master_pan_concat_fixture_config.json │ │ ├── master_pan_concat_fixture_predictions.json │ │ ├── master_pan_concat_fixture_weights.npz │ │ ├── master_pan_multiply_fixture_config.json │ │ ├── master_pan_multiply_fixture_predictions.json │ │ ├── master_pan_multiply_fixture_weights.npz │ │ ├── master_released_class1_affinity_predictions.json │ │ ├── master_released_class1_presentation_highscore_rows_metadata.json │ │ ├── multiallelic.benchmark.small.csv.bz2 │ │ └── multiallelic_ms.benchmark1.csv.bz2 │ ├── expensive_verify_pretrain_optimizable.py │ ├── pytest_helpers.py │ ├── test_allele_encoding.py │ ├── test_amino_acid.py │ ├── test_api_compat_shims.py │ ├── test_calibrate_percentile_ranks_command.py │ ├── test_changing_allele_representations.py │ ├── test_class1_affinity_predictor.py │ ├── test_class1_neural_network.py │ ├── test_class1_pan.py │ ├── test_class1_presentation_predictor.py │ ├── test_class1_processing_neural_network.py │ ├── test_class1_processing_predictor.py │ ├── test_custom_loss.py │ ├── test_doctest.py │ ├── test_download_models_class1.py │ ├── test_ensemble_centrality.py │ ├── test_hyperparameters.py │ ├── test_local_parallelism.py │ ├── test_master_compat_predictions.py │ ├── test_multi_output.py │ ├── test_network_merging.py │ ├── test_percent_rank_transform.py │ ├── test_predict_command.py │ ├── test_predict_scan_command.py │ ├── test_pytorch_coverage.py │ ├── test_pytorch_regressions.py │ ├── test_random_negative_peptides.py │ ├── test_regression_target.py │ ├── test_released_master_predictions.py │ ├── test_released_predictors_on_hpv_dataset.py │ ├── test_released_predictors_well_correlated.py │ ├── test_released_presentation_highscore_rows.py │ ├── test_selected_peptides_csv.py │ ├── test_speed.py │ ├── test_train_and_related_commands.py │ ├── test_train_pan_allele_models_command.py │ ├── test_train_processing_models_command.py │ └── test_training_variants.py └── test-environment.yml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ .git .gitignore LICENSE *.zip *.swp experiments mhc_ligand_full* training/class1_allele_specific/data/mhc_ligand_full.* ================================================ FILE: .github/workflows/build.yml ================================================ name: build on: workflow_dispatch: {} workflow_call: {} jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: 3.11 - name: Install dependencies run: | python -m pip install --upgrade pip pip install build - name: Build package run: | python -m build -sw ls -lh dist/ - name: Upload artifact uses: actions/upload-artifact@v4 with: name: dist path: dist/ ================================================ FILE: .github/workflows/ci.yml ================================================ name: CI on: push: branches: ["master"] pull_request: branches: ["master"] jobs: build: runs-on: ubuntu-latest defaults: run: shell: bash -el {0} strategy: fail-fast: false matrix: python-version: ["3.10", "3.11", "3.12"] steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y pandoc - name: Build Conda environment uses: conda-incubator/setup-miniconda@v2 with: activate-environment: test-environment environment-file: test-environment.yml python-version: ${{ matrix.python-version }} auto-activate-base: false - name: Install python dependencies run: | pip install --upgrade pip pip install flake8 nose-py3 pytest pytest-cov coveralls pip install -r requirements.txt pip install -r docs/requirements.txt pip install . #- name: Lint with flake8 # run: | # # stop the build if there are Python syntax errors or undefined names # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Download data and models run: | mhcflurry-downloads fetch data_curated data_mass_spec_annotated models_class1 models_class1_presentation models_class1_processing models_class1_pan allele_sequences - name: Test with pytest run: | pytest --tb=long --cov=mhcflurry/ --cov-report=term-missing ./test # - name: Publish coverage to Coveralls # uses: coverallsapp/github-action@v2.2.3 # with: # parallel: true ================================================ FILE: .github/workflows/release.yml ================================================ # Based on https://docs.pypi.org/trusted-publishers/using-a-publisher/ name: release on: release: types: [published] jobs: build: uses: ./.github/workflows/build.yml pypi-publish: name: upload release to PyPI needs: build runs-on: ubuntu-latest environment: release permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download build artifacts uses: actions/download-artifact@v4 with: name: dist path: dist - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 ================================================ FILE: .github/workflows/release_testpypi.yml ================================================ # Based on https://docs.pypi.org/trusted-publishers/using-a-publisher/ name: release_testpypi on: workflow_dispatch: {} jobs: build: uses: ./.github/workflows/build.yml publish-to-testpypi: name: upload release to TestPyPI needs: build runs-on: ubuntu-latest environment: release_testpypi permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download build artifacts uses: actions/download-artifact@v4 with: name: dist path: dist - name: Publish distribution to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ ================================================ FILE: .gitignore ================================================ # Swap files *.swp # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # IDE .idea/ # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover # Translations *.mo *.pot # Django stuff: *.log # Sphinx documentation docs/_build/ docs/_static docs/_templates # PyBuilder target/ # Data files *.zip # Dask distributed clutter .dask-web-ui.json # ipython checkpoints .ipynb_checkpoints # OS X extra files .DS_Store ================================================ FILE: AGENTS.md ================================================ # AGENTS.md — mhcflurry Guide for coding agents working in this repo. Read this before touching code. --- ## Golden Rules 1. **Never commit to `main`.** Always `git checkout -b ` before editing. Land via PR. 2. **Every PR bumps the version.** Even doc-only PRs — at minimum a patch bump in the package's `__init__.py` / `_version.py`. 3. **"Done" means merged AND released** — never stop at merge. mhcflurry doesn't (yet) have `deploy.sh`; follow the release recipe in `CONTRIBUTING.md` / `NOTES.md` and push the tag so PyPI gets the new version. Skipping release = task not done. 4. **File problems as issues, don't silently work around them.** If you hit a bug here or in a sibling openvax/pirl-unc repo, open a GitHub issue on the correct repo and link it from the PR. 5. **After a PR ships, look for the next block of work.** Read open issues across the relevant openvax repos, group by dependency + urgency. Prefer *foundational* changes that unblock multiple downstream improvements; otherwise chain the smallest independent improvements. --- ## Repo Shape (read before scripting) Unlike its siblings, mhcflurry does **not** have `test.sh`, `deploy.sh`, or `format.sh`. It has: - `develop.sh` — **source** this (`source develop.sh`) to create/activate `.venv` and editable-install. Do not `./develop.sh` (its venv activation won't persist). - `lint.sh` — `ruff check mhcflurry/ test/` (note: tests live in `test/`, singular). - `setup.py` — packaging. - No `pyproject.toml`. If you want to add `test.sh` / `deploy.sh` / `format.sh` to match the other openvax repos, that's a welcome foundational PR — discuss with Alex first. ## Before Completing Any Task Before telling the user a change is "complete": 1. **`./lint.sh`** — must pass (ruff check) 2. **Run tests**: `pytest test/` (no `test.sh` wrapper). For the slow ML suite you may need downloaded models — see `docker/` or `test-environment.yml`. 3. For a PR: **CI must be green on GitHub**, then merge, then release (see Golden Rule 3). ## Code Style - Python 3.9+ - Lint: ruff (concise output) - Docstrings: numpy style - Bugfixes include a regression test where feasible - mhcflurry is a trained ML model system — be extremely cautious about changes that could alter predictions without a clear reason. Prediction-affecting changes need empirical validation, not just green tests. --- ## Workflow Orchestration ### 1. Upfront Planning - For any non-trivial task (3+ steps or architectural): write a short spec first. If something goes sideways, STOP and re-plan — don't keep pushing. ### 2. Verification Before Done - Never claim complete without proof: tests green, CI green, release tagged. - For model or training changes: include before/after metrics on a held-out set. ### 3. Autonomous Bug Fixing - Given a bug report: just fix it. Point at logs/errors/failing tests and resolve them without hand-holding. ### 4. Demand Elegance (Balanced) - For non-trivial changes pause and ask "is there a more elegant way?" — skip for trivial fixes. - Treat workarounds as bugs, not new abstractions. Rip out legacy paths decisively rather than accumulating special cases. ### 5. Issue Triage After Each Ship - Close superseded/outdated issues as you notice them. - New problems mid-task → file as issues (on the right repo, even if it's not this one), don't bury. --- ## Core Principles - **Simplicity first.** Minimal diffs, minimal abstractions. - **No laziness.** Find root causes; no temporary fixes, no empty-category fudges. - **Minimal blast radius.** Touch only what the task requires. ## Scientific Domain Knowledge - If a change touches immunology/genomics semantics, check primary sources (papers, UniProt, GenBank) before edits. - If the code expresses a scientific model at odds with your understanding, flag it — don't silently "fix" it into something wrong. - Use `mhcgnomes` for MHC allele parsing. Never `startswith("HLA-")` or other string hacks — alleles aren't always human. ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to MHCflurry We would love your help in making MHCflurry a useful resource for the community. No contribution is too small, and we especially appreciate usability improvements like better documentation, tutorials, tests, or code cleanup. ## Project scope We hope MHCflurry will grow to include **reference implementations for state-of-the-art approaches for T cell epitope prediction**. This includes pan-allele MHC I and II prediction and closely related tasks such as prediction of antigen processing and immunogenicity. It does not include tasks such as B cell (antibody) epitope prediction, prediction of TCR/pMHC interactions, or downstream tasks such as cancer vaccine design. All committed code to MHCflurry should be suitable for regular research use by practioners. This likely means that new models will require a benchmark evaluation with a publication or preprint before they can be accepted. If you are contemplating a large contribution, such as the addition of a new predictive model, it probably makes sense to reach out on the Github issue tracker (or email us at hello@openvax.org) to discuss and coordinate the work. ## Making a contribution All contributions can be made as pull requests on Github. One of the core developers will review your contribution. As needed the core contributors will also make releases and submit to PyPI. A few other guidelines: * Any generated resource, such as trained models, must be associated with a `GENERATE.sh` script in [downloads-generation](https://github.com/openvax/mhcflurry/tree/master/downloads-generation). Running this script with no arguments should fully reproduce the generated result. Reproducability of MHCflurry trained models and related data (such as curated training data, allele sequences, etc.) is key to allowing others to build upon and improve our work. * MHCflurry supports Python 3.10+ on Linux and OS X. We can't guarantee support for Windows. If you are having trouble running MHCflurry on Windows we would appreciate contributions that help us address this. * All functions should be documented using [numpy-style docstrings](https://numpydoc.readthedocs.io/en/latest/format.html) and associated with unit tests. * Bugfixes should be accompanied with test that illustrates the bug when feasible. * Contributions are licensed under Apache 2.0 * Please adhere to our [code of conduct](https://github.com/openvax/mhcflurry/blob/master/code-of-conduct.md). Working on your first Pull Request? One resource that may be helpful is [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). ================================================ FILE: Dockerfile ================================================ FROM continuumio/miniconda3:latest LABEL maintainer="Tim O'Donnell timodonnell@gmail.com" WORKDIR /root # Install system dependencies RUN apt-get update -y && apt-get install -y gcc && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Create a lightweight conda env with Python 3.10 RUN conda create -n mhcflurry python=3.10 -y && \ conda clean -afy # Activate the env by modifying PATH ENV PATH /opt/conda/envs/mhcflurry/bin:$PATH # Install pip packages in the env RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir jupyter seaborn # Install dependencies (doing this first to have them cached) COPY requirements.txt /tmp/mhcflurry-requirements.txt RUN pip install --no-cache-dir -r /tmp/mhcflurry-requirements.txt # Pre-download resources for mhcflurry RUN mkdir /tmp/mhcflurry-downloads COPY mhcflurry/downloads.yml /tmp/mhcflurry-downloads RUN python -c '\ import yaml, subprocess; \ d = yaml.safe_load(open("/tmp/mhcflurry-downloads/downloads.yml")); \ downloads = d["releases"][d["current-release"]]["downloads"]; \ urls = [item["url"] for item in downloads if item["default"]]; \ [subprocess.run(["wget", "-P", "/tmp/mhcflurry-downloads", url]) for url in urls]' # Copy example notebooks COPY notebooks/* ./ # Copy source code and install mhcflurry in editable mode COPY . mhcflurry RUN pip install -e mhcflurry/ # Fetch resources from pre-downloaded data RUN mhcflurry-downloads fetch --already-downloaded-dir /tmp/mhcflurry-downloads EXPOSE 9999 CMD ["jupyter", "notebook", "--port=9999", "--no-browser", "--ip=0.0.0.0", "--allow-root", "--NotebookApp.token=''", "--NotebookApp.password=''"] ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: NOTES.md ================================================ # Notes ## 2026-02-10 - Goal: match PyTorch branch behavior to TensorFlow master for class I presentation prediction. - Confirmed mismatch is isolated to `processing_predictor_with_flanks` path: - Affinity outputs match TF nearly exactly. - Processing without flanks matches TF nearly exactly. - Processing with flanks differs materially. - Intermediate feature comparison (single processing model) shows: - `n_flank_cleaved`, `n_flank_internal_cleaved`, `c_flank_cleaved`, `c_flank_internal_cleaved` match TF. - Only `n_flank_avg_dense` and `c_flank_avg_dense` inputs differ. - Root cause identified: - TF computes masked flank averages with `reduce_mean(..., axis=1)` over full sequence length. - Current PyTorch computes average over flank positions only. - This changes the two flank-average scalar features and can change top peptide ranking in presentation mode. - Fix implemented: - Updated `Class1ProcessingModel` N/C flank-average pooling math to mirror TF exactly: - `mean((x + 1) * mask, axis=sequence_axis) - 1` - denominator is full sequence length. - Validation after fix: - Single-model intermediate features now match TF to float noise. - With-flanks processing predictions now match TF to float noise. - End-to-end presentation predictions for test sequences now match TF best-peptide selection. - `test/test_class1_presentation_predictor.py::test_downloaded_predictor` passes. - Parity test subset passes: - `test/test_master_compat_predictions.py` - `test/test_released_master_predictions.py` - `test/test_pytorch_regressions.py` - Regression coverage: - Added `test_processing_flank_averages_use_tf_masked_mean_semantics` in `test/test_pytorch_regressions.py`. - Tooling add-on: - Added `scripts/modal_train_mhcflurry.py` for running parallel training jobs on Modal. - Random TF-vs-PyTorch comparison harness improvements: - Added curated default allele panel in `scripts/compare_tf_pytorch_random_outputs.py`: - ~30 common HLA alleles plus a few animal alleles (`--allele-panel iedb_plus_animals`). - Reduced duplicate work in backend prediction: - Reused `Class1PresentationPredictor.predict(...)` processing outputs for `processing_with_score` and `processing_without_score` columns. - Removed separate direct processing predictor passes. - Runtime sanity: - Full `run --num-examples 5000` dropped from ~142s to ~80s on this machine. - Added cross-product parity analysis workflow: - New script: `scripts/cross_allele_parity_analysis.py` - Generates random peptides uniformly across supported lengths (requested 7-15). - Crosses peptides against curated allele panel and predicts PT vs TF. - Produces: - prediction tables - numeric parity summaries - break analysis tables/report - plots under `plots/` - Executed full run: - `1000` peptides x `35` alleles = `35000` pMHC rows - lengths: `7..15` - key result: no thresholded break events observed; differences remained at expected floating-point noise scale for score outputs and tiny absolute nM differences for affinity outputs. - Follow-up experiment with random flanks: - Updated `scripts/cross_allele_parity_analysis.py` to: - generate random N/C flanks per peptide (length 5/5 from model support), - enforce pre-run uniqueness checks on peptide entries: - no repeated `peptide`, `n_flank`, or `c_flank`, - no duplicate `(peptide, n_flank, c_flank)` rows, - no duplicate `(peptide, allele, n_flank, c_flank)` in full dataset, - enforce post-run presentation sanity checks on both PT and TF: - at least 1% rows with score > 0.2, - at least one row with score > 0.9. - Run output dir: `/tmp/mhcflurry-cross-allele-1000-randflanks` - `1000` peptides x `35` alleles = `35000` rows. - Sanity thresholds passed: - PT with-flanks: 1.28% > 0.2, max 0.973 - TF with-flanks: 1.28% > 0.2, max 0.973 - PT without-flanks: 1.32% > 0.2, max 0.970 - TF without-flanks: 1.32% > 0.2, max 0.970 - High-score fixture extraction for unit tests: - Added `scripts/extract_high_presentation_fixture.py`. - Extracted TF fixture rows from `/tmp/mhcflurry-cross-allele-1000-randflanks/tf_predictions.csv.gz`: - selected peptide+flank contexts where any allele had presentation score > 0.9, - retained all alleles for each selected context (including low scorers), - produced `315` rows (`9` contexts x `35` alleles). - Added fixture files: - `test/data/master_released_class1_presentation_highscore_rows.csv.gz` - `test/data/master_released_class1_presentation_highscore_rows_metadata.json` - Added regression test: - `test/test_released_presentation_highscore_rows.py` - validates fixture high/low context properties and compares released PyTorch predictions against TF fixture outputs. ## 2026-02-12 - Packaging / Torch readiness checks: - Verified `setup.py` publishes `torch>=2.0.0` in metadata and wheel: - `python setup.py egg_info` - `python -m pip wheel --no-deps .` - Verified generated metadata includes `Requires-Dist: torch>=2.0.0`. - Editable install attempt failed in this sandbox due permissions in shared virtualenv `bin/` path, not due packaging metadata. - Warning triage: - Important forward-compat warnings fixed: - `class1_presentation_predictor.py`: avoid `idxmin` on all-NA rows. - `random_negative_peptides.py`: avoid assigning `NaN` into int-typed frame. - Test warning cleanup: - `test_class1_processing_neural_network.py`: avoid `SettingWithCopyWarning` by copying train/test subsets before assignment. - Deprecated imports cleanup: - `downloads.py`: replaced `pipes.quote` with `shlex.quote`. - `downloads.py`: replaced `pkg_resources.resource_string` with `importlib.resources.files(...).read_text()`. - Targeted validation after fixes: - `pytest -q test/test_class1_presentation_predictor.py::test_downloaded_predictor_invalid_peptides` - `pytest -q test/test_random_negative_peptides.py::test_random_negative_peptides_by_allele` - `pytest -q test/test_class1_processing_neural_network.py::test_small` - Result: all pass; only isolated `pytest.mark.slow` registration warning remains when running that single test file directly. ================================================ FILE: README.md ================================================ [![Build Status](https://github.com/openvax/mhcflurry/actions/workflows/ci.yml/badge.svg)](https://github.com/openvax/mhcflurry/actions/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/openvax/mhcflurry/badge.svg?branch=master)](https://coveralls.io/github/openvax/mhcflurry?branch=master) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/openvax/mhcflurry/blob/master/notebooks/mhcflurry-colab.ipynb) # mhcflurry [MHC I](https://en.wikipedia.org/wiki/MHC_class_I) ligand prediction package with competitive accuracy and a fast and [documented](http://openvax.github.io/mhcflurry/) implementation. > [!IMPORTANT] > **Version 2.2.0** is the first release to use [PyTorch](https://pytorch.org/) as its neural network backend, replacing TensorFlow/Keras used in previous versions. It loads the same published weights and produces equivalent predictions, so existing workflows should continue to work with no changes. > > Key changes in 2.2.0: > - **Backend**: TensorFlow/Keras replaced by PyTorch (>= 2.0) > - **Python**: Requires Python 3.10+ (previously 3.9+) > - **Dependencies**: `pandas >= 2.0` is now required; `tensorflow` and `keras` are no longer needed > - **Hardware**: Automatic GPU detection; Apple Silicon (MPS) is now supported > > If you are upgrading from 2.1.x, simply `pip install --upgrade mhcflurry`. The published pre-trained models are unchanged and will be loaded and converted automatically. MHCflurry implements class I peptide/MHC binding affinity prediction. The current version provides pan-MHC I predictors supporting any MHC allele of known sequence. MHCflurry runs on Python 3.10+ using the [PyTorch](https://pytorch.org/) neural network library. It exposes [command-line](http://openvax.github.io/mhcflurry/commandline_tutorial.html) and [Python library](http://openvax.github.io/mhcflurry/python_tutorial.html) interfaces. MHCflurry also includes two experimental predictors, an "antigen processing" predictor that attempts to model MHC allele-independent effects such as proteosomal cleavage and a "presentation" predictor that integrates processing predictions with binding affinity predictions to give a composite "presentation score." Both models are trained on mass spec-identified MHC ligands. If you find MHCflurry useful in your research please cite: > T. O'Donnell, A. Rubinsteyn, U. Laserson. "MHCflurry 2.0: Improved pan-allele prediction of MHC I-presented peptides by incorporating antigen processing," *Cell Systems*, 2020. https://doi.org/10.1016/j.cels.2020.06.010 > T. O'Donnell, A. Rubinsteyn, M. Bonsack, A. B. Riemer, U. Laserson, and J. Hammerbacher, "MHCflurry: Open-Source Class I MHC Binding Affinity Prediction," *Cell Systems*, 2018. https://doi.org/10.1016/j.cels.2018.05.014 Please file an issue if you have questions or encounter problems. Have a bugfix or other contribution? We would love your help. See our [contributing guidelines](CONTRIBUTING.md). ## Try it now You can generate MHCflurry predictions without any setup by running our Google colaboratory [notebook](https://colab.research.google.com/github/openvax/mhcflurry/blob/master/notebooks/mhcflurry-colab.ipynb). ## Installation (pip) Install the package: ``` $ pip install mhcflurry ``` Download our datasets and trained models: ``` $ mhcflurry-downloads fetch ``` You can now generate predictions: ``` $ mhcflurry-predict \ --alleles HLA-A0201 HLA-A0301 \ --peptides SIINFEKL SIINFEKD SIINFEKQ \ --out /tmp/predictions.csv Wrote: /tmp/predictions.csv ``` Or scan protein sequences for potential epitopes: ``` $ mhcflurry-predict-scan \ --sequences MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSSVLHS \ --alleles HLA-A*02:01 \ --out /tmp/predictions.csv Wrote: /tmp/predictions.csv ``` See the [documentation](http://openvax.github.io/mhcflurry/) for more details. ## Docker You can also try the latest (GitHub master) version of MHCflurry using the Docker image hosted on [Dockerhub](https://hub.docker.com/r/openvax/mhcflurry) by running: ``` $ docker run -p 9999:9999 --rm openvax/mhcflurry:latest ``` This will start a [jupyter](https://jupyter.org/) notebook server in an environment that has MHCflurry installed. Go to `http://localhost:9999` in a browser to use it. To build the Docker image yourself, from a checkout run: ``` $ docker build -t mhcflurry:latest . $ docker run -p 9999:9999 --rm mhcflurry:latest ``` ## Predicted sequence motifs Sequence logos for the binding motifs learned by MHCflurry BA are available [here](https://openvax.github.io/mhcflurry-motifs/). ## Common issues and fixes ### Problems downloading data and models Some users have reported HTTP connection issues when using `mhcflurry-downloads fetch`. As a workaround, you can download the data manually (e.g. using `wget`) and then use `mhcflurry-downloads` just to copy the data to the right place. To do this, first get the URL(s) of the downloads you need using `mhcflurry-downloads url`: ``` $ mhcflurry-downloads url models_class1_presentation https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_presentation.20200205.tar.bz2``` ``` Then make a directory and download the needed files to this directory: ``` $ mkdir downloads $ wget --directory-prefix downloads https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_presentation.20200205.tar.bz2``` HTTP request sent, awaiting response... 200 OK Length: 72616448 (69M) [application/octet-stream] Saving to: 'downloads/models_class1_presentation.20200205.tar.bz2' ``` Now call `mhcflurry-downloads fetch` with the `--already-downloaded-dir` option to indicate that the downloads should be retrived from the specified directory: ``` $ mhcflurry-downloads fetch models_class1_presentation --already-downloaded-dir downloads ``` ================================================ FILE: TODO.md ================================================ # TODO ## DONE - [x] Run broader/full test suite before merge. - `pytest -q` passed: 100 tests. - [x] Localize parity mismatch component. - Affinity and processing-without-flanks parity confirmed. - Processing-with-flanks identified as source of presentation divergence. - [x] Create development tracking docs. - Added `NOTES.md` and `TODO.md`. - [x] Fix with-flanks processing parity vs TF in `mhcflurry/class1_processing_neural_network.py`. - Changed N/C flank-average pooling to match TF masked `reduce_mean` semantics. - Verified by comparing intermediate feature vectors and outputs against TF. - [x] Validate end-to-end parity after fix. - Targeted TF-vs-PyTorch comparisons now match to near float precision. - `test/test_class1_presentation_predictor.py::test_downloaded_predictor` now passes. - Parity-focused tests pass: - `test/test_master_compat_predictions.py` - `test/test_released_master_predictions.py` - `test/test_pytorch_regressions.py` - [x] Add regression coverage for with-flanks average behavior. - Added `test_processing_flank_averages_use_tf_masked_mean_semantics`. - [x] Add Modal training script for larger jobs. - Added `scripts/modal_train_mhcflurry.py` with: - GPU worker function - shared artifacts volume - command-template based parallel launch - [x] Speed up TF-vs-PyTorch random comparison harness. - Added curated default allele panel (`iedb_plus_animals`) to reduce per-run affinity-group fragmentation. - Removed redundant direct processing passes in `predict-backend`; processing outputs now reused from presentation predictions. - Verified end-to-end run succeeds with expected parity metrics and faster runtime. - [x] Add cross-product parity analysis + plots for fixed peptide panel across alleles. - Added `scripts/cross_allele_parity_analysis.py`. - Ran `1000` random peptides (uniform lengths `7-15`) across curated panel (`35` alleles). - Generated summaries and plots in `/tmp/mhcflurry-cross-allele-1000-panel`. - [x] Extend cross-product analysis to random flanks + strict sanity requirements. - Added unique random flank generation per peptide. - Added pre-run duplicate checks for peptide/flank fields. - Added post-run presentation score checks: - >=1% rows with score >0.2 - at least one row with score >0.9 - Ran and validated in `/tmp/mhcflurry-cross-allele-1000-randflanks`. - [x] Build a high-score TF fixture for presentation regression tests. - Added `scripts/extract_high_presentation_fixture.py`. - Extracted contexts with any presentation score > 0.9 and retained all alleles per context (including low-score alleles). - Added fixture files under `test/data/` and new test `test/test_released_presentation_highscore_rows.py`. - [x] Triage and fix important warnings. - Fixed future pandas warning in `Class1PresentationPredictor` (`idxmin` on all-NA rows). - Fixed future pandas warning in `random_negative_peptides` (assigning NaN into int dtype). - Fixed test `SettingWithCopyWarning` in processing NN tests. - Removed deprecated `pipes` and `pkg_resources` usage from `downloads.py`. ================================================ FILE: code-of-conduct.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@openvax.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq ================================================ FILE: compatibility_check/figures/summary.csv ================================================ column,mean_abs_diff,max_abs_diff,median_pct_diff,p99_pct_diff affinity_prediction,0.000855926090815266,0.005215815061092144,6.4490902031258496e-06,3.179401059073912e-05 affinity_prediction_high,0.0008876603356824831,0.007624668971402571,1.3224372910328715e-14,5.7364675654514835e-05 affinity_prediction_low,0.001672594107855598,0.011930973687412916,9.06903376028833e-06,6.726403554922356e-05 affinity_prediction_percentile,0.0,0.0,0.0,0.0 pres_with_affinity,0.0012569356975690076,0.006232064377400093,9.673636122167752e-06,7.026281525141103e-05 pres_with_affinity_percentile,0.0,0.0,0.0,0.0 pres_with_presentation_percentile,6.398100744094776e-17,1.7763568394002505e-15,0.0,1.1063297085880059e-13 pres_with_presentation_score,1.8840357408035613e-08,1.6878932457276008e-07,9.296827030315175e-06,5.1157195465321214e-05 pres_with_processing_score,2.2056083823879512e-08,6.332993507385254e-08,3.609134553534807e-06,8.415549260993538e-06 pres_without_affinity,0.0012569356975690076,0.006232064377400093,9.673636122167752e-06,7.026281525141103e-05 pres_without_affinity_percentile,0.0,0.0,0.0,0.0 pres_without_presentation_percentile,1.2749942195496836e-16,1.7763568394002505e-15,0.0,1.7011266438791655e-13 pres_without_presentation_score,1.668495578066763e-08,1.7208790847877964e-07,6.2876170033895e-06,4.9695389639194476e-05 pres_without_processing_score,2.8383164760302833e-10,1.4901161138336505e-08,0.0,1.0314542159027186e-06 processing_with_score,2.2056083823879512e-08,6.332993507385254e-08,3.609134553534807e-06,8.415549260993538e-06 processing_without_score,2.8383164760302833e-10,1.4901161138336505e-08,0.0,1.0314542159027186e-06 ================================================ FILE: develop.sh ================================================ #!/bin/bash # Development environment setup script # Source this script to activate the venv: source develop.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VENV_DIR="$SCRIPT_DIR/.venv" # Check if already in the venv if [[ "$VIRTUAL_ENV" == "$VENV_DIR" ]]; then echo "Virtual environment already active." else if [[ -d "$VENV_DIR" ]]; then source "$VENV_DIR/bin/activate" echo "Activated virtual environment: $VENV_DIR" else echo "Virtual environment not found. Creating and installing..." python -m venv "$VENV_DIR" source "$VENV_DIR/bin/activate" pip install -e . echo "Activated virtual environment: $VENV_DIR" fi fi ================================================ FILE: docs/Makefile ================================================ # Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -v -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " epub3 to make an epub3" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" @echo " dummy to check syntax errors of document sources" # Added by Tim .PHONY: generate generate: sphinx-apidoc -M -f -o _build/ ../mhcflurry .PHONY: clean clean: # Added by tim: preserve html/.git rm -rf $(BUILDDIR)/html/* mv $(BUILDDIR)/html /tmp/html-bk rm -rf $(BUILDDIR)/* mv /tmp/html-bk $(BUILDDIR)/html .PHONY: html html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." .PHONY: dirhtml dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: singlehtml singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." .PHONY: pickle pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." .PHONY: json json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." .PHONY: htmlhelp htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." .PHONY: qthelp qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MHCflurry.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MHCflurry.qhc" .PHONY: applehelp applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." .PHONY: devhelp devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/MHCflurry" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MHCflurry" @echo "# devhelp" .PHONY: epub epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." .PHONY: epub3 epub3: $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 @echo @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." .PHONY: latex latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." .PHONY: latexpdf latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: latexpdfja latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: text text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." .PHONY: man man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." .PHONY: texinfo texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." .PHONY: info info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." .PHONY: gettext gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." .PHONY: changes changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." .PHONY: linkcheck linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." .PHONY: doctest doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." .PHONY: coverage coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." .PHONY: xml xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." .PHONY: pseudoxml pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." .PHONY: dummy dummy: $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy @echo @echo "Build finished. Dummy builder generates no files." ================================================ FILE: docs/README.md ================================================ # MHCflurry documentation To generate Sphinx documentation, from this directory run: ``` $ pip install -r requirements.txt # for the first time you generate docs $ make generate html ``` Documentation is written to the _build/ directory. These files should not be checked into the repo. To test example code: ``` $ make doctest ``` Then take a look at _build/doctest for detailed output. ================================================ FILE: docs/api.rst ================================================ .. _api-documentation: API Documentation ================= .. include:: _build/mhcflurry.rst :start-line: 2 ================================================ FILE: docs/commandline_tools.rst ================================================ Command-line reference ============================ See also the :ref:`tutorial `. .. _mhcflurry-predict: .. autoprogram:: mhcflurry.predict_command:parser :prog: mhcflurry-predict .. _mhcflurry-predict-scan: .. autoprogram:: mhcflurry.predict_scan_command:parser :prog: mhcflurry-predict-scan .. _mhcflurry-downloads: .. autoprogram:: mhcflurry.downloads_command:parser :prog: mhcflurry-downloads .. _mhcflurry-class1-train-allele-specific-models: .. autoprogram:: mhcflurry.train_allele_specific_models_command:parser :prog: mhcflurry-class1-train-allele-specific-models .. _mhcflurry-class1-select-allele-specific-models: .. autoprogram:: mhcflurry.select_allele_specific_models_command:parser :prog: mhcflurry-class1-select-allele-specific-models .. _mhcflurry-class1-train-pan-allele-models: .. autoprogram:: mhcflurry.train_pan_allele_models_command:parser :prog: mhcflurry-class1-train-pan-allele-models .. _mhcflurry-class1-select-pan-allele-models: .. autoprogram:: mhcflurry.select_pan_allele_models_command:parser :prog: mhcflurry-class1-select-pan-allele-models .. _mhcflurry-class1-train-processing-models: .. autoprogram:: mhcflurry.train_processing_models_command:parser :prog: mhcflurry-class1-train-processing-models .. _mhcflurry-class1-select-processing-models: .. autoprogram:: mhcflurry.select_processing_models_command:parser :prog: mhcflurry-class1-select-processing-models .. _mhcflurry-class1-train-presentation-models: .. autoprogram:: mhcflurry.train_presentation_models_command:parser :prog: mhcflurry-class1-train-presentation-models ================================================ FILE: docs/commandline_tutorial.rst ================================================ .. _commandline_tutorial: Command-line tutorial ===================== .. _downloading: Downloading models ------------------ Most users will use pre-trained MHCflurry models that we release. These models are distributed separately from the pip package and may be downloaded with the :ref:`mhcflurry-downloads` tool: .. code-block:: shell $ mhcflurry-downloads fetch models_class1_presentation Files downloaded with :ref:`mhcflurry-downloads` are stored in a platform-specific directory. To get the path to downloaded data, you can use: .. command-output:: mhcflurry-downloads path models_class1_presentation :nostderr: We also release a number of other "downloads," such as curated training data and some experimental models. To see what's available and what you have downloaded, run ``mhcflurry-downloads info``. Most users will only need ``models_class1_presentation``, however, as the presentation predictor includes a peptide / MHC I binding affinity (BA) predictor as well as an antigen processing (AP) predictor. .. note:: The code we use for *generating* the downloads is in the ``downloads_generation`` directory in the repository (https://github.com/openvax/mhcflurry/tree/master/downloads-generation) Generating predictions ---------------------- The :ref:`mhcflurry-predict` command generates predictions for individual peptides (see the next section for how to scan protein sequences for epitopes). By default it will use the pre-trained models you downloaded above. Other models can be used by specifying the ``--models`` argument. Running: .. command-output:: mhcflurry-predict --alleles HLA-A0201 HLA-A0301 --peptides SIINFEKL SIINFEKD SIINFEKQ --out /tmp/predictions.csv :nostderr: results in a file like this: .. command-output:: cat /tmp/predictions.csv The binding affinity predictions are given as affinities (KD) in nM in the ``mhcflurry_affinity`` column. Lower values indicate stronger binders. A commonly-used threshold for peptides with a reasonable chance of being immunogenic is 500 nM. The ``mhcflurry_affinity_percentile`` gives the percentile of the affinity prediction among a large number of random peptides tested on that allele (range 0 - 100). Lower is stronger. Two percent is a commonly-used threshold. The last two columns give the antigen processing and presentation scores, respectively. These range from 0 to 1 with higher values indicating more favorable processing or presentation. .. note:: The processing predictor is experimental. It models allele-independent effects that influence whether a peptide will be detected in a mass spec experiment. The presentation score is a simple logistic regression model that combines the (log) binding affinity prediction with the processing score to give a composite prediction. The resulting prediction may be useful for prioritizing potential epitopes, but no thresholds have been established for what constitutes a "high enough" presentation score. In most cases you'll want to specify the input as a CSV file instead of passing peptides and alleles as commandline arguments. If you're relying on the processing or presentation scores, you may also want to pass the upstream and downstream sequences of the peptides from their source proteins for potentially more accurate cleavage prediction. See the :ref:`mhcflurry-predict` docs. Using the older, allele-specific models ------------------------------------------- Previous versions of MHCflurry (described in the 2018 paper) used models trained on affinity measurements, one allele per model (i.e. allele-specific). Mass spec datasets were incorporated in the model selection step. These models are still available to use with the latest version of MHCflurry. To download these predictors, run: .. code-block:: shell $ mhcflurry-downloads fetch models_class1 and specify ``--models`` when you call ``mhcflurry-predict``: .. code-block:: shell $ mhcflurry-predict \ --alleles HLA-A0201 HLA-A0301 \ --peptides SIINFEKL SIINFEKD SIINFEKQ \ --models "$(mhcflurry-downloads path models_class1)/models" --out /tmp/predictions.csv Scanning protein sequences for predicted MHC I ligands ------------------------------------------------- Starting in version 1.6.0, MHCflurry supports scanning proteins for MHC-binding peptides using the ``mhcflurry-predict-scan`` command. We'll generate predictions across ``example.fasta``, a FASTA file with two short sequences: .. literalinclude:: /example.fasta Here's the ``mhcflurry-predict-scan`` invocation to scan the proteins for binders to either of two MHC I genotypes (using a 100 nM threshold): .. command-output:: mhcflurry-predict-scan example.fasta --alleles HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:02,HLA-C*07:02 HLA-A*01:01,HLA-A*02:06,HLA-B*44:02,HLA-B*07:02,HLA-C*01:02,HLA-C*03:01 --threshold-affinity 100 :nostderr: See the :ref:`mhcflurry-predict-scan` docs for more options. Fitting your own models ----------------------- If you have your own data and want to fit your own MHCflurry models, you have a few options. If you have data for only one or a few MHC I alleles, the best approach is to use the :ref:`mhcflurry-class1-train-allele-specific-models` command to fit an "allele-specific" predictor, in which separate neural networks are used for each allele. To call :ref:`mhcflurry-class1-train-allele-specific-models` you'll need some training data. The data we use for our released predictors can be downloaded with :ref:`mhcflurry-downloads`: .. code-block:: shell $ mhcflurry-downloads fetch data_curated It looks like this: .. command-output:: bzcat "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" | head -n 3 :shell: :nostderr: Here's an example invocation to fit a predictor: .. code-block:: shell $ mhcflurry-class1-train-allele-specific-models \ --data curated_training_data.csv.bz2 \ --hyperparameters hyperparameters.yaml \ --min-measurements-per-allele 75 \ --out-models-dir models The ``hyperparameters.yaml`` file gives the list of neural network architectures to train models for. Here's an example specifying a single architecture: .. code-block:: yaml - activation: tanh dense_layer_l1_regularization: 0.0 dropout_probability: 0.0 early_stopping: true layer_sizes: [8] locally_connected_layers: [] loss: custom:mse_with_inequalities max_epochs: 500 minibatch_size: 128 n_models: 4 output_activation: sigmoid patience: 20 peptide_amino_acid_encoding: BLOSUM62 random_negative_affinity_max: 50000.0 random_negative_affinity_min: 20000.0 random_negative_constant: 25 random_negative_rate: 0.0 validation_split: 0.1 The available hyperparameters for binding predictors are defined in `~mhcflurry.Class1NeuralNetwork`. To see exactly how these are used you will need to read the source code. .. note:: MHCflurry predictors are serialized to disk as many files in a directory. The model training command above will write the models to the output directory specified by the ``--out-models-dir`` argument. This directory has files like: .. program-output:: ls "$(mhcflurry-downloads path models_class1)/models" :shell: :nostderr: :ellipsis: 4,-4 The ``manifest.csv`` file gives metadata for all the models used in the predictor. There will be a ``weights_...`` file for each model giving its weights (the parameters for the neural network). The ``percent_ranks.csv`` stores a histogram of model predictions for each allele over a large number of random peptides. It is used for generating the percent ranks at prediction time. To fit pan-allele models like the ones released with MHCflurry, you can use a similar tool, :ref:`mhcflurry-class1-train-pan-allele-models`. You'll probably also want to take a look at the scripts used to generate the production models, which are available in the *downloads-generation* directory in the MHCflurry repository. See the scripts in the *models_class1_pan* subdirectory to see how the fitting and model selection was done for models currently distributed with MHCflurry. .. note:: The production MHCflurry models were fit using a cluster with several dozen GPUs over a period of about two days. If you model select over fewer architectures, however, it should be possible to fit a predictor using less resources. Environment variables ------------------------------------------------- MHCflurry behavior can be modified using these environment variables: ``MHCFLURRY_DEFAULT_CLASS1_MODELS`` Path to models directory. If you call ``Class1AffinityPredictor.load()`` with no arguments, the models specified in this environment variable will be used. If this environment variable is undefined, the downloaded models for the current MHCflurry release are used. ``MHCFLURRY_OPTIMIZATION_LEVEL`` The pan-allele models can be somewhat slow. As an optimization, when this variable is greater than 0 (default is 1), we merge the pan-allele models in the ensemble into a single combined network. In our experiments it gives about a 30% speed improvement. It has no effect on allele-specific models. Set this variable to 0 to disable this behavior. This may be helpful if you are running out of memory using the pan-allele models. ``MHCFLURRY_DEFAULT_PREDICT_BATCH_SIZE`` For large prediction tasks, it can be helpful to increase the prediction batch size, which is set by this environment variable (default is 4096). This affects both allele-specific and pan-allele predictors. It can have large effects on performance. Alternatively, if you are running out of memory, you can try decreasing the batch size. ================================================ FILE: docs/conf.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # # MHCflurry documentation build configuration file, created by # sphinx-quickstart on Sun Dec 10 20:25:16 2017. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os import re import textwrap import logging import subprocess if os.environ.get("READTHEDOCS"): # For rtd builds, call "make generate" first. subprocess.check_call("make generate", shell=True) # Hack added by tim for bug in autoprogram extension under Python 2. from sphinx.util.pycompat import indent # pylint: disable=import-error textwrap.indent = indent # Disable logging (added by tim) logging.disable(logging.ERROR) # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', 'numpydoc', 'sphinxcontrib.programoutput', 'sphinxcontrib.autoprogram', 'sphinx.ext.githubpages', ] doctest_global_setup = ''' import logging logging.getLogger('matplotlib').disabled = True import numpy import pandas import mhcflurry pandas.set_option('max_columns', 20) pandas.set_option('display.expand_frame_repr', False) ''' doctest_test_doctest_blocks = '' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = 'MHCflurry' copyright = 'Timothy O\'Donnell' author = 'Timothy O\'Donnell' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. # Added by Tim: reading version from mhcflurry __init__.py as in setup.py with open('../mhcflurry/version.py', 'r') as f: version = re.search( r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1) # The full version, including alpha/beta/rc tags. release = version # Added by tim autodoc_member_order = 'bysource' autoclass_content = 'both' # Added by tim suppress_warnings = ['image.nonlocal_uri'] # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The reST default role (used for this markup: `text`) to use for all # documents. default_role = 'py:obj' # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # Added by Tim # http://stackoverflow.com/questions/12206334/sphinx-autosummary-toctree-contains-reference-to-nonexisting-document-warnings numpydoc_show_class_members = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. # " v documentation" by default. #html_title = 'MHCflurry v1.0.0' # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not None, a 'Last updated on:' timestamp is inserted at every page # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. html_last_updated_fmt = "" # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_domain_indices = False # If false, no index is generated. html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' #html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. #html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. #html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'MHCflurrydoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', # Latex figure (float) alignment #'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'MHCflurry.tex', 'MHCflurry Documentation', 'Timothy O\'Donnell', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'mhcflurry', 'MHCflurry Documentation', [author], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'MHCflurry', 'MHCflurry Documentation', author, 'MHCflurry', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False ================================================ FILE: docs/doctest.sh ================================================ #!/bin/bash sphinx-build -b doctest -d _build/doctrees . _build/doctest RETVAL=$? echo doctest returned $RETVAL cat _build/doctest/output.txt exit $RETVAL ================================================ FILE: docs/example.fasta ================================================ >protein1 MSSSSTPVCPNGPGNCQV >protein2 MVENKRLLEGMEMIFGQVIPGA ================================================ FILE: docs/index.rst ================================================ MHCflurry documentation ===================================== .. toctree:: :maxdepth: 3 intro commandline_tutorial python_tutorial model-info/allele_motifs commandline_tools api ================================================ FILE: docs/intro.rst ================================================ Introduction and setup ======================= MHCflurry is an open source package for peptide/MHC I binding affinity prediction. It aims to provide competitive accuracy with a fast and documented implementation. You can download pre-trained MHCflurry models fit to mass spec-identified MHC I ligands and peptide/MHC affinity measurements deposited in IEDB (plus a few other sources) or train a MHCflurry predictor on your own data. Starting in version 1.6.0, the default MHCflurry binding affinity predictors are "pan-allele" models that support most sequenced MHC I alleles across humans and a few other species (about 14,000 alleles in total). This version also introduces two experimental predictors, an "antigen processing" predictor that attempts to model MHC allele-independent effects such as proteosomal cleavage and a "presentation" predictor that integrates processing predictions with binding affinity predictions to give a composite "presentation score." Both models are trained on mass spec-identified MHC ligands. MHCflurry supports Python 3.10+. It uses the `PyTorch `__ neural network library. GPUs and Apple Silicon (MPS) may optionally be used for a speed improvement and are auto-detected. If you find MHCflurry useful in your research, please cite: T. J. O'Donnell, et al. "MHCflurry 2.0: Improved pan-allele prediction of MHC I-presented peptides by incorporating antigen processing," *Cell Systems*, 2020. https://doi.org/10.1016/j.cels.2020.06.010 T. J. O'Donnell, et al., "MHCflurry: Open-Source Class I MHC Binding Affinity Prediction," *Cell Systems*, 2018. https://doi.org/10.1016/j.cels.2018.05.014 If you have questions or encounter problems, please file an issue at the MHCflurry github repo: https://github.com/openvax/mhcflurry Installation (pip) ------------------- Install the package: .. code-block:: shell $ pip install mhcflurry Then download our datasets and trained models: .. code-block:: shell $ mhcflurry-downloads fetch From a checkout you can run the unit tests with: .. code-block:: shell $ pip install pytest $ pytest Using conda ------------- You can alternatively get up and running with a `conda `__ environment as follows. .. code-block:: shell $ conda create -q -n mhcflurry-env python=3.10 $ source activate mhcflurry-env Then continue as above: .. code-block:: shell $ pip install mhcflurry $ mhcflurry-downloads fetch ================================================ FILE: docs/python_tutorial.rst ================================================ Python library tutorial ======================= The MHCflurry Python API exposes additional options and features beyond those supported by the commandline tools and can be more convenient for interactive analyses and bioinformatic pipelines. This tutorial gives a basic overview of the most important functionality. See the :ref:`API-documentation` for further details. Loading a predictor ---------------------------------- Most prediction tasks can be performed using the `~mhcflurry.Class1PresentationPredictor` class, which provides a programmatic API to the functionality in the :ref:`mhcflurry-predict` and :ref:`mhcflurry-predict-scan` commands. Instances of `~mhcflurry.Class1PresentationPredictor` wrap a `~mhcflurry.Class1AffinityPredictor` to generate binding affinity predictions and a `~mhcflurry.Class1ProcessingPredictor` to generate antigen processing predictions. The presentation score is computed using a logistic regression model over binding affinity and processing predictions. Use the `~mhcflurry.Class1PresentationPredictor.load` static method to load a trained predictor from disk. With no arguments this method will load the predictor released with MHCflurry (see :ref:`downloading`\ ). If you pass a path to a models directory, then it will load that predictor instead. .. doctest:: >>> from mhcflurry import Class1PresentationPredictor >>> predictor = Class1PresentationPredictor.load() >>> predictor.supported_alleles[:5] ['Atbe-B*01:01', 'Atbe-E*03:01', 'Atbe-G*03:01', 'Atbe-G*03:02', 'Atbe-G*06:01'] Predicting for individual peptides ---------------------------------- To generate predictions for individual peptides, we can use the `~mhcflurry.Class1AffinityPredictor.predict` method of the `~mhcflurry.Class1PresentationPredictor`, loaded above. This method returns a `pandas.DataFrame` with binding affinity, processing, and presentation predictions: .. doctest:: >>> predictor.predict( ... peptides=["SIINFEKL", "NLVPMVATV"], ... alleles=["HLA-A0201", "HLA-A0301"], ... verbose=0) peptide peptide_num sample_name affinity best_allele processing_score presentation_score 0 SIINFEKL 0 sample1 12906.786173 HLA-A0201 0.101473 0.012503 1 NLVPMVATV 1 sample1 15.038358 HLA-A0201 0.676289 0.975463 Here, the list of alleles is taken to be an individual's MHC I genotype (i.e. up to 6 alleles), and the strongest binder across alleles for each peptide is reported. .. note:: MHCflurry normalizes allele names using the `mhcgnomes `__ package. Names like ``HLA-A0201`` or ``A*02:01`` will be normalized to ``HLA-A*02:01``, so most naming conventions can be used with methods such as `~mhcflurry.Class1PresentationPredictor.predict`. If you have multiple sample genotypes, you can pass a dict, where the keys are arbitrary sample names: .. doctest:: >>> predictor.predict( ... peptides=["KSEYMTSWFY", "NLVPMVATV"], ... alleles={ ... "sample1": ["A0201", "A0301", "B0702", "B4402", "C0201", "C0702"], ... "sample2": ["A0101", "A0206", "B5701", "C0202"], ... }, ... verbose=0) peptide peptide_num sample_name affinity best_allele processing_score presentation_score 0 KSEYMTSWFY 0 sample1 16737.745268 A0301 0.381632 0.026550 1 NLVPMVATV 1 sample1 15.038358 A0201 0.676289 0.975463 2 KSEYMTSWFY 0 sample2 62.540779 A0101 0.381632 0.796731 3 NLVPMVATV 1 sample2 15.765500 A0206 0.676289 0.974439 Here the strongest binder for each sample / peptide pair is returned. Many users will focus on the binding affinity predictions, as the processing and presentation predictions are experimental. If you do use the latter scores, however, when available you should provide the upstream (N-flank) and downstream (C-flank) sequences from the source proteins of the peptides for a small boost in accuracy. To do so, specify the ``n_flank`` and ``c_flank`` arguments, which give the flanking sequences for the corresponding peptides: .. doctest:: >>> predictor.predict( ... peptides=["KSEYMTSWFY", "NLVPMVATV"], ... n_flanks=["NNNNNNN", "SSSSSSSS"], ... c_flanks=["CCCCCCCC", "YYYAAAA"], ... alleles={ ... "sample1": ["A0201", "A0301", "B0702", "B4402", "C0201", "C0702"], ... "sample2": ["A0101", "A0206", "B5701", "C0202"], ... }, ... verbose=0) peptide n_flank c_flank peptide_num sample_name affinity best_allele processing_score presentation_score 0 KSEYMTSWFY NNNNNNN CCCCCCCC 0 sample1 16737.745268 A0301 0.605816 0.056190 1 NLVPMVATV SSSSSSSS YYYAAAA 1 sample1 15.038358 A0201 0.824994 0.986719 2 KSEYMTSWFY NNNNNNN CCCCCCCC 0 sample2 62.540779 A0101 0.605816 0.897493 3 NLVPMVATV SSSSSSSS YYYAAAA 1 sample2 15.765500 A0206 0.824994 0.986155 Scanning protein sequences -------------------------- The `~mhcflurry.Class1PresentationPredictor.predict_sequences` method supports scanning protein sequences for MHC ligands. Here's an example to identify all peptides with a predicted binding affinity of 500 nM or tighter to any allele across two sample genotypes and two short peptide sequences. .. doctest:: >>> predictor.predict_sequences( ... sequences={ ... 'protein1': "MDSKGSSQKGSRLLLLLVVSNLL", ... 'protein2': "SSLPTPEDKEQAQQTHH", ... }, ... alleles={ ... "sample1": ["A0201", "A0301", "B0702"], ... "sample2": ["A0101", "C0202"], ... }, ... result="filtered", ... comparison_quantity="affinity", ... filter_value=500, ... verbose=0) sequence_name pos peptide n_flank c_flank sample_name affinity best_allele affinity_percentile processing_score presentation_score 0 protein1 13 LLLLVVSNL MDSKGSSQKGSRL L sample1 38.206225 A0201 0.380125 0.017644 0.571060 1 protein1 14 LLLVVSNLL MDSKGSSQKGSRLL sample1 42.243472 A0201 0.420250 0.090984 0.619213 2 protein1 5 SSQKGSRLL MDSKG LLLVVSNLL sample2 66.749223 C0202 0.803375 0.383608 0.774468 3 protein1 6 SQKGSRLLL MDSKGS LLVVSNLL sample2 178.033467 C0202 1.820000 0.275019 0.482206 4 protein1 13 LLLLVVSNLL MDSKGSSQKGSRL sample1 202.208167 A0201 1.112500 0.058782 0.261320 5 protein1 12 LLLLLVVSNL MDSKGSSQKGSR L sample1 202.506582 A0201 1.112500 0.010025 0.225648 6 protein2 0 SSLPTPEDK EQAQQTHH sample1 335.529377 A0301 1.011750 0.010443 0.156798 7 protein2 0 SSLPTPEDK EQAQQTHH sample2 353.451759 C0202 2.674250 0.010443 0.150753 8 protein1 8 KGSRLLLLL MDSKGSSQ VVSNLL sample2 410.327286 C0202 2.887000 0.121374 0.194081 9 protein1 5 SSQKGSRL MDSKG LLLLVVSNLL sample2 477.285937 C0202 3.107375 0.111982 0.168572 When using ``predict_sequences``, the flanking sequences for each peptide are automatically included in the processing and presentation predictions. See the documentation for `~mhcflurry.Class1PresentationPredictor` for other useful methods. Lower level interfaces ---------------------------------- The `~mhcflurry.Class1PresentationPredictor` delegates to a `~mhcflurry.Class1AffinityPredictor` instance for binding affinity predictions. If all you need are binding affinities, you can use this instance directly. Here's an example: .. doctest:: >>> from mhcflurry import Class1AffinityPredictor >>> predictor = Class1AffinityPredictor.load() >>> predictor.predict_to_dataframe(allele="HLA-A0201", peptides=["SIINFEKL", "SIINFEQL"]) peptide allele prediction prediction_low prediction_high prediction_percentile 0 SIINFEKL HLA-A0201 12906.786173 8829.460289 18029.923061 6.566375 1 SIINFEQL HLA-A0201 13025.300796 9050.056312 18338.004869 6.623625 The ``prediction_low`` and ``prediction_high`` fields give the 5-95 percentile predictions across the models in the ensemble. This detailed information is not available through the higher-level `~mhcflurry.Class1PresentationPredictor` interface. Under the hood, `Class1AffinityPredictor` itself delegates to an ensemble of of `~mhcflurry.Class1NeuralNetwork` instances, which implement the neural network models used for prediction. To fit your own affinity prediction models, call `~mhcflurry.Class1NeuralNetwork.fit`. You can similarly use `~mhcflurry.Class1ProcessingPredictor` directly for antigen processing prediction, and there is a low-level `~mhcflurry.Class1ProcessingNeuralNetwork` with a `~mhcflurry.Class1ProcessingNeuralNetwork.fit` method. See the API documentation of these classes for details. ================================================ FILE: docs/requirements.txt ================================================ sphinx sphinxcontrib-programoutput sphinxcontrib-autoprogram sphinx-rtd-theme numpydoc pypandoc pydot tabulate logomaker tqdm ================================================ FILE: downloads-generation/README.md ================================================ # Downloads generation This directory contains code and instructions needed to *generate* the datasets and trained models published with MHCflurry. If you are only looking to download datasets and trained models, you do not need to use any of this. Just run `mhcflurry-downloads fetch` to download the standard models and datasets. ================================================ FILE: downloads-generation/allele_sequences/GENERATE.sh ================================================ #!/bin/bash # # Create allele sequences (sometimes referred to as pseudosequences) by # performing a global alignment across all MHC amino acid sequences we can get # our hands on. # # Requires: clustalo, wget # set -e set -x DOWNLOAD_NAME=allele_sequences SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status which clustalo clustalo --version cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/make_allele_sequences.py . cp $SCRIPT_DIR/select_alleles_to_disambiguate.py . cp $SCRIPT_DIR/filter_sequences.py . cp $SCRIPT_DIR/class1_pseudosequences.csv . cp $SCRIPT_ABSOLUTE_PATH . # Generate sequences # Training data is used to decide which additional positions to include in the # allele sequences to differentiate alleles that have identical traditional # pseudosequences but have associated training data TRAINING_DATA="$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" python select_alleles_to_disambiguate.py \ "$TRAINING_DATA" \ --min-count 1000 \ --out training_data.alleles.txt # Human wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/A_prot.fasta wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/B_prot.fasta wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/C_prot.fasta wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/E_prot.fasta wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/F_prot.fasta wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/fasta/G_prot.fasta # Mouse wget -q https://www.uniprot.org/uniprot/P01899.fasta # H-2 Db wget -q https://www.uniprot.org/uniprot/P01900.fasta # H-2 Dd wget -q https://www.uniprot.org/uniprot/P14427.fasta # H-2 Dp wget -q https://www.uniprot.org/uniprot/P14426.fasta # H-2 Dk wget -q https://www.uniprot.org/uniprot/Q31145.fasta # H-2 Dq wget -q https://www.uniprot.org/uniprot/P01901.fasta # H-2 Kb wget -q https://www.uniprot.org/uniprot/P01902.fasta # H-2 Kd wget -q https://www.uniprot.org/uniprot/P04223.fasta # H-2 Kk wget -q https://www.uniprot.org/uniprot/P14428.fasta # H-2 Kq wget -q https://www.uniprot.org/uniprot/P01897.fasta # H-2 Ld wget -q https://www.uniprot.org/uniprot/Q31151.fasta # H-2 Lq # Various wget -q ftp://ftp.ebi.ac.uk/pub/databases/ipd/mhc/MHC_prot.fasta python filter_sequences.py *.fasta --out class1.fasta time clustalo -i class1.fasta -o class1.aligned.fasta time python make_allele_sequences.py \ class1.aligned.fasta \ --recapitulate-sequences class1_pseudosequences.csv \ --differentiate-alleles training_data.alleles.txt \ --out-csv allele_sequences.csv time python make_allele_sequences.py \ class1.aligned.fasta \ --recapitulate-sequences class1_pseudosequences.csv \ --out-csv allele_sequences.no_differentiation.csv # Cleanup gzip -f class1.fasta gzip -f class1.aligned.fasta rm *.fasta cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/allele_sequences/class1_pseudosequences.csv ================================================ allele,pseudosequence BoLA-100901,YYSMYREISENVYGSNLYLLYRDYTWEYLNYRWY BoLA-100902,YYSEYREISENVYESNLYLLYRDYTWEYLNYRWY BoLA-101901,YHTKYREISENVYGSNLYYDYDYYTWAVFNYRGY BoLA-102001,YHTKYREISENVYGSNLYFLYMDYTWAVFNYRGY BoLA-102101,YYTKYREISENVYGSNLYFQFRYYTWADFNYEGY BoLA-102301,YYSEYREISENVYESNLYIAYSDYTWEYLNYRWY BoLA-102801,YYTKYREISEKLYENTLYLQFRYYTWADFNYEWY BoLA-102901,YYTRYREISENLYKNTAYITFMYYTWANENYRGY BoLA-103101,YYTKYDEISENLYKNTLYIAFRDYTWAYLNYTWY BoLA-103102,YYTKYDEISENLYKDTLYIAFRDYTWAYLNYTWY BoLA-104201,YHTKYDEISENLYKDTLYIAYRDYTWEYLNYRGY BoLA-104901,YYAEYREISDTSFVGTLYIEYEYYTWAYLNYEGY BoLA-106101,YYTIYREISENVYESNLYFRYDFYTWADFNYRWY BoLA-106701,YYAMYEMDAEDRSLCTLYFQFTFYTWAAFNYTWY BoLA-107401,YYTKYREISENLYKNTAYLRFSFYTWAAENYRGY BoLA-1:00901,YYSMYREISENVYGSNLYLLYRDYTWEYLNYRWY BoLA-1:00902,YYSEYREISENVYESNLYLLYRDYTWEYLNYRWY BoLA-1:01901,YHTKYREISENVYGSNLYYDYDYYTWAVFNYRGY BoLA-1:02001,YHTKYREISENVYGSNLYFLYMDYTWAVFNYRGY BoLA-1:02101,YYTKYREISENVYGSNLYFQFRYYTWADFNYEGY BoLA-1:02301,YYSEYREISENVYESNLYIAYSDYTWEYLNYRWY BoLA-1:02801,YYTKYREISEKLYENTLYLQFRYYTWADFNYEWY BoLA-1:02901,YYTRYREISENLYKNTAYITFMYYTWANENYRGY BoLA-1:03101,YYTKYDEISENLYKNTLYIAFRDYTWAYLNYTWY BoLA-1:03102,YYTKYDEISENLYKDTLYIAFRDYTWAYLNYTWY BoLA-1:04201,YHTKYDEISENLYKDTLYIAYRDYTWEYLNYRGY BoLA-1:04901,YYAEYREISDTSFVGTLYIEYEYYTWAYLNYEGY BoLA-1:06101,YYTIYREISENVYESNLYFRYDFYTWADFNYRWY BoLA-1:06701,YYAMYEMDAEDRSLCTLYFQFTFYTWAAFNYTWY BoLA-1:07401,YYTKYREISENLYKNTAYLRFSFYTWAAENYRGY BoLA-200501,YYAEYRNIYDTIFVDTLYIAYWFYTWAAWNYEWY BoLA-200601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-200602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWH BoLA-200801,YLIMYRENSETTFANTAYVEYMDYTWADWNYRWY BoLA-200802,YLIMYRENSETTFANTAYVEYMDYTWADWNYRGY BoLA-201201,YYATYRENFDTTFVDTLYIAYRDYTWAEHNYTWY BoLA-201601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEGY BoLA-201602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-201801,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-201802,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-202201,YHSEYEQIVDTSFVGTLYLLYEDYTRAALNYTGY BoLA-202501,YSAEYRNIYDTTFVYALYLWSWFYTWAAENYRGY BoLA-202601,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-202602,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-202603,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-203001,YYSEYRNIYDTNFVSNLYLWSWFYTWANENYEWY BoLA-203202,YYATYRENLGATFVDTLYIEYRDYTWAYLNYTWY BoLA-204301,YSEMYRERAGNTFVNTLYIWYRDYTWAVFNYLGY BoLA-204401,YYAMYEEKADTTFVDTLYIAYRDYTWAVFNYLGY BoLA-204402,YYAMYEEKADTTFVDTLYIWYRDYTWAVFNYLGY BoLA-204501,YYATYRENLDTTFVDTLYIEYRDYTWAEFNYLGY BoLA-204601,YSEMYRERAGNTFVNTLYIWYRDYTWAEQNYTWY BoLA-204701,YSEMYQERAGNTFVDTLYLWYMDYTWAEQNYTWY BoLA-204801,YYSEYEQIVDTSFVGTLYLLYMDYTRAAQNYRGY BoLA-205401,YYIMYQENSGATFANTLYFWYWFYTWANENYRGY BoLA-205501,YYAEYREISETTFVDSLYIAYRDYTWAYLNYRGY BoLA-205601,YYATYQENFDATFANTLYFLSTYYTWEAHNYRGY BoLA-205701,YYIMYREISETTFVDTLYIEYDFYTWEYLNYRGY BoLA-206001,YSAEYRNIYDTTFVYTLYLWSWFYTWANGNYEGY BoLA-206201,YYATYQEIQENTFANTLYIEYRDYTWAYFNYRWY BoLA-206901,YYSEYEQIVDTSFVNTLYLWYRDYTWEAENYRWY BoLA-207001,YYATYRENLDATFVNTLYLWYRDYTWAERNYRWY BoLA-207101,YYATYRENLGATFVDTLYIAYSDYTWAEFNYRGY BoLA-2:00501,YYAEYRNIYDTIFVDTLYIAYWFYTWAAWNYEWY BoLA-2:00601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-2:00602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWH BoLA-2:00801,YLIMYRENSETTFANTAYVEYMDYTWADWNYRWY BoLA-2:00802,YLIMYRENSETTFANTAYVEYMDYTWADWNYRGY BoLA-2:01201,YYATYRENFDTTFVDTLYIAYRDYTWAEHNYTWY BoLA-2:01601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEGY BoLA-2:01602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-2:01801,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-2:01802,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-2:02201,YHSEYEQIVDTSFVGTLYLLYEDYTRAALNYTGY BoLA-2:02501,YSAEYRNIYDTTFVYALYLWSWFYTWAAENYRGY BoLA-2:02601,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-2:02602,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-2:02603,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-2:03001,YYSEYRNIYDTNFVSNLYLWSWFYTWANENYEWY BoLA-2:03202,YYATYRENLGATFVDTLYIEYRDYTWAYLNYTWY BoLA-2:04301,YSEMYRERAGNTFVNTLYIWYRDYTWAVFNYLGY BoLA-2:04401,YYAMYEEKADTTFVDTLYIAYRDYTWAVFNYLGY BoLA-2:04402,YYAMYEEKADTTFVDTLYIWYRDYTWAVFNYLGY BoLA-2:04501,YYATYRENLDTTFVDTLYIEYRDYTWAEFNYLGY BoLA-2:04601,YSEMYRERAGNTFVNTLYIWYRDYTWAEQNYTWY BoLA-2:04701,YSEMYQERAGNTFVDTLYLWYMDYTWAEQNYTWY BoLA-2:04801,YYSEYEQIVDTSFVGTLYLLYMDYTRAAQNYRGY BoLA-2:05401,YYIMYQENSGATFANTLYFWYWFYTWANENYRGY BoLA-2:05501,YYAEYREISETTFVDSLYIAYRDYTWAYLNYRGY BoLA-2:05601,YYATYQENFDATFANTLYFLSTYYTWEAHNYRGY BoLA-2:05701,YYIMYREISETTFVDTLYIEYDFYTWEYLNYRGY BoLA-2:06001,YSAEYRNIYDTTFVYTLYLWSWFYTWANGNYEGY BoLA-2:06201,YYATYQEIQENTFANTLYIEYRDYTWAYFNYRWY BoLA-2:06901,YYSEYEQIVDTSFVNTLYLWYRDYTWEAENYRWY BoLA-2:07001,YYATYRENLDATFVNTLYLWYRDYTWAERNYRWY BoLA-2:07101,YYATYRENLGATFVDTLYIAYSDYTWAEFNYRGY BoLA-300101,YSEMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-300102,YSSMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-300103,YSIMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-300201,YLEMYQEKAGNFFVSNLYLLSMFYSMAEQNYRWY BoLA-300401,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-300402,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-300403,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-301001,YYSEYRNIYDTTFVDTLYLEYEYYSVAEFNYRGY BoLA-301101,YSEMYQEKAGTTFANIAYFWYMYYTWAEQNYTWY BoLA-301701,YSEMYRERAGNIFVSNLYFWYEYYTWAAQNYRWY BoLA-301702,YSEMYRERAGNIFVSNLYFWYMYYTWAAQNYRWY BoLA-301703,YSEMYRERAGNIFVSNLYFWYMYYTWAEQNYRWY BoLA-302701,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-302702,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-303501,YYNMYQENAGNTFVGTLYLWSEFYTWAAHNYTWY BoLA-303601,YYAMYRNNADATFVNTLYFLYEYYTVADHNYRWY BoLA-303701,YSEMYRNNAGNSFVGTLYLLYMDYSRAVQNYRWY BoLA-303801,YNEMYRNNAGNDSVGTLYLWYMYYSMAVQNYTWY BoLA-305001,YSEMYRNNAGNTFGSNLYFLYTYYTWAEWNYTWH BoLA-305002,YSEMYRNNAGNTFGSNLYFWYMYYTWAEQNYTWH BoLA-305101,YSEMYRERAGNTFVNTLYIWYRDYTWAAENYTWY BoLA-305201,YYSMYRENSDTGFVDTLYLLYTYYSVAVQNYRWY BoLA-305301,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-305801,YSEMYRERAGNTFVGTLYLWYMDYSRAVQNYRWY BoLA-305901,YSEMYRNNAGNSFVGTLYLWSMFYTWEYQNYRWH BoLA-306501,YSEMYQEKAGTSSVGTLYLAYMFYSMAVQNYEWY BoLA-306601,YYEMYQEKADTTFVDTLYLLYTYYSMAEFNYTWY BoLA-306602,YYEMYQEKADTTFVDTLYLLYTFYSMAEFNYTWY BoLA-306801,YSIVYQNNAGTTFANTLYLLYMYYTWAAHNYEWY BoLA-307301,YYIIYQEISDTSFVSNLYLWYTYYSMAVQNYEWY BoLA-3:00101,YSEMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-3:00102,YSSMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-3:00103,YSIMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-3:00201,YLEMYQEKAGNFFVSNLYLLSMFYSMAEQNYRWY BoLA-3:00401,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-3:00402,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-3:00403,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-3:01001,YYSEYRNIYDTTFVDTLYLEYEYYSVAEFNYRGY BoLA-3:01101,YSEMYQEKAGTTFANIAYFWYMYYTWAEQNYTWY BoLA-3:01701,YSEMYRERAGNIFVSNLYFWYEYYTWAAQNYRWY BoLA-3:01702,YSEMYRERAGNIFVSNLYFWYMYYTWAAQNYRWY BoLA-3:01703,YSEMYRERAGNIFVSNLYFWYMYYTWAEQNYRWY BoLA-3:02701,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-3:02702,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-3:03501,YYNMYQENAGNTFVGTLYLWSEFYTWAAHNYTWY BoLA-3:03601,YYAMYRNNADATFVNTLYFLYEYYTVADHNYRWY BoLA-3:03701,YSEMYRNNAGNSFVGTLYLLYMDYSRAVQNYRWY BoLA-3:03801,YNEMYRNNAGNDSVGTLYLWYMYYSMAVQNYTWY BoLA-3:05001,YSEMYRNNAGNTFGSNLYFLYTYYTWAEWNYTWH BoLA-3:05002,YSEMYRNNAGNTFGSNLYFWYMYYTWAEQNYTWH BoLA-3:05101,YSEMYRERAGNTFVNTLYIWYRDYTWAAENYTWY BoLA-3:05201,YYSMYRENSDTGFVDTLYLLYTYYSVAVQNYRWY BoLA-3:05301,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-3:05801,YSEMYRERAGNTFVGTLYLWYMDYSRAVQNYRWY BoLA-3:05901,YSEMYRNNAGNSFVGTLYLWSMFYTWEYQNYRWH BoLA-3:06501,YSEMYQEKAGTSSVGTLYLAYMFYSMAVQNYEWY BoLA-3:06601,YYEMYQEKADTTFVDTLYLLYTYYSMAEFNYTWY BoLA-3:06602,YYEMYQEKADTTFVDTLYLLYTFYSMAEFNYTWY BoLA-3:06801,YSIVYQNNAGTTFANTLYLLYMYYTWAAHNYEWY BoLA-3:07301,YYIIYQEISDTSFVSNLYLWYTYYSMAVQNYEWY BoLA-402401,YSIAYEQIVDTTFANTAYIAYSDYTWEYLNYTWY BoLA-402402,YSIAYEEIVDTTFANTAYLPYSDYTWTYLNYTWY BoLA-406301,YYSTYRENFETTFVNTLYILYTFYSRAALNYRGY BoLA-4:02401,YSIAYEQIVDTTFANTAYIAYSDYTWEYLNYTWY BoLA-4:02402,YSIAYEEIVDTTFANTAYLPYSDYTWTYLNYTWY BoLA-4:06301,YYSTYRENFETTFVNTLYILYTFYSRAALNYRGY BoLA-500301,YLIVYEERADHFFRGALYFEYEFYSWASYNYEWY BoLA-503901,YYIVYQEKADTFFLGTLYLWCWFYTWANENYEWY BoLA-506401,YYIVYQEKADHTFANTLYLWHWFYTWANENYEWY BoLA-507201,YYIVYQEKADHFFLGTLYLWYWFYSWAVQNYTWY BoLA-5:00301,YLIVYEERADHFFRGALYFEYEFYSWASYNYEWY BoLA-5:03901,YYIVYQEKADTFFLGTLYLWCWFYTWANENYEWY BoLA-5:06401,YYIVYQEKADHTFANTLYLWHWFYTWANENYEWY BoLA-5:07201,YYIVYQEKADHFFLGTLYLWYWFYSWAVQNYTWY BoLA-601301,YHTTYREISENWYEANLYLEYEYYSMAAFNYTWY BoLA-601302,YHTTYREISENWYEANLYLLYEYYSMAAFNYTWY BoLA-601401,YHTKYREISENWYEANLYYRYTFYTWAEFNYRGY BoLA-601402,YHTKYREISENKYEAILYYRYTFYTWAEFNYRWY BoLA-601501,YYTKYREISENWYEANLYLLYTFYSMADQNYRGY BoLA-601502,YYTKYREISENWYEANLYLQFTFYSMADQNYRGY BoLA-603401,YHTKYREISENVYGSNLYLLYTFYSMADRNYRGY BoLA-604001,YSEMYEERAGIVFVNTLYLWCWFYSMAAGKYTWY BoLA-604101,YHTKYREISENWYEATLYLEYEYYSMAAFNYRSY BoLA-6:01301,YHTTYREISENWYEANLYLEYEYYSMAAFNYTWY BoLA-6:01302,YHTTYREISENWYEANLYLLYEYYSMAAFNYTWY BoLA-6:01401,YHTKYREISENWYEANLYYRYTFYTWAEFNYRGY BoLA-6:01402,YHTKYREISENKYEAILYYRYTFYTWAEFNYRWY BoLA-6:01501,YYTKYREISENWYEANLYLLYTFYSMADQNYRGY BoLA-6:01502,YYTKYREISENWYEANLYLQFTFYSMADQNYRGY BoLA-6:03401,YHTKYREISENVYGSNLYLLYTFYSMADRNYRGY BoLA-6:04001,YSEMYEERAGIVFVNTLYLWCWFYSMAAGKYTWY BoLA-6:04101,YHTKYREISENWYEATLYLEYEYYSMAAFNYRSY BoLA-AW10,YSEMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-D18.4,YYSEYREISENVYESNLYIAYSDYTWEYLNYRWY BoLA-HD6,YHTTYREISENWYEANLYLEYEYYSMAAFNYTWY BoLA-JSP.1,YLEMYQEKAGNFFVSNLYLLSMFYSMAEQNYRWY BoLA-N:00101,YSEMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-N:00102,YSSMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-N:00103,YSIMYRERAGNFFVSNLYLWSMFYSMAEQNYRWY BoLA-N:00201,YLEMYQEKAGNFFVSNLYLLSMFYSMAEQNYRWY BoLA-N:00301,YLIVYEERADHFFRGALYFEYEFYSWASYNYEWY BoLA-N:00401,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-N:00402,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-N:00501,YYAEYRNIYDTIFVDTLYIAYWFYTWAAWNYEWY BoLA-N:00601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-N:00602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWH BoLA-N:00801,YLIMYRENSETTFANTAYVEYMDYTWADWNYRWY BoLA-N:00802,YLIMYRENSETTFANTAYVEYMDYTWADWNYRGY BoLA-N:00901,YYSMYREISENVYGSNLYLLYRDYTWEYLNYRWY BoLA-N:00902,YYSEYREISENVYESNLYLLYRDYTWEYLNYRWY BoLA-N:01001,YYSEYRNIYDTTFVDTLYLEYEYYSVAEFNYRGY BoLA-N:01101,YSEMYQEKAGTTFANIAYFWYMYYTWAEQNYTWY BoLA-N:01201,YYATYRENFDTTFVDTLYIAYRDYTWAEHNYTWY BoLA-N:01301,YHTTYREISENWYEANLYLEYEYYSMAAFNYTWY BoLA-N:01302,YHTTYREISENWYEANLYLLYEYYSMAAFNYTWY BoLA-N:01401,YHTKYREISENWYEANLYYRYTFYTWAEFNYRGY BoLA-N:01402,YHTKYREISENKYEAILYYRYTFYTWAEFNYRWY BoLA-N:01501,YYTKYREISENWYEANLYLLYTFYSMADQNYRGY BoLA-N:01502,YYTKYREISENWYEANLYLQFTFYSMADQNYRGY BoLA-N:01601,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEGY BoLA-N:01602,YSAEYRNIYDTTFVYTLYLWSMFYTWANENYEWY BoLA-N:01701,YSEMYRERAGNIFVSNLYFWYEYYTWAAQNYRWY BoLA-N:01702,YSEMYRERAGNIFVSNLYFWYMYYTWAAQNYRWY BoLA-N:01801,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-N:01802,YYADYRNIYDTIFANTAYFEYMFYTWAEQNYRGY BoLA-N:01901,YHTKYREISENVYGSNLYYDYDYYTWAVFNYRGY BoLA-N:02001,YHTKYREISENVYGSNLYFLYMDYTWAVFNYRGY BoLA-N:02101,YYTKYREISENVYGSNLYFQFRYYTWADFNYEGY BoLA-N:02201,YHSEYEQIVDTSFVGTLYLLYEDYTRAALNYTGY BoLA-N:02301,YYSEYREISENVYESNLYIAYSDYTWEYLNYRWY BoLA-N:02401,YSIAYEQIVDTTFANTAYIAYSDYTWEYLNYTWY BoLA-N:02402,YSIAYEEIVDTTFANTAYLPYSDYTWTYLNYTWY BoLA-N:02501,YSAEYRNIYDTTFVYALYLWSWFYTWAAENYRGY BoLA-N:02601,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-N:02602,YYAEYREISETTFVDTLYIEYEYYTWAYLNYRGY BoLA-N:02701,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-N:02702,YSEMYRNNAGNSFVGTLYLWSMYYTWEYQNYEWH BoLA-N:02801,YYTKYREISEKLYENTLYLQFRYYTWADFNYEWY BoLA-N:02901,YYTRYREISENLYKNTAYITFMYYTWANENYRGY BoLA-N:03001,YYSEYRNIYDTNFVSNLYLWSWFYTWANENYEWY BoLA-N:03101,YYTKYDEISENLYKNTLYIAFRDYTWAYLNYTWY BoLA-N:03401,YHTKYREISENVYGSNLYLLYTFYSMADRNYRGY BoLA-N:03501,YYNMYQENAGNTFVGTLYLWSEFYTWAAHNYTWY BoLA-N:03601,YYAMYRNNADATFVNTLYFLYEYYTVADHNYRWY BoLA-N:03701,YSEMYRNNAGNSFVGTLYLLYMDYSRAVQNYRWY BoLA-N:03801,YNEMYRNNAGNDSVGTLYLWYMYYSMAVQNYTWY BoLA-N:03901,YYIVYQEKADTFFLGTLYLWCWFYTWANENYEWY BoLA-N:04001,YSEMYEERAGIVFVNTLYLWCWFYSMAAGKYTWY BoLA-N:04101,YHTKYREISENWYEATLYLEYEYYSMAAFNYRSY BoLA-N:04201,YHTKYDEISENLYKDTLYIAYRDYTWEYLNYRGY BoLA-N:04301,YSEMYRERAGNTFVNTLYIWYRDYTWAVFNYLGY BoLA-N:04401,YYAMYEEKADTTFVDTLYIAYRDYTWAVFNYLGY BoLA-N:04501,YYATYRENLDTTFVDTLYIEYRDYTWAEFNYLGY BoLA-N:04601,YSEMYRERAGNTFVNTLYIWYRDYTWAEQNYTWY BoLA-N:04701,YSEMYQERAGNTFVDTLYLWYMDYTWAEQNYTWY BoLA-N:04801,YYSEYEQIVDTSFVGTLYLLYMDYTRAAQNYRGY BoLA-N:04901,YYAEYREISDTSFVGTLYIEYEYYTWAYLNYEGY BoLA-N:05001,YSEMYRNNAGNTFGSNLYFLYTYYTWAEWNYTWH BoLA-N:05101,YSEMYRERAGNTFVNTLYIWYRDYTWAAENYTWY BoLA-N:05201,YYSMYRENSDTGFVDTLYLLYTYYSVAVQNYRWY BoLA-N:05301,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY BoLA-N:05401,YYIMYQENSGATFANTLYFWYWFYTWANENYRGY BoLA-N:05501,YYAEYREISETTFVDSLYIAYRDYTWAYLNYRGY BoLA-N:05601,YYATYQENFDATFANTLYFLSTYYTWEAHNYRGY BoLA-T2C,YYIIYRNISDTSFVSNLYLLYTYYSMAVQNYEWH BoLA-T2a,YYATYRENFDTTFVDTLYIAYRDYTWAEHNYTWY BoLA-T2b,YHTKYREISENWYEATLYLEYEYYSMAAFNYRSY BoLA-T2c,YYIIYRNISDTSFVSNLYLLYTYYSMAVQNYEWH BoLA-T5,YYSEYREISENVYESNLYLLYRDYTWEYLNYRWY BoLA-T7,YLAMYRNNANTTFVNNLYVEHMYYSMAEQNYTWY BoLA-amani.1,YYATYRENLDATFVNTAYIAYMDYTWEYQNYEWY BoLA-gb1.7,YSEMYRNNAGNSFVNTLYLWSMYYTWAYQNYEWY Chi-B0401,YRTYYGQIGLNINENIRRVWFRSYTWEEWNYTWY Chi-B1201,YRDYYGQIGGNIDENILRVWYYMYTWGYLQYTWY Chi-B1501,YSDAYSETSRTIDDGTLRVLYSDYTWGYLQYTWY DLA-8803401,YYAMYGEKVETLYVDTLYITYSDYTRADLNYTWY DLA-8850101,YYAMYPQTIETTFVDTLYRTYRDYTWAVWNYTWY DLA-8850801,YYATYGEKVETVYVDTLYITYRDYTWAVWNYTWY Eqca-100101,YKSMYEETAGHTFGNIAYFWSSFYTWAEHNYRWY Eqca-1600101,YYTMYRESVGHTFVNTLYLLYFYYTWAAFNYRSY Eqca-16:00101,YYTMYRESVGHTFVNTLYLLYFYYTWAAFNYRSY Eqca-1:00101,YKSMYEETAGHTFGNIAYFWSSFYTWAEHNYRWY Gogo-B0101,YDTMYRETSAQTDENIAYIRFSSYTWAELAYTWY H-2-Db,YESYYREKAGQWFVSNLYLQSLFYTWSAYAYEWY H-2-Dd,YVEYYRERAGNSFVDTAYLWAWFYTWAADAYEWY H-2-Dq,YESYYRIIADNWFVSTAYIRYEFYTWGAYAYEWY H-2-Kb,YVEYYREKAGNSFVDTLYIVSQYYTWAELAYTWY H-2-Kd,YVAFYEQRASDWFVSTAYFRFQFYTWADYAYEWY H-2-Kk,YHSYYRNIAGNIFVNTAYFRYEYYTWADDAYTWY H-2-Kq,YHSYYRNIADNSSVDTLYIRYEVYTWAARAYAWH H-2-Ld,YESYYRIIAGQWFVNTLYLWYEFYTWAAYAYEWY H-2-Lq,YESYYRIIAGQWFVNTLYIRYEYYTWAAYAYEWY H-2-Qa1,YHIMYREKADMNFVNTLYLWYCEYSSVEQAYPWY H-2-Qa2,YHSMYREIAGHSFGSTAYLWYLFYTWAIDAYTSY H2-Db,YESYYREKAGQWFVSNLYLQSLFYTWSAYAYEWY H2-Dd,YVEYYRERAGNSFVDTAYLWAWFYTWAADAYEWY H2-Dq,YESYYRIIADNWFVSTAYIRYEFYTWGAYAYEWY H2-Kb,YVEYYREKAGNSFVDTLYIVSQYYTWAELAYTWY H2-Kd,YVAFYEQRASDWFVSTAYFRFQFYTWADYAYEWY H2-Kk,YHSYYRNIAGNIFVNTAYFRYEYYTWADDAYTWY H2-Kq,YHSYYRNIADNSSVDTLYIRYEVYTWAARAYAWH H2-Ld,YESYYRIIAGQWFVNTLYLWYEFYTWAAYAYEWY H2-Lq,YESYYRIIAGQWFVNTLYIRYEYYTWAAYAYEWY H2-Qa1,YHIMYREKADMNFVNTLYLWYCEYSSVEQAYPWY H2-Qa2,YHSMYREIAGHSFGSTAYLWYLFYTWAIDAYTSY HLA-A0101,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0102,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0103,YFAMYQENMAHTDANTLYIMYRDYTWVARVYRGY HLA-A0104,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0106,YFAMYQENMAHTDANTLYIIYRDYTWVALAYRGY HLA-A0107,YFAMYQENVAHTDENTLYIIYRDYTWVARVYRGY HLA-A0108,YFAMYQENMAHTDANTLYIIYRDYTWVARVYWGY HLA-A0109,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0110,YFAMYQENMAHTDANTLYIIYRDYTWARRVYRGY HLA-A0111,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0112,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A0113,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A0114,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTGY HLA-A0115,YFAMYQENMAHTDANTLYIIYRDYTWVARVYGGT HLA-A0117,YFAMYQENMAQTDANTLYIIYRDYTWVARVYRGY HLA-A0118,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0119,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A0120,YSAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A0121,YFAMYQENMAHTDANTLYIIYRDYTWAVRVYRGY HLA-A0122,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0123,YFAMYQENVAHTDANTLYIIYRDYTWVARVYRGY HLA-A0124,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0125,YFAMYQENMAHTDANTLYIIYRDYTWVAQVYRGY HLA-A0126,YFAMYQENMAHTDANTLYIIYRDYTWAARVYRGY HLA-A01:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:02,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:03,YFAMYQENMAHTDANTLYIMYRDYTWVARVYRGY HLA-A01:04,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:06,YFAMYQENMAHTDANTLYIIYRDYTWVALAYRGY HLA-A01:07,YFAMYQENVAHTDENTLYIIYRDYTWVARVYRGY HLA-A01:08,YFAMYQENMAHTDANTLYIIYRDYTWVARVYWGY HLA-A01:09,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:10,YFAMYQENMAHTDANTLYIIYRDYTWARRVYRGY HLA-A01:100,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:101,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:102,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:103,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:104,YFAMYQENMAHTHANTLYIIYRDYTWVARVYRGY HLA-A01:105,YFAMYQENIAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:106,YFAMYQENMAHTDANTLYIIYRDYSWVARVYRGY HLA-A01:107,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:108,YFAMYQENMAHTNANTLYIIYRDYTWVARVYRGY HLA-A01:109,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:110,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:111,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:112,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:113,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:114,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:115,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:116,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:117,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:118,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:119,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:12,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A01:120,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:121,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:122,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:124,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:125,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:126,YFAMYQENMAHTDANTLYIIYRDYTWVVRVYRGY HLA-A01:127,YFAMYQENMAHTDANTLYIIYRDYTWVAQAYRGY HLA-A01:128,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:129,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:13,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A01:130,YFAMYQENMAHTDANTLYVRCRDYTWVARVYRGY HLA-A01:131,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:132,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:133,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:134,YFAMYQENMAHTHVNTLYIIYRDYTWVARVYRGY HLA-A01:135,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:136,YFAMYQENMAHTDANTLYIIYRDYTWAAQAYRGY HLA-A01:137,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:138,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:139,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:14,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTGY HLA-A01:140,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:141,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:142,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:143,YTAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:144,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:145,YFAMYQENMAHTDANTLYIIYQDYTWVARVYRGY HLA-A01:146,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:148,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:149,YFAMYQENMAHTDANTLYIIYRDYTWVARVYGGY HLA-A01:150,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:151,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:152,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:153,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:154,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:155,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:156,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:157,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:158,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:159,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:161,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:163,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:164,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:165,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:166,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:167,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:168,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:169,YFAMCQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:17,YFAMYQENMAQTDANTLYIIYRDYTWVARVYRGY HLA-A01:170,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:171,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:172,YFAMYQENMAHTDANTQYIIYRDYTWVARVYRGY HLA-A01:173,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:174,YFAMYQENMAHTDANTLYIIYRDHTWVARVYRGY HLA-A01:175,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:176,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A01:177,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:180,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:181,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:182,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:183,YFAMYQENMAHTDANILYIIYRDYTWVARVYRGY HLA-A01:184,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:185,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:187,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:188,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:189,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:19,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A01:190,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:191,YFAMYQEKVAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:192,YFAMYQENMAHTDANTLYIMYRDYTWAARVYRGY HLA-A01:193,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:194,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A01:195,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:196,YFAMYQENMAHTDANTLYIIYRDYTWVERVYRGY HLA-A01:197,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:198,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:199,YFSMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:20,YSAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A01:200,YFAMYQENMAHTDANTLYIIYRDYTWAVLAYTWY HLA-A01:201,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:202,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:203,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:204,YFAMYQENMTHTDANTLYIIYRDYTWVARVYRGY HLA-A01:205,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:206,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:207,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:209,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:21,YFAMYQENMAHTDANTLYIIYRDYTWAVRVYRGY HLA-A01:210,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:211,YFAMYQENMAHSDANTLYIIYRDYTWVARVYRGY HLA-A01:212,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:213,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:214,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:215,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:216,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:217,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:218,YFAMYQENMAHTDANTLYIIYRGYTWVARVYRGY HLA-A01:219,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:220,HFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:221,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:222,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:223,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:224,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:225,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:226,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:227,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:229,YFAMYQENMAHTHVDTLYIIYRDYTWVARVYRGY HLA-A01:23,YFAMYQENVAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:230,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:231,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:232,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:233,YFAMYQENMAHTDANTLYIIYRDYTWVARIYRGY HLA-A01:234,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:235,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:236,YFAMYQENMAHTDANTLYIIYHYYTWVARVYRGY HLA-A01:237,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:238,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:239,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:24,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:241,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:242,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:243,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:244,YFAMYQENMAHTDANTLYIIYRDYTWAVLAYTWY HLA-A01:245,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:246,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:249,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:25,YFAMYQENMAHTDANTLYIIYRDYTWVAQVYRGY HLA-A01:251,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:252,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:253,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:254,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:255,YFAMYQENMAHTDANTLYITYRDYTWVARVYRGY HLA-A01:256,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:257,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:259,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:26,YFAMYQENMAHTDANTLYIIYRDYTWAARVYRGY HLA-A01:260,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:261,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:262,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:263,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:264,YFAMYQENMAHTDANTLYIIYRDYTWFARVYRGY HLA-A01:265,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:266,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:267,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:268,YFAMYQENMAHTDANTLYIIYRDQTWVARVYRGY HLA-A01:270,YFAMYQENMAHTGANTLYIIYRDYTWVARVYRGY HLA-A01:271,YFAMYQENMAHTDANTLYIIYWDYTWVARVYRGY HLA-A01:272,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:273,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:274,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:275,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:276,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:277,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:278,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:279,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:28,YFAMYQENMAHTDVDTLYIIYRDYTWVARVYRGY HLA-A01:280,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:281,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:282,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:283,YFTMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:284,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRRY HLA-A01:286,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:288,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:289,YFAMYQENMAHTDENIAYIIYRDYTWVARVYRGY HLA-A01:29,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:291,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:292,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:294,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:295,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:296,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:297,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:30,YFAMYQENMAHTDANTLYIIYHYYTWVARVYRGY HLA-A01:32,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:33,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:35,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:36,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:37,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:38,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:39,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:40,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:41,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:42,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:43,YYAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:44,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:45,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:46,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:47,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:48,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:49,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:50,YFAMYQENMAHTDANTLYIIYREYTWVARVYRGY HLA-A01:51,YFAMYRNNVAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:54,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:55,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:58,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:59,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:60,YFAMYPENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:61,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:62,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:63,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:64,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:65,YFAMYQENMAHTDANTLYIIYRDYTWVARVCRGY HLA-A01:66,YFAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A01:67,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:68,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:69,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:70,YFAMYQENMAHTDANTLYIIYRDYTCVARVYRGY HLA-A01:71,YFAMYQDNMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:72,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A01:73,YFAMYQENMAHTDANTLYLRYRDYTWVARVYRGY HLA-A01:74,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:75,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:76,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:77,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:78,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:79,YFAMYQENMAHTDANTLYIIYPDYTWVARVYRGY HLA-A01:80,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:81,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:82,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:83,YFAMYGEKVAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:84,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:85,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:86,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:88,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:89,YFAMYQENMAHTDANTLYLIYRDYTWVARVYRGY HLA-A01:90,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:91,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:92,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:93,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:94,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:95,YFAMYQENMAHTDENIAYIIYRDYTWVARVYRGY HLA-A01:96,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:97,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A01:98,YFAMYQENMAHTDANTLYIIYRDYTWVARAYRGY HLA-A01:99,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A0201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0202,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A0203,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A0204,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A0205,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A0206,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0207,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A0208,YYAMYGENVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A0209,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0210,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A0211,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A0212,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A0213,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A0214,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A0215,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A0216,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A0217,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A0218,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A0219,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A0220,YFAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0221,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0222,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A0224,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0225,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0226,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A0227,YFAMYGEKVAHTHVDTLYVRYHYYTWAAQAYTWY HLA-A0228,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0229,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0230,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0231,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0233,YFAMYGEKVAHTHVDTLYVRSHYYTWAVLAYTWY HLA-A0234,YFAMYGEKVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A0235,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A0236,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTGY HLA-A0237,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A0238,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYRWY HLA-A0239,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A0240,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0241,YYAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A0242,YFSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0243,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0244,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A0245,YFAMYQEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0246,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0247,YFAMYGEKVAHSHVDTLYLRYHYYTWAVWAYTWY HLA-A0248,YFAMYEEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A0249,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A0250,YFAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A0251,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0252,YFAMYGEKVAHTHVDTLYVRYEHYTWAVLAYTWY HLA-A0254,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A0255,YFAMYRNNVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0256,YFAMYQENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A0257,YYAMYGEKVAHTHVDTLYLMYHYYTWAVLAYTWY HLA-A0258,YFAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A0259,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0260,YFAMYGEKVAHTHVDTLYVRYHFYTWAVLAYTWY HLA-A0261,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0262,YFAMYGENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A0263,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A0264,YFAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A0265,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A0266,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0267,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0268,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0269,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A0270,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0271,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0272,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0273,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A0274,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0275,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0276,YSAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0277,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0278,YYAMYQENVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A0279,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0280,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A0281,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A0283,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0284,YYAMYGEKVAHTHVDTLYFRYHYYTWAVLAYTWY HLA-A0285,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0286,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0287,YFAMYGEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A0289,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0290,YFAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A0291,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0292,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0293,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0295,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0296,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0297,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A0299,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:01,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:02,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:03,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:04,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A02:05,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:06,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:07,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:08,YYAMYGENVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:09,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:10,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:101,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYRWY HLA-A02:102,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:103,YFAMYQENVAQTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:104,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A02:105,YFAMYGEKVAHTHVDTLYVRYEYYTWAVLAYTWY HLA-A02:106,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:107,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:108,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:109,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:11,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:110,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:111,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:112,YFAMYGEKVAHTDENIAYVRCHYYTWAVLAYTWY HLA-A02:114,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A02:115,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:116,YFAMYGEKVAHTHLDTLYVRYHYYTWAVLAYTWY HLA-A02:117,YFAMYGEKVAHTHVDTLYVRYQDYTWAEWAYTWY HLA-A02:118,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:119,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:12,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A02:120,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:121,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:122,YYAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A02:123,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:124,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A02:126,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:127,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A02:128,YFAMYGENVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:129,YYAMYEEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A02:13,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A02:130,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:131,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A02:132,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:133,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:134,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:135,YFAMYGEKVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A02:136,YFAMYGEKVAHTDENIAYVRYHYYTWAVWAYTWY HLA-A02:137,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:138,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:139,YFAMYGEKVTHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:14,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A02:140,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:141,YFVMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:142,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A02:143,YYAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:144,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:145,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:146,YFAMYGEKVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A02:147,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A02:148,YFAMYGEKVAHTHVDTLYVRFHYYTWAEWAYTWY HLA-A02:149,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:150,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:151,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A02:152,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A02:153,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:154,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYRWY HLA-A02:155,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:156,YFAMYGEKVAHTHVDTLYIIYHYYTWAVLAYTWY HLA-A02:157,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:158,YFAMYGEKVAHAHVDTLYVRYHYYTWAVLAYTWY HLA-A02:159,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:16,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A02:160,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:161,YFAVYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:162,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:163,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:164,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:165,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:166,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:167,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A02:168,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:169,YYAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:17,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:170,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:171,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:172,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:173,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:174,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:175,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:176,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:177,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:178,YYAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A02:179,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:18,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:180,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:181,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:182,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:183,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:184,YFAMYGEKVAHTHEDTLYVRYHYYTWAVLAYTWY HLA-A02:185,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:186,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:187,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:188,YFAMYGEKVAHTHVDTLYVRYDSYTWAVLAYTWY HLA-A02:189,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:19,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A02:190,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:191,YFAMYGEKVAHTHVDTLYVRCHYYTWAVWAYTWY HLA-A02:192,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:193,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:194,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:195,YFAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:196,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:197,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:198,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:199,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:20,YFAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:200,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:202,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:203,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:204,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:205,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:206,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:207,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:208,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:209,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:21,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:210,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:211,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:212,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:213,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:214,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:215,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:216,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:217,YFAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:218,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:219,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:22,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A02:220,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:221,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:224,YFAMYGEKVAHTHVDTLYVGYHYYTWAVLAYTWY HLA-A02:228,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:229,YYAMYGEKVAHTHVDTLYLRYRYYTWAVWAYTWY HLA-A02:230,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:231,YFAMYGEKVAHTHVDTLYVRNHYYTWAVLAYTWY HLA-A02:232,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:233,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTRY HLA-A02:234,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:235,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:236,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:237,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:238,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:239,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:24,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:240,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:241,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:242,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:243,YTAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:244,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:245,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A02:246,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A02:247,YFAMYGEKVAHTDENTLYVRYHYYTWAVLAYTWY HLA-A02:248,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:249,YFAMYVEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:25,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:251,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:252,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:253,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:254,YFAMYGEKVAHTHVDTLYVRYNFYTWAVLAYTWY HLA-A02:255,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTGY HLA-A02:256,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:257,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:258,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:259,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:26,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:260,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:261,YFAMYGEKVAHTHMDTLYVRCHYYTWAVLAYTWY HLA-A02:262,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLVYTWY HLA-A02:263,YFAMYGEKVAHTHVDTLYVRYHYYTWSVLAYTWY HLA-A02:264,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:265,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:266,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:267,YFAMYGEKVAHTHVDTLYVRYHYYTWAAWAYTWY HLA-A02:268,YFAMYGEKVAHTHVDTLYVMFHYYTWAVLAYTWY HLA-A02:269,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:27,YFAMYGEKVAHTHVDTLYVRYHYYTWAAQAYTWY HLA-A02:270,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:271,YYAMYGEKVAHTHVDTLYLRYHYYTWAVQAYTWY HLA-A02:272,YFAMYGEKLAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:273,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:274,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:275,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:276,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:277,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:278,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:279,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A02:28,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:280,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A02:281,YFAMYGEKVAHTHVDILYVRYHYYTWAEWAYTWY HLA-A02:282,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:283,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:285,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:286,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:287,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:288,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:289,YFAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A02:29,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:290,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:291,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:292,YFAMYGEKVSHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:294,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:295,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:296,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:297,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:298,YFAMYGEKVAHIDVDTLYVRYHDYTWAVLAYTWY HLA-A02:299,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:30,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:300,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:302,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:303,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:304,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A02:306,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:307,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:308,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:309,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A02:31,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:310,YYSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:311,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:312,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:313,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:315,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:316,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:317,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:318,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:319,YSAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:320,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:322,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:323,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:324,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:325,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:326,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:327,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:328,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:329,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:33,YFAMYGEKVAHTHVDTLYVRSHYYTWAVLAYTWY HLA-A02:330,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:331,YYAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:332,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWH HLA-A02:333,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:334,YFAMYGEKVAHTHVDTLYIMYHYYTWAVLAYTWY HLA-A02:335,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:336,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:337,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:338,YFAMYGEKVAHTHVDTLYIIYHYYTWAVLAYTWY HLA-A02:339,YFAMYGEKVAHTHVDTLYVRYDLYTWAVLAYTWY HLA-A02:34,YFAMYGEKVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:340,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:341,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:342,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:343,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:344,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:345,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:346,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:347,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:348,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:349,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:35,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:351,YFAMYGEKVARTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:352,CFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:353,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:354,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYAWY HLA-A02:355,YYAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:357,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:358,YYAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:359,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:36,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTGY HLA-A02:360,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:361,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:362,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:363,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:364,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:365,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:367,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:368,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:369,YFAMYEEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:37,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A02:370,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:371,YFAMYGEKVAHTHVDTLYVRYHYYIWAVLAYTWY HLA-A02:372,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:374,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:375,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:376,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYLWY HLA-A02:377,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:378,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:379,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:38,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYRWY HLA-A02:380,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:381,YFAMYGEKVAHTHVDSLYVRYHYYTWAVLAYTWY HLA-A02:382,YYAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A02:383,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:384,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:385,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYMWY HLA-A02:386,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:387,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:388,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:389,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:39,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:390,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:391,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:392,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:393,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:394,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:396,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:397,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:398,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:399,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:40,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:400,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:401,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:402,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:403,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLTYTWY HLA-A02:404,YYAMYGEKVAHTHVDTLYVRYHHYTWAVLAYTWY HLA-A02:405,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:406,YFAMYGEKVAHTHVDTLYVRYHDYTWAVLAYTWY HLA-A02:407,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:408,YFAMYGEKVAHTHVDTLYVRCHYYTWAALAYTWY HLA-A02:409,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:41,YYAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A02:410,YFAMYAEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:411,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:412,YFAMYGEKVAHTHVDTLYVRYHSYTWAEWAYTWY HLA-A02:413,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:414,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:415,YYAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:416,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:417,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A02:418,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:419,YYAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:42,YFSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:420,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:421,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:422,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:423,YFAMYGEKVAHTHVDTLYVRYHHYTWAVLAYTWY HLA-A02:424,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:425,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:426,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:427,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:428,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:429,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:430,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:431,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:432,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTSY HLA-A02:433,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:434,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:435,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:436,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:437,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYEWY HLA-A02:438,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:44,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A02:441,HFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:442,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:443,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:444,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:445,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:446,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:447,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYRWY HLA-A02:448,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:449,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:45,YFAMYQEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:450,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:451,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:452,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:453,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:454,YYAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A02:455,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:456,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:457,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:458,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:459,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:46,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:460,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:461,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:462,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:463,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:464,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:465,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:466,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:467,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:469,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:47,YFAMYGEKVAHSHVDTLYLRYHYYTWAVWAYTWY HLA-A02:470,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:471,YYAMYGEKVVHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:472,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:473,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:474,YYAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:475,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:477,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:478,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:479,YFAMYGEKVAHSHVDTLYVRYHYYTWAVLAYTWY HLA-A02:48,YFAMYEEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:480,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:481,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:482,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:483,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:484,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:485,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:486,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:487,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A02:488,YFAMYGEKVAHTHVDTLYVRYHYCTWAVLAYTWY HLA-A02:489,YYAMYGEKVAHTHVDTLYLRYHYYTWAEWAYTWY HLA-A02:49,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A02:491,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:492,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:493,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:494,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:495,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:496,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:497,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:498,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:499,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:50,YFAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A02:502,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:503,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:504,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:505,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:507,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:508,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:509,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:51,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:510,YFAMYGEKVAHTHVDTLYVRYHLYTWAVLAYTWY HLA-A02:511,YFAMYGEKVAHTHVDTLYVSYHYYTWAVLAYTWY HLA-A02:512,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:513,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:515,YFAMYGEKVAHTHMDTLYVRYHYYTWAVLAYTWY HLA-A02:517,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:518,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:519,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:52,YFAMYGEKVAHTHVDTLYVRYEHYTWAVLAYTWY HLA-A02:520,YFAMYGEKVAHTHVDTLYVRYYYYTWAVLAYTWY HLA-A02:521,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:522,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:523,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:524,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:526,YFAMYGEKVAHTHVDTLYVKYHYYTWAVLAYTWY HLA-A02:527,YYAMYGEKVAHTHVDTLYLRYRDYTWAVWAYTWY HLA-A02:528,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:529,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYMWY HLA-A02:530,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:531,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:532,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:533,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:534,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:535,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:536,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:537,YFAMYGEKVAHTHVDTLYVRYHYYTWDVLAYTWY HLA-A02:538,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:539,YFAMYGEKVAHTHVDTLYVRYHYYTLAVLAYTWY HLA-A02:54,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A02:541,YFAMYGEKVAHTHVDTLYVRCHYYTWAELAYTWY HLA-A02:542,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:543,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYRWY HLA-A02:544,YFAMYGEKVAHTHVDTLYVRCHYYTWAEWAYTWY HLA-A02:545,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:546,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:547,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLVYTWY HLA-A02:548,YFAMYGEKVAHTHVDTLYVRHHYYTWAVLAYTWY HLA-A02:549,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:55,YFAMYRNNVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:550,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:551,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:552,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:553,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:554,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:555,YFAMYGEKVAHTHVDTLYVRYNYYTWAVLAYTWY HLA-A02:556,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:557,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:558,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:559,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:56,YFAMYQENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:560,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A02:561,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:562,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:563,YFAMYGEKVAHTHVDTLYVRYHYYAWAVLAYTWY HLA-A02:564,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:565,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:566,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:567,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:568,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:569,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:57,YYAMYGEKVAHTHVDTLYLMYHYYTWAVLAYTWY HLA-A02:570,YFTMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:571,YFAMYEEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A02:572,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:573,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:574,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:575,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:576,YFAMYGEKVAHTHVDTLYVRYHYYTWVVLAYTWY HLA-A02:577,YYAMYGEKVAHTHGDTLYLRYHYYTWAVWAYTWY HLA-A02:578,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:579,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:58,YFAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A02:580,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:581,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A02:582,YFAMYGEKVAHTHVDTLYVRYRDYTWAVWAYTWY HLA-A02:583,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:584,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:585,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:586,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:587,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:588,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:589,YFAMYGEKVAHIDVDTLYVRYHYYTWAELAYTWY HLA-A02:59,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:590,YFAMYGEKVAHTHVDTLYVRYHYYTWAALAYTWY HLA-A02:591,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:592,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:593,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:594,YFAMYGEKVAHTHVDTLYVRYNFYTWAVLAYTWY HLA-A02:595,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:596,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:597,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:598,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:599,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:60,YFAMYGEKVAHTHVDTLYVRYHFYTWAVLAYTWY HLA-A02:600,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:601,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:602,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:603,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:604,YFAMYGEKVAHTHVDTLYVRIHYYTWAVLAYTWY HLA-A02:606,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:607,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:609,YFAMYGENMAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:61,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:610,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:611,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:612,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:613,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:614,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:615,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:616,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:617,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:619,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:62,YFAMYGENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:620,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:621,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:623,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:624,YFAMYGEKVAHTHVDTLCVRYHYYTWAVLAYTWY HLA-A02:625,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:626,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:627,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:628,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A02:629,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:63,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:630,YYAMYGEKVAHTHVDTLYVRFHYYTWAVQAYTWY HLA-A02:631,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:632,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:633,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:634,YFAMYGENVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:635,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:636,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:637,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:638,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:639,YFAMYGEKVAHTHVDILYVRYHYYTWAVLAYTWY HLA-A02:64,YFAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A02:640,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:641,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:642,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:644,YFAMYRNNVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A02:645,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:646,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:647,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:648,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:649,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:65,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A02:650,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:651,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A02:652,YFAMYGEKVAHTHVDTLNVRCHYYTWAVLAYTWY HLA-A02:653,YFAMYGEKVAHTHVDTLHVRYHYYTWAVLAYTWY HLA-A02:654,YFAMYGEKVAHTHVDTLYVRYHYYTCAVLAYTWY HLA-A02:655,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:656,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:657,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A02:658,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:659,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:66,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:660,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:661,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:662,YFAMYGEKVAHTHVDTLYVRYRDYTWAAQAYTWY HLA-A02:663,YFAMYGEKVAYTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:664,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A02:665,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:666,YSAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:667,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:668,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:669,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:67,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:670,YYAMYGEKVAHTHVDTLHLRYHYYTWAVWAYTWY HLA-A02:671,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:673,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:674,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:676,YYAMYGEKVAHTHVDTLYLRYHSYTWAVWAYTWY HLA-A02:677,YFAMYGEKVDHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:678,YFAMYGEKVAHTHVDTLYVRCHSYTWAVLAYTWY HLA-A02:679,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:68,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:680,YFAMYGEKVAHTHVDTLYLMFHYYTWAVWAYTWY HLA-A02:681,YFAMYGEKVAHTHVDTLYVRYRYYTWAVLAYTWY HLA-A02:682,YFAMYGEKVAHTHVDTLYVRYHYYTWVARAYTWY HLA-A02:683,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A02:684,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:685,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:686,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:687,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:688,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:689,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:69,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:690,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:692,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:693,YFAMYGEKVAHTHVDTLYVRYHYYTWAVFAYEWY HLA-A02:694,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:695,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:697,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:698,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:699,YFAMYGEKVAHTHVDTLYVRYHYYTWAGLAYTWY HLA-A02:70,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:700,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQVYTWY HLA-A02:701,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:702,YFAMYGEKVALTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:703,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:704,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:705,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:706,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:707,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:708,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLANTWY HLA-A02:709,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:71,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:711,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:712,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:713,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:714,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:716,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:717,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:718,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:719,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:72,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:720,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:721,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:722,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:723,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A02:724,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:725,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:726,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:727,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:728,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:729,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:73,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A02:730,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:731,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:732,YFAMYGEKVAHTHVYTLYVRYHYYTWAVLAYTWY HLA-A02:733,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:734,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:735,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:736,YFAMYGEKVAHTHVDTLYVWYHYYTWAVLAYTWY HLA-A02:737,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:738,YFAMYGEKVVHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:739,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:74,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:740,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:741,YFAMYRNKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:742,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:743,YFAMYGEKVAHTHVDTLYVRYNYYTWAVLAYTWY HLA-A02:744,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:745,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:746,YFAMYWEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:747,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:749,YFAMYGEKVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A02:75,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:750,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:751,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:752,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:753,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:754,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:755,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:756,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:757,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:758,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:759,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:76,YSAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:761,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:762,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:763,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:764,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:765,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:766,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:767,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:768,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:769,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:77,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:770,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:771,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:772,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:774,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:776,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:777,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:778,YYAMYGEKVAHNHVDTLYLRYHYYTWAVWAYTWY HLA-A02:779,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:78,YYAMYQENVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:780,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:781,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:782,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A02:783,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:784,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:785,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:786,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:787,YFAMYGEKVVHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:79,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:790,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:794,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:795,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:798,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:799,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:80,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A02:800,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:801,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:802,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:804,YFAMYGEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A02:808,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:809,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A02:81,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A02:810,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:811,YFAMYGEKVAHTHVDTLYVRYHYYTWAVFAYTWY HLA-A02:812,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:813,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:814,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:815,YFAMYRNNVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:816,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:817,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A02:818,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A02:819,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:820,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:821,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A02:822,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A02:823,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:824,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:825,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:84,YYAMYGEKVAHTHVDTLYFRYHYYTWAVLAYTWY HLA-A02:85,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:86,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:87,YFAMYGEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A02:89,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:90,YFAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A02:91,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:92,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:93,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:95,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:96,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:97,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A02:99,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A0301,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0302,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A0303,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0304,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0305,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0306,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0307,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A0308,YFAMYQENVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A0309,YFAMYQENVAQTHVDTLYIIYRDYTWAELAYTWY HLA-A0310,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A0312,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0313,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0314,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0315,YFAMYQENVAQTDVDTLYIIFRDYTWAELAYTWY HLA-A0316,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0317,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0318,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A0319,YFAMYQENVAQTDVDTLYIIFHYYTWAELAYTWY HLA-A0320,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0321,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0322,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0323,YFAMYGEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0324,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0325,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0326,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0327,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0328,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A0329,YFAMYQENVVQTDVDTLYIIYRDYTWAELAYTWY HLA-A0330,YFAMYEEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:01,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:02,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:04,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:05,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:06,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:07,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A03:08,YFAMYQENVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A03:09,YFAMYQENVAQTHVDTLYIIYRDYTWAELAYTWY HLA-A03:10,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:100,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:101,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:102,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:103,YFAMYQENVAQTDVDTLYIIYQDYTWAELAYTWY HLA-A03:104,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWH HLA-A03:105,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A03:106,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:107,YFAMYQENMAHTDANTLYIIYRDYTWAELAYTWY HLA-A03:108,YFAMYQENVAHTHVDTLYIIYRDYTWAELAYTWY HLA-A03:109,YFAMYQENVAQTDVHTLYIIYRDYTWAELAYTWY HLA-A03:110,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:111,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:112,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:113,YFAMYQEKVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:114,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:115,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:116,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:117,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:118,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:119,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:12,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:120,YFAMYQENVAQTDVDTLYIIYRDCTWAELAYTWY HLA-A03:121,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:122,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTGY HLA-A03:123,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:124,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:125,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:126,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:127,YFAMYQENVAQTDVDTLYIIYRDYTWAALAYTWY HLA-A03:128,YFAMYQENVAQTDLDTLYIIYRDYTWAELAYTWY HLA-A03:13,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:130,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:131,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:132,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:133,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A03:134,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:135,YFAMYQENVAQTDVDTLYIIYRDYTWAERVYRGY HLA-A03:136,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:137,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:138,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:139,YFAMYQENVAQTDVDTLYIIYRDYTWAKLAYTWY HLA-A03:14,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:140,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:141,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:142,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:143,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:144,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:145,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:146,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:147,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:148,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:149,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:15,YFAMYQENVAQTDVDTLYIIFRDYTWAELAYTWY HLA-A03:150,YFAMYQENVAQTDVDTLYIIYRDYTWAELVYTWY HLA-A03:151,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:152,YFAMYEEKVAHTDENIAYIIYRDYTWAELAYTWY HLA-A03:153,YFAMYQENVAQTDVDTLYIIYRDYTWAERVYTWY HLA-A03:154,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:155,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:156,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:157,YFAMYQEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:158,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:159,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:16,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:160,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:163,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:164,YFAMYQENMAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:165,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:166,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:167,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTGY HLA-A03:169,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:17,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:170,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:171,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A03:172,YFAMYQEKVAHTHVDTLYIIYRDYTWAELAYTWY HLA-A03:173,YFAMYQENVAQTDEDTLYIIYRDYTWAELAYTWY HLA-A03:174,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:175,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:176,YFAMYQEKVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A03:177,YFAMYQENVAQTDVDTLYIRYRDYTWAELAYTWY HLA-A03:179,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:18,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A03:180,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:181,YFAMYQENVAQTDVDSLYIIYRDYTWAELAYTWY HLA-A03:182,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:183,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:184,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:185,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:186,YFAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A03:187,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYTWY HLA-A03:188,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:189,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:19,YFAMYQENVAQTDVDTLYIIFHYYTWAELAYTWY HLA-A03:190,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:191,YFAMYQENVAQTDVDTLYIIYGDYTWAELAYTWY HLA-A03:193,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:195,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:196,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:198,YFAMYGEKVAHTHVDTLYIIYRDYTWAVQAYTWY HLA-A03:199,YFAMYQENVAQSDVDTLYIIYRDYTWAELAYTWY HLA-A03:20,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:201,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:202,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:203,YFAMYQENVAQSDVDTLYIIYRDYTWAELAYTWY HLA-A03:204,YFAMYQENVAQTDVDTLYMVYRDYTWAELAYTWY HLA-A03:205,YTAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:206,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:207,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:208,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYEWY HLA-A03:209,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:210,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:211,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:212,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:213,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:214,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:215,YFAMYQENVAQTDVDTLYIMYRDYTWAELAYTWY HLA-A03:216,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:217,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:218,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:219,YFAMYQENVAQTDENIAYIIYRDYTWAELAYTWY HLA-A03:22,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:220,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:221,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:222,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:223,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:224,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:225,YFAMYQENVAQTDVDTLYIIYRDYTWAERAYTWY HLA-A03:226,YFAMYQENVAQTDVDTLYIIYPDYTWAELAYTWY HLA-A03:227,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:228,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:229,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTWY HLA-A03:23,YFAMYGEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:230,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:231,YFAMYQENVAQTDVDTLYIIYRDYTWARLAYTWY HLA-A03:232,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:233,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:235,YFAMYQENVAQTDVDTLYNIYRDYTWAELAYTWY HLA-A03:236,YFAMYQENVAQTDVDTLYIIYGDYTWAVQAYTWY HLA-A03:237,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:238,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:239,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:24,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:240,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:241,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:242,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:243,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:244,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:245,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:246,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:247,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:248,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:249,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:25,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:250,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:251,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:252,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:253,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:254,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:255,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:256,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:257,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:258,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:259,YFAMYQENVAQTYVDTLYIIYRDYTWAELAYTWY HLA-A03:26,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:260,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:261,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:263,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:264,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:265,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:267,YFAMYQENVAQTDVNTLYIIYRDYTWAELAYTWY HLA-A03:268,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:27,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:270,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:271,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:272,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:273,YFAMYEEKVAHTDENTLYIIYRDYTWAELAYTWY HLA-A03:274,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:276,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:277,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:278,YFAMYLQNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:28,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:280,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:281,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:282,YFAMYQENVAQTDVDTLYIIYQDYTWAELAYTWY HLA-A03:285,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:287,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:288,YFAMYQENVAQTDVDTLYMIYRDYTWAELAYTWY HLA-A03:289,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:29,YFAMYQENVVQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:290,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:291,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:292,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:293,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:294,YFAMYQENVAQTDVDTLYIIYRDYIWAELAYTWY HLA-A03:295,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:296,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:298,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:299,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:30,YFAMYEEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:300,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:301,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:302,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:303,YFAMYEENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:304,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:305,YFAMYQENVAQTDVDILYIIYRDYTWAELAYTWY HLA-A03:306,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:307,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:308,YFAMYQENVAQTDVDTLYIIYRDYTWAELAHTWY HLA-A03:309,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:31,YFAMYQENVAQTDVDTLYIIYRYYTWAVQAYTWY HLA-A03:310,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:311,YFAMYQENVAQTDVDTLYIIHRDYTWAELAYTWY HLA-A03:312,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:313,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:314,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:315,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:316,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:317,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:318,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:319,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:32,YFAMYQENVAHIDVDTLYIIYRDYTWAVQAYTWY HLA-A03:320,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:321,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:322,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:324,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:325,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:326,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYKWY HLA-A03:327,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:328,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:33,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:331,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:332,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A03:333,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:34,YFAMYQENVAPTDVDTLYIIYRDYTWAELAYTWY HLA-A03:35,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:37,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:38,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:39,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:40,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:41,YFAMYQENVAHTDANTLYIIYRDYTWAELAYTWY HLA-A03:42,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A03:43,YFAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A03:44,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:45,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:46,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:47,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:48,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:49,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:50,YFAMYQENVAQTDVDTLYIIYRDYTWAEWAYTWY HLA-A03:51,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:52,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:53,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:54,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:55,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:56,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:57,YFAMYQENVAQTDANTLYIIYRDYTWAELAYTWY HLA-A03:58,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:59,CFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:60,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:61,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:62,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:63,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:64,YFAMYQENVAQTDVDTLYIIYRDYTWADLAYTWY HLA-A03:65,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTWY HLA-A03:66,YFAMYQENVAQTDVDTLYIIYRDYTWAERAYTWY HLA-A03:67,YFATYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:70,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:71,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:72,YSAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:73,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:74,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:75,YFAMYQENVAQTDVDTLYLMYRDYTWAELAYTWY HLA-A03:76,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:77,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:78,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:79,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:80,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:81,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:82,YFAMYQENVAQTDVDTLYIIYEHYTWAVQAYTWY HLA-A03:83,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:84,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:85,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:86,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:87,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:88,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:89,YFAMYGEKVAHTHVDTLYIIYRDYTWAELAYTWY HLA-A03:90,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A03:92,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:93,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:94,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:95,YFAMYQENVAQTDVDTLYVRYRDYTWAELAYTWY HLA-A03:96,YFDMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A03:97,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTGY HLA-A03:98,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYMWY HLA-A03:99,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A1101,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1102,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1103,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A1104,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A1105,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1106,YYAMYQENVAQTHVDTLYIIYRDYTWAAQAYRWY HLA-A1107,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1108,YYAMYQENVAQTDVDTLYIIYRDYTWAERAYRWY HLA-A1109,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1110,YYAMYRNNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1111,YYAMYLQNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1112,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1113,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1114,YYAMYQENVAQTDVDTLYIIYRDYTWARQAYRWY HLA-A1115,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1116,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1117,YYAMYQENMAHTDANTLYIIYRDYTWAAQAYRWY HLA-A1118,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A1119,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A1120,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A1121,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1122,YYAMYQENVAQTDVDTLYIIYPDYTWAAQAYRWY HLA-A1123,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1124,YYAMYQENVAQTDVDTLYIIYRDYTWAALAYRWY HLA-A1125,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A1126,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A1127,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTGY HLA-A1128,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1129,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1130,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A1131,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A1132,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:01,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:02,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:03,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A11:04,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A11:05,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:06,YYAMYQENVAQTHVDTLYIIYRDYTWAAQAYRWY HLA-A11:07,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:08,YYAMYQENVAQTDVDTLYIIYRDYTWAERAYRWY HLA-A11:09,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:10,YYAMYRNNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:100,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:101,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:102,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:103,YYAMYRENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:104,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:105,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:106,YYAMYQEKVVHTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:107,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:108,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:11,YYAMYLQNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:110,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:111,YYAMYQENVAQTDEDTLYIIYRDYTWAAQAYRWY HLA-A11:112,YYAMYQENVAQTDVDTLYIIYRDYTWAAQVYRWY HLA-A11:113,YYAMYQENVAQTDVDTLYIIYEHYTWAAQAYRWY HLA-A11:114,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:116,YYAMYQENVAQTDVDTLYIIYQDYTWAAQAYRWY HLA-A11:117,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:118,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A11:119,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:12,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:120,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:121,YYAMYGEKVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:122,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:123,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:124,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:125,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:126,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:128,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:129,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:13,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:130,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A11:131,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:132,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:133,YYSMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:134,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:135,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:136,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:138,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:139,YYAMYQENVAQTDVDTLYLMFRDYTWAAQAYRWY HLA-A11:14,YYAMYQENVAQTDVDTLYIIYRDYTWARQAYRWY HLA-A11:140,YYAMYQENVAQTDVDTLYIIYQDYTWAAQAYRWY HLA-A11:141,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:142,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:143,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:144,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:145,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:146,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:147,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:148,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:149,YYAMYQENVAQTDVDTLSIIYRDYTWAAQAYRWY HLA-A11:15,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:150,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:151,YYAMYQENVAQTDVDTLYIISRDYTWAAQAYRWY HLA-A11:152,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:153,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:154,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:155,YYAMYQENVAQTDVDTLYIIYRDYTWVAQAYRWY HLA-A11:156,YYAMYQDNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:157,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRRY HLA-A11:158,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A11:159,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:16,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:160,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:161,YYAMYQENVAQADVDTLYIIYRDYTWAAQAYRWY HLA-A11:162,YYAMYQENVAQTDVDTLYIIYEHYTWAAQAYRWY HLA-A11:163,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:164,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:165,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:166,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:167,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:168,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:169,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:17,YYAMYQENMAHTDANTLYIIYRDYTWAAQAYRWY HLA-A11:171,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:172,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:173,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:174,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:175,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A11:176,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:177,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:178,YYAMYQENVAHTDENIAYIIYRDYTWAAQAYRWY HLA-A11:179,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:18,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A11:181,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:183,YYAMYQENVAQTDVDTLYIIYRDYTWAVWAYRWY HLA-A11:184,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:185,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:186,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:187,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:188,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:189,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:19,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:190,YYAMYQENVAQTDENIAYIIYRDYTWAAQAYRWY HLA-A11:191,YYAMYQENVAQTDVDTLYIIYRDYTWAEWAYRWY HLA-A11:192,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:193,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:194,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:195,YYAMYQENVAQTDVDTLYIIYRDYTWGAQAYRWY HLA-A11:196,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:197,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:198,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:199,YFAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:20,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A11:200,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:201,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:202,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:203,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:204,YYAMYQENVAQTDVDTLYIIYRDYTWAAEAYRWY HLA-A11:205,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:206,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:207,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:209,YYAMYQENVAQTDVDTLYIIYRDYTWAVQAYTGY HLA-A11:211,YYAMYQENVAQTDVDTLYIIYRDYTWAARVYRWY HLA-A11:212,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:213,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:214,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:216,YYAMYQENVAQTDVDTLYIIYWDYTWAAQAYRWY HLA-A11:217,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:218,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:219,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:22,YYAMYQENVAQTDVDTLYIIYPDYTWAAQAYRWY HLA-A11:220,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWD HLA-A11:221,YHAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:222,YFAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:223,YYAMYQENVAQTDANTLYIIYRDYTWAAQAYRWY HLA-A11:224,YYAMYQEKVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:225,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:226,YYAMYQENVAQTDVDTLYIIYRDYTWVARVYRWY HLA-A11:227,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:228,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:229,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:23,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:230,YCAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:231,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:232,YYAMYQENVAQTDVDTLYIIYRDCTWAAQAYRWY HLA-A11:233,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:234,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:236,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:237,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:239,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:24,YYAMYQENVAQTDVDTLYIIYRDYTWAALAYRWY HLA-A11:240,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:241,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:242,YYAMYQENVAQTDVDTLYITYRDYTWAAQAYRWY HLA-A11:243,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:244,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:245,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:246,YYAMYQENVAQTDVDALYIIYRDYTWAAQAYRWY HLA-A11:247,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:248,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:249,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:25,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A11:250,YYAMYQENVAHIDVDTLYIIYRDYTWAAQAYRWY HLA-A11:252,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:253,YYAMYQENVAQTDVATLYIIYRDYTWAAQAYRWY HLA-A11:254,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:255,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:257,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:258,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:259,YYAMYQENVAQTDVDSLYIIYRDYTWAAQAYRWY HLA-A11:26,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A11:260,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:261,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:262,YYAEYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:263,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:264,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYGWY HLA-A11:265,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:266,YYAIYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:267,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:268,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:269,YYAMYQENVAQTDVDTLYIIYRDYTWAAWAYRWY HLA-A11:27,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTGY HLA-A11:270,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:271,YYAMYQENVAQTDANTLYIIYRDYTWVARVYRGY HLA-A11:273,YYAMYQENVAQTDVDTLYIIYRSYTWAAQAYRWY HLA-A11:274,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:275,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:276,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:277,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:278,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:279,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:280,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:281,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:282,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:283,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:284,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:285,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:286,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:288,YYAMYQENVAQTDVDTLYVRYRDYTWAAQAYRWY HLA-A11:289,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:29,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:290,YYAMYQENVAQTDVDTLYIIYRDYTWARRVYRWY HLA-A11:291,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:292,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:293,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:294,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:295,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:296,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:297,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:298,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:299,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:30,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:300,YYAMYQENVAQTDVDTLYIIYRDYTWTAQAYRWY HLA-A11:301,YYAMYQENVTQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:302,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:303,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:304,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:305,YYAMYQENVAQNDVDTLYIIYRDYTWAAQAYRWY HLA-A11:306,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:307,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:308,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:309,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:31,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A11:311,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:312,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A11:32,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:33,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:34,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:35,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A11:36,YYAMYQENVAQTDVDTLYIICRDYTWAAQAYRWY HLA-A11:37,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:38,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A11:39,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A11:40,YYAMYQENVAHTDANTLYIIYRDYTWAAQAYRWY HLA-A11:41,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:42,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:43,YTAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:44,YYAMYQENVAQTDVDTLYIIYRDYTWAARAYRWY HLA-A11:45,YYAMYQENVAQTDADTLYIIYRDYTWAAQAYRWY HLA-A11:46,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:47,YHAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:48,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:49,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:51,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:53,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:54,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:55,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:56,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:57,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:58,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:59,YYAMYQENVAQTDVDTLYIIYGDYTWAAQAYRWY HLA-A11:60,YYAMYQENVAQTDVDTLYIIYRDYTWAVQAYRWY HLA-A11:61,YYAMYQENAAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:62,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:63,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:64,YYAMYQENVAQTDVDTLHIIYRDYTWAAQAYRWY HLA-A11:65,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:66,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:67,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:68,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:70,YYAMYGENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:71,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:72,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:73,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:74,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:75,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:76,YYAMYQENVAQTDVDTLYIIYRDYTRAAQAYRWY HLA-A11:77,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:79,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:80,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:81,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:82,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:83,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:84,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:85,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:86,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:87,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:88,YSAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:89,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:90,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYEWY HLA-A11:91,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:92,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:93,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:94,YYAMYQENVAQTDVDTLYIIYRDYTWAARVYRGY HLA-A11:95,YYAMHQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:96,YYAMYQENVSQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:97,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A11:98,YYAMYQENVAHIDVDTLYIIYRDYTWAAQAYRWY HLA-A2301,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2302,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A2303,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2304,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A2305,CSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2306,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2307,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2309,YSAMYQENMAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2310,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYRGY HLA-A2312,YSAMYEEKVAHTHENIAYLMFHYYTWAVLAYTGY HLA-A2313,YSAMYEEKVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A2314,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2315,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2316,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:01,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A23:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:04,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A23:05,CSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:09,YSAMYQENMAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYRGY HLA-A23:12,YSAMYEEKVAHTHENIAYLMFHYYTWAVLAYTGY HLA-A23:13,YSAMYEEKVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A23:14,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:15,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:16,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:17,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:18,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:24,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:25,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:27,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:28,YSAMYQEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:29,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:30,YSAMYEEKVAHTDENIAYLMFHCYTWAVLAYTGY HLA-A23:31,YSAMYEEKVAHTDENIAYLMFDDYTWAVLAYTGY HLA-A23:32,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:33,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:34,YSAMYEEKVAHTDENIAYLMFHYYTWAVVAYTGY HLA-A23:35,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:36,YSAMYEEKVAHTDESIAYLMFHYYTWAVLAYTGY HLA-A23:37,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:39,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:40,YSAMYEEKVAHTDANIAYLMFHYYTWAVLAYTGY HLA-A23:41,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:42,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:43,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTRY HLA-A23:44,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:45,YSAMYEEKVAHTDENIAYLMFQDYTWAVLAYTGY HLA-A23:46,YSAMYEEKVAHTDENIAYLMFEHYTWAVLAYTGY HLA-A23:47,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:48,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:49,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:50,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:51,YSAMYEENVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:52,YSAMYEEKVAHTDENIAYLMFDYYTWAVLAYTGY HLA-A23:53,YSAMYEEKVAHTDENIAYLMFRDYTWAVLAYTGY HLA-A23:54,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:55,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:56,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:57,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:58,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:59,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:60,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:61,YSAMYKEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:62,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:63,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:64,YFAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:65,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:66,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A23:67,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:68,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:70,YSAMYEEKVAHTDENIAYLMFRDYTWAVLAYTGY HLA-A23:71,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:72,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:73,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:74,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:75,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:76,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:77,YSAMCEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:78,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:79,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:80,YSAMYGEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:81,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:82,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:83,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A23:85,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:86,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:87,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:88,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A23:89,YSAMYEEKVAHTDENIAYLMFHYCTWAVLAYTGY HLA-A23:90,YSAMYEEKVAHTDENIAHLMFHYYTWAVLAYTGY HLA-A23:92,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2402,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2403,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A2404,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A2405,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2406,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A2407,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A2408,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2409,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2410,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A2411,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2413,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2414,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A2415,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A2417,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A2418,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTWY HLA-A2419,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A2420,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2421,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2422,YSAMYEEKVAHTDENIAYLMFHYYTWAVWVYTWY HLA-A2423,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A2424,YSAMYRNNVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A2425,CSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2426,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2427,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2428,YSAMYEEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A2429,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2430,YSAMYEEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A2431,YSAMYEQKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2432,YSAMYEEKVAHTDESIAYLMFHYYTWAVQAYTGY HLA-A2433,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A2434,YSAMYEEKVAHIDENIAYLMFHYYTWAVQAYTGY HLA-A2435,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2437,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2438,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2439,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2440,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2441,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A2442,YSAMYGEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A2443,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2444,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A2446,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRGY HLA-A2447,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2449,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2450,YYAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2451,YSAMYEEKVAHTDENIAYLIYHYYTWAVQAYTGY HLA-A2452,YSAMYEEKVAHTDENIAYLRFHYYTWAVQAYTGY HLA-A2453,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A2454,YSAMYEEKVAHTDENIAYLMFHYYTWAVQPYTGY HLA-A2455,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEGY HLA-A2456,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A2457,YSAMYEEKVAHTDENIAYIMYHYYTWAVQAYTGY HLA-A2458,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2459,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A2461,YSAMYEEKVAHTDEKIAYLMFHYYTWAVQAYTGY HLA-A2462,YSAMYEEKVAHTDENIAYLMFQDYTWAVQAYTGY HLA-A2463,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2464,YSAMYEEKVAHTDENIAYLWIHYYTWAVQAYTGY HLA-A2465,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A2466,YSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A2467,YSAMYRNNVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2468,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2469,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2470,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2471,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2472,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2473,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A2474,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2475,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2476,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2477,YSAMYQEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2478,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2479,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A24:04,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A24:05,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A24:07,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:08,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A24:100,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:101,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:102,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:103,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:104,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:105,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:106,YSAMYEEKVAHTDENIAYLMFDDYTWAVQAYTGY HLA-A24:107,YSAMYEEKVAHTDENIAYLMFHYYTWAVHAYTGY HLA-A24:108,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:109,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A24:110,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:111,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:112,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:113,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:114,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:115,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:116,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:117,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:118,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:119,YSAMYEEKVAHADENIAYLMFHYYTWAVQAYTGY HLA-A24:120,YSAMYEEKVAHTDENIAYIMFHYYTWAVQAYTGY HLA-A24:121,YSAMYEEKVAHTDENIAYLMFHSYTWAVQAYTGY HLA-A24:122,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:123,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:124,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:125,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A24:126,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:127,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:128,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:129,YSAMYQENMAHTDANTLYLMFHYYTWAVQAYTGY HLA-A24:13,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A24:130,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:131,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:133,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:134,YSAMYEEKVAHTDENIAYLMFHYYPWAVQAYTGY HLA-A24:135,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:136,YSAMYEEKVAHTDENIAYLMFHYYTWVVQAYTGY HLA-A24:137,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:138,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTWY HLA-A24:139,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:14,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A24:140,YSTMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:141,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:142,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:143,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYLGY HLA-A24:144,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:145,YSAMYEENVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:146,YSAMYEEKVAHTDENIAYLMFNYYTWAVQAYTGY HLA-A24:147,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:148,YSAMYEEKVAHTDENIAYLMFHYHTWAVQAYTGY HLA-A24:149,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:15,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A24:150,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:151,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:152,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:153,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:154,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:156,YSAMYEENVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:157,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:159,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:160,YSAMYEEKVAHTDENIAYLMFHYYTWAVQVYTGY HLA-A24:161,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:162,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:164,YSAMYEEKVAHTDENPLYLMFHYYTWAVQAYTGY HLA-A24:165,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:166,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:167,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTWY HLA-A24:168,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:169,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:17,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A24:170,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYMGY HLA-A24:171,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:172,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:173,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:174,YSAMYEEKVAHTDENIAYLMFDSYTWAVQAYTGY HLA-A24:175,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:176,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:177,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A24:178,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:179,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:18,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTWY HLA-A24:180,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:181,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:182,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:184,YSAMYEEKVAHTDENIACLMFHYYTWAVQAYTGY HLA-A24:186,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:187,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:188,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A24:189,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:19,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A24:190,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A24:191,YSAMYQENVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:192,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:193,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:194,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:195,YSAMYEEKVAHTDENIAYLMFHYYTSAVQAYTGY HLA-A24:196,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:197,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:198,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:199,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:200,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:201,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:202,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGN HLA-A24:203,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:204,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A24:205,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:206,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:207,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A24:208,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A24:209,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:210,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYRWY HLA-A24:212,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:213,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:214,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:215,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:216,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:217,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:218,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:219,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTRY HLA-A24:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVWVYTWY HLA-A24:220,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGH HLA-A24:221,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:223,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:224,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:225,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:226,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:227,YSAMYEEKVAHTDENIAYLMFHYYTWAVPAYTGY HLA-A24:228,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A24:229,YSAMYEEKVAHTDENIAYLMFHYYTWVAQAYTGY HLA-A24:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A24:230,YSAMYEEKVAHTDENIAYLMFHYYTWAMQAYTGY HLA-A24:231,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:233,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:234,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:235,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:236,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:237,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:238,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:239,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:24,YSAMYRNNVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A24:241,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:242,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:243,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:244,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:245,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:246,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:247,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:248,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:249,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:25,CSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:250,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:251,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:253,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:254,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:255,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:256,YSAMYEEKVAHTDENIAYLMFHFYTWAVQAYTGY HLA-A24:257,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:258,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:259,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:260,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:261,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:262,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:263,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:264,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:265,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:266,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:267,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:268,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:269,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:27,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:270,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:271,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:272,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:273,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:274,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:275,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:276,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:277,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:279,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:28,YSAMYEEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A24:280,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:281,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:282,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:283,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:284,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:285,YSAMYEEKVAHTDENIAYLMFHYYTWAARAYTGY HLA-A24:286,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:287,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:288,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:289,YSAMYEEKVAHTDENIAYLMFHYYTWAERAYTWY HLA-A24:29,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:290,YSAMYRNNVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A24:291,YSAMYEEKVAHTDENIAYLRYHYYTWAVQAYTGY HLA-A24:292,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:293,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:295,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:296,YSAMYEEKVAHTDENIAYLMYRDYTWAVQAYTGY HLA-A24:297,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:298,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:299,YSAMYEEKVAHTDENIAYLMFHYYTWAVRVYTWY HLA-A24:30,YSAMYEEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A24:300,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A24:301,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:302,YSAMYEEKVAHTDANIAYLMFHYYTWAVQAYTGY HLA-A24:304,YSAMYEEKVAHTDENIAYLKFHYYTWAVQAYTGY HLA-A24:305,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:306,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:307,YSAMYEEKVAHTVENIAYLMFHYYTWAVQAYTGY HLA-A24:308,CSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A24:309,YSAMYREKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A24:31,YSAMYEQKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:310,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:311,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:313,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:314,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:315,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYEWY HLA-A24:316,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:317,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:318,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:319,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:32,YSAMYEEKVAHTDESIAYLMFHYYTWAVQAYTGY HLA-A24:320,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:321,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:322,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:324,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A24:325,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A24:326,YSAMYKEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:327,YSAMYEEKVAHTDENIAYLMFHYYTWAVQTYTGY HLA-A24:328,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:329,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:33,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A24:330,YSAMYEEKVAHTDENIAYLMFHDYTWAVQAYTGY HLA-A24:331,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:332,YSSMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:333,YSAMYEEKVAHTDENIAYLMFEYYTWAVQAYTGY HLA-A24:334,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:335,YSAMYEEKVAHTDENIAYLMFHHYTWAVQAYTGY HLA-A24:336,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:337,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:338,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:339,YSAMYEEKVAQTDENIAYLMFHYYTWAVWAYTWY HLA-A24:34,YSAMYEEKVAHIDENIAYLMFHYYTWAVQAYTGY HLA-A24:340,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A24:341,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:342,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:343,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:344,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:345,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:346,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:347,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A24:348,YSAMYEEKVAYTDENIAYLMFHYYTWAVQAYTGY HLA-A24:349,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:35,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:350,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:351,YSAMYEEKVAHTDEDIAYLMFHYYTWAVQAYTGY HLA-A24:352,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:353,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:354,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:355,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTGY HLA-A24:356,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:358,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:360,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:361,YSAMYEERVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:362,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:363,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:364,YSAMCEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:365,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:366,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:367,YSAMYEEKVAHTDENIAYLMFHYYTWVEQAYTGY HLA-A24:368,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:369,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:37,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:371,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:372,YSAMYEEKVAHTDGNIAYLMFHYYTWAVQAYTGY HLA-A24:373,YSAMYEEKVAHTDENTLYLMFHYYTWAVQAYTGY HLA-A24:374,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEWY HLA-A24:375,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:376,YSAMYEEKVAHTDENIAYLMFHYYTWAVKAYTGY HLA-A24:377,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:378,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:379,YSAMYEEKVAHTHVDIAYLMFHYYTWAVQAYTGY HLA-A24:38,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:380,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:381,YSAMYEEKVAHTDENIAYLMFHYYTWAEWAYTGY HLA-A24:382,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:383,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:384,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:385,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:386,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:387,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTWY HLA-A24:39,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:390,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:391,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:392,YSAMYRNNVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A24:393,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:394,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:395,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A24:397,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:398,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:399,YSAMYEEKVAHTDENELYLMFHYYTWAVQAYTGY HLA-A24:400,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:401,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:402,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:403,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:404,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:405,YSAMYEEKVAHTDENNAYLMFHYYTWAVQAYTGY HLA-A24:406,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A24:407,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:409,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:41,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A24:410,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:411,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:412,YSAMYEEKVAHTDENIAYLVFHYYTWAVQAYTGY HLA-A24:413,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:414,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:415,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:416,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:417,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:418,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:419,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:42,YSAMYGEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A24:420,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:421,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:422,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:423,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:424,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A24:43,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:431,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:432,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:44,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A24:46,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRGY HLA-A24:47,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:49,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:50,YYAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:51,YSAMYEEKVAHTDENIAYLIYHYYTWAVQAYTGY HLA-A24:52,YSAMYEEKVAHTDENIAYLRFHYYTWAVQAYTGY HLA-A24:53,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A24:54,YSAMYEEKVAHTDENIAYLMFHYYTWAVQPYTGY HLA-A24:55,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEGY HLA-A24:56,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A24:57,YSAMYEEKVAHTDENIAYIMYHYYTWAVQAYTGY HLA-A24:58,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:59,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A24:61,YSAMYEEKVAHTDEKIAYLMFHYYTWAVQAYTGY HLA-A24:62,YSAMYEEKVAHTDENIAYLMFQDYTWAVQAYTGY HLA-A24:63,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:64,YSAMYEEKVAHTDENIAYLWIHYYTWAVQAYTGY HLA-A24:66,YSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A24:67,YSAMYRNNVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:68,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:69,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:70,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:71,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:72,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:73,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A24:74,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:75,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:76,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:77,YSAMYQEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:78,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:79,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:80,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:81,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:82,YTAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:85,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:87,YSAMYEEKVAHTDENIAYLMFHYYTWAVRAYTGY HLA-A24:88,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:89,YSAMYGEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A24:91,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:92,YSAMYEEKVAHTDENIAYIIYHYYTWAVQAYTGY HLA-A24:93,YSAMYEEKVAHTDENIAYVMFHYYTWAVQAYTGY HLA-A24:94,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A24:95,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:96,YSAMYEEKVAHTDENIAYLMFNFYTWAVQAYTGY HLA-A24:97,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:98,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A24:99,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A2501,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A2502,YYAMYRNNVAQTDESIAYIRYQDYTWAEWAYRWY HLA-A2503,YFAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A2504,YYAMYRNNVAHTDESIAYIRYQDYTWAEQAYRWY HLA-A2505,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A2506,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTWY HLA-A25:01,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:02,YYAMYRNNVAQTDESIAYIRYQDYTWAEWAYRWY HLA-A25:03,YFAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:04,YYAMYRNNVAHTDESIAYIRYQDYTWAEQAYRWY HLA-A25:05,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:06,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTWY HLA-A25:07,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:08,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:09,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:10,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:11,YYAMYRNNVAHTHESIAYIRYQDYTWAEWAYRWY HLA-A25:13,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:14,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:15,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:16,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:17,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:18,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYGWY HLA-A25:19,YYAMYRNNVAHTDESIAYIRYQDYTWAELAYRWY HLA-A25:20,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:21,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:22,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:23,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:24,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:25,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:26,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:27,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:28,YYAMYRNNVAHTDESIAYIRYQDYTWAVWAYRWY HLA-A25:29,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:30,YFAMYRNNVAHTDESIAYIRYQDYTWAVLAYRWY HLA-A25:31,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:32,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:33,YYAMYRNNVAHTNESIAYIRYQDYTWAEWAYRWY HLA-A25:34,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:35,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:36,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTGY HLA-A25:37,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:38,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:39,YYAMYQNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:40,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:41,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:43,YYAMYRNNVAHTDESIAYIIYRDYTWAEWAYRWY HLA-A25:44,YYAMYRNNVAHTDESIAYIRYQDYTWAVQAYRWY HLA-A25:45,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:46,YYAMYGEKVAHTDESMAYIRYQDYTWAEWAYRWY HLA-A25:47,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:48,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:50,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYLWY HLA-A25:51,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:52,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYQWY HLA-A25:53,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:54,YCAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A25:55,YYAMYRNNVAHADESIAYIRYQDYTWAEWAYRWY HLA-A25:56,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRSY HLA-A25:57,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A2601,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2602,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A2603,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A2604,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYLWY HLA-A2605,YYAMYRNNVAHTDENTLYIRYQDYTWAEWAYRWY HLA-A2606,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A2607,YYAMYGEKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2608,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A2609,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYTWY HLA-A2610,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2611,YYAMYRNNVAHTDANTLYIRYQDYTWPMSEPASD HLA-A2612,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A2613,YYAMYRNNVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A2614,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2615,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2616,YSAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2617,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2618,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A2619,YYAMYQENVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A2620,YFAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2621,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A2622,YYAMYRNNVAHTDANTLYVRYQDYTWAEWAYRWY HLA-A2623,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2624,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2626,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2627,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2628,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2629,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A2630,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A2631,YYAMYPNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2632,YYAMYRNNVAHTDANTLYMVYQDYTWAEWAYRWY HLA-A2633,YYAMYRNNVAQIHANTLYIRYQDYTWAEWAYRWY HLA-A2634,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYWWY HLA-A2635,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:01,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:02,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A26:03,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:04,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYLWY HLA-A26:05,YYAMYRNNVAHTDENTLYIRYQDYTWAEWAYRWY HLA-A26:06,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:07,YYAMYGEKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:08,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:09,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYTWY HLA-A26:10,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:100,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:101,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:102,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:103,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYGWY HLA-A26:104,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:105,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:106,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:108,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:109,YYAMYRNNVAHTDANTLCIRYQDYTWAEWAYRWY HLA-A26:110,YYAMYRNNVAHTDPNTLYIRYQDYTWAEWAYRWY HLA-A26:111,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:112,YYAMYRNNVAHTDANTLYIRYQDYTWAVLAYRWY HLA-A26:113,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:114,YYAMYWNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:115,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:116,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:117,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:118,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A26:119,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:12,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A26:120,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:121,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:122,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:123,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:124,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:125,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:126,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:128,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:129,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:13,YYAMYRNNVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A26:130,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:131,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:132,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A26:133,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:134,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:135,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:136,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:137,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:138,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A26:139,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:14,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:140,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:141,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:142,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:143,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:144,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:146,YYAMYRNNVAHTHANTLYIRYQDYTWAEQAYRWY HLA-A26:147,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRSY HLA-A26:148,YYAMYRNHVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:149,YYAMYRNNVAHTDANTLYIRYQDYTWAEWVYRWY HLA-A26:15,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:150,YYAIYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:151,YYAMYRNIVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:152,YYAMYRNNVAHTDANTLYIRYQDYTWAAWAYRWY HLA-A26:153,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:154,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:155,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:156,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:157,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:158,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:159,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:16,YSAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:160,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:162,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:163,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:164,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:165,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:167,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:168,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:169,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:17,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:170,YYAMYQNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:171,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:172,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A26:173,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:174,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:175,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:176,YYAMYRNNVAHTDANTLYIMYQDYTWAEWAYRWY HLA-A26:177,YTAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:178,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:18,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A26:19,YYAMYQENVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A26:20,YFAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:21,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:22,YYAMYRNNVAHTDANTLYVRYQDYTWAEWAYRWY HLA-A26:23,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:24,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:26,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:27,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:28,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:29,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A26:30,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:31,YYAMYPNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:32,YYAMYRNNVAHTDANTLYMVYQDYTWAEWAYRWY HLA-A26:33,YYAMYRNNVAQIHANTLYIRYQDYTWAEWAYRWY HLA-A26:34,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYWWY HLA-A26:35,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:36,YYAMYRNNVAHTHANTLYIRYQDYTWAEWAYRWY HLA-A26:37,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:38,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:39,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:40,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:41,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:42,YYAIYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:43,YYAMYRNNVAHTDANTLYIRYQDYTWAELAYRWY HLA-A26:45,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:46,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:47,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:48,YYAMYRNKVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:49,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A26:50,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:51,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:52,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:53,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:54,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:55,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:56,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:57,YYAMYRNNVAHTDANILYIRYQDYTWAEWAYRWY HLA-A26:58,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:59,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:61,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:62,YYAMYRNNMAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:63,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:64,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:65,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:66,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:67,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:68,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:69,YYAMYRNKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:70,YYAMYRNNVAHTDANTLYIMYQDYTWAEWAYRWY HLA-A26:72,YYAMYQENMAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:73,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:74,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:75,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:76,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:77,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:78,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYLWY HLA-A26:79,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:80,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:81,YYALYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A26:82,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:83,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:84,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:85,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:86,YYAMYRNNVAHTDANTLYIRYQDYTWAVQAYRWY HLA-A26:87,YYAMYRNNVAHTDANTLYLRYQDYTWAEWAYRWY HLA-A26:88,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:89,YHAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:90,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:91,YYAMYRNNVAHTDANTLYIRYQDYTWAVQAYTWY HLA-A26:92,YYAMYGEKVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A26:93,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:94,CYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:95,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:96,YYTMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:97,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:98,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A26:99,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A2901,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2902,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2903,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTGY HLA-A2904,YTAMYLQHVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2905,YTAMYLQNVAQTDANTLYIMYRDYTWAEQAYTWY HLA-A2906,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2907,YTAMYLQNVAQTDANTLYLMFRDYTWAVLAYTWY HLA-A2909,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2910,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2911,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2912,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2913,YTAMYLQNVAQTDESIAYIMYRDYTWAVLAYTWY HLA-A2914,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2915,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A2916,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:01,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:02,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:03,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTGY HLA-A29:04,YTAMYLQHVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:05,YTAMYLQNVAQTDANTLYIMYRDYTWAEQAYTWY HLA-A29:06,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:07,YTAMYLQNVAQTDANTLYLMFRDYTWAVLAYTWY HLA-A29:09,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:10,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:100,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:101,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:102,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:103,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:104,YTAMYLQNVAQTDANTLYIMYRDYTWAAQAYTWY HLA-A29:105,YTAMYRNNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:106,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:107,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:108,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:109,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:11,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:110,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:111,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:113,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:114,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:115,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:116,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:117,CTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:118,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:119,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:12,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:120,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:121,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:122,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:123,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:124,YTAMYLQNVAQTDANTLYIMYRDYTWTVLAYTWY HLA-A29:125,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:127,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:128,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:13,YTAMYLQNVAQTDESIAYIMYRDYTWAVLAYTWY HLA-A29:14,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:15,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:16,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:17,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:18,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:19,YTAMYLQNVAHTHVDTLYIMYRDYTWAVLAYTWY HLA-A29:20,YTAMYLQNVAHTDANTLYIMYRDYTWAVLAYTWY HLA-A29:21,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:22,YTAMYLQNVAQTDANTLYVRYRDYTWAVLAYTWY HLA-A29:23,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:24,YTAMYLQNVAQTDANTLYIMYRDYTWAVLGYTWY HLA-A29:25,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:26,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:27,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:28,YTAMYLQNVAQTDANTLYIMYRDYTWAVWAYTWY HLA-A29:29,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:30,YTAMYLQNVARTDANTLYIMYRDYTWAVLAYTWY HLA-A29:31,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:32,YTAMYLQNVAQTDANTLYIMYQDYTWAVLAYTWY HLA-A29:33,YTAMYLQNVAQTDANTLYIMYRDYTWAVQAYTGY HLA-A29:34,YTAMYLQNVAHTDANTLYIMYRDYTWAVLAYTWY HLA-A29:35,YTAMYLQNVAQTDANTLYIMYRDYTWAMLAYTWY HLA-A29:36,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:37,YSAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:38,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:39,YTAMYLQNVAQIDVDTLYIMYRDYTWAVLAYTWY HLA-A29:40,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:41,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:42,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:43,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:44,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:45,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:46,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:47,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:48,YTAMYGEKVAHTHVDTLYIMYRDYTWAVLAYTWY HLA-A29:49,YTAMYLQNVAQTDANTLYIMFRDYTWAVLAYTWY HLA-A29:50,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:51,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:52,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:53,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:54,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:55,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:56,YSAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:57,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:58,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:59,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:60,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:61,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:62,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:63,YTAMNLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:64,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:65,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:66,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:67,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYRWY HLA-A29:68,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:69,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:70,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYAWY HLA-A29:71,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:72,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:73,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:74,YTAMYLQNVAHTHANTLYIMYRDYTWAVLAYTWY HLA-A29:75,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:76,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:77,YTAMYLQNVAQTDANTLYIMYRDYTWAVQAYTWY HLA-A29:79,YTAMYLQNVAQTDANTLYIMYRDYTWAVRAYTWY HLA-A29:80,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:81,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:82,YTAMYLQNVAQTDANTLYIMYGDYTWAVLAYTWY HLA-A29:83,YTAMYLQNVAQTDANTLYIMYRDYTWAELAYTWY HLA-A29:84,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:85,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:86,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:87,YTAMYLQNVAQTDANTLYIMYRDYTWAVQAYTWY HLA-A29:88,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:89,YTAMYLQNVAQTDANTLYIRYRDYTWAVLAYTWY HLA-A29:90,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:91,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:92,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:93,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:94,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:95,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:96,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:97,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A29:98,YTAMYLQNVAHTDENTLYIMYRDYTWAVLAYTWY HLA-A29:99,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A3001,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3002,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A3003,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A3004,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A3006,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A3007,YSAMYEEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A3008,YYAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3009,YSAMYQENVAHTDENTLYIIYEHYTWAVLAYTWY HLA-A3010,YSAMYQENVAHTDENTLYIIHEHYTWARLAYTWY HLA-A3011,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3012,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A3013,YSAMYQENVAHTHVDTLYIIYEHYTWARLAYTWY HLA-A3014,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3015,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3016,YSAMYQENVAQTHVDTLYIIYEHYTWAWLAYTWY HLA-A3017,YSAMYQENVAQTDVDTLYIIYEHYTWAVWAYTWY HLA-A3018,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3019,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3020,YSAMYQENVAQTEVDTLYIIYEHYTWAWLAYTWY HLA-A3021,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A3022,YSAMYGEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:01,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:02,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:03,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:04,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:06,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:07,YSAMYEEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:08,YYAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:09,YSAMYQENVAHTDENTLYIIYEHYTWAVLAYTWY HLA-A30:10,YSAMYQENVAHTDENTLYIIHEHYTWARLAYTWY HLA-A30:100,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:102,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:103,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:104,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:105,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:106,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:107,YSAMYQENVAHTDENTLYIIYEHYIWARLAYTWY HLA-A30:108,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:109,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:11,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:110,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:111,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:112,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:113,YSAMYQENVAQTDVDTLYLIYEHYTWAWLAYTWY HLA-A30:114,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:115,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:116,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:117,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYRWY HLA-A30:118,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:119,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:12,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:120,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:122,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTSY HLA-A30:124,YSSMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:125,YSAMYQENVAQTDVDTLYIIYEHYTWARLAYTWY HLA-A30:126,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:127,YSAMYQENVAHTHENTLYIIYEHYTWARLAYTWY HLA-A30:128,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:129,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:13,YSAMYQENVAHTHVDTLYIIYEHYTWARLAYTWY HLA-A30:131,YSAMYQENVAQTDVDTLYIVYEHYTWAWLAYTWY HLA-A30:133,NSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:134,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:135,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:136,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:137,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:138,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:139,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:140,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:141,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:142,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:143,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:144,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:14L,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:15,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:16,YSAMYQENVAQTHVDTLYIIYEHYTWAWLAYTWY HLA-A30:17,YSAMYQENVAQTDVDTLYIIYEHYTWAVWAYTWY HLA-A30:18,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:19,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:20,YSAMYQENVAQTEVDTLYIIYEHYTWAWLAYTWY HLA-A30:22,YSAMYGEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:23,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:24,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:25,YSAMYQENVAQTDENTLYIIYEHYTWARLAYTWY HLA-A30:26,YSAMYQENVAQTDVDTLYIIYRDYTWAWLAYTWY HLA-A30:28,YSAMYQENVAHTDENTLYIVYEHYTWARLAYTWY HLA-A30:29,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTSY HLA-A30:30,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:31,YSAMYQENVARTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:32,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:33,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:34,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:35,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:36,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:37,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:38,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:39,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:40,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:41,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:42,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:43,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYMWY HLA-A30:44,YSAMYQENVAHTHVDTLYIIYEHYTWAWLAYTWY HLA-A30:45,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:46,YSAMYQENVAHTHVDTLYIIYEHYTWAVWAYTWY HLA-A30:47,YSAMYQENVAHTDENTLYVIYEHYTWARLAYTWY HLA-A30:48,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:49,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:50,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:51,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:52,YSAMYQENVAQTDVDTLYLRYEHYTWAWLAYTWY HLA-A30:53,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:54,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:55,YFAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:56,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:57,YSAMYQENVAHTDANTLYIIYEHYTWARLAYTWY HLA-A30:58,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:60,YSAMYQENAAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:61,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:62,YSAMYQENVAQTDVDNLYIIYEHYTWAWLAYTWY HLA-A30:63,YSAMYQENVAQTDVDTLYIIYEHYTWAWLTYTWY HLA-A30:64,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:65,YSAMYQENVAQTDLDTLYIIYEHYTWAWLAYTWY HLA-A30:66,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:67,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:68,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:69,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:71,YSAMYQENVAQADVDTLYIIYEHYTWAWLAYTWY HLA-A30:72,YSAMYQENVAQTDVDTLYTIYEHYTWAWLAYTWY HLA-A30:74,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:75,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTGY HLA-A30:77,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A30:79,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:80,YSAMYQENVAHTDENTLYLIYEHYTWARLAYTWY HLA-A30:81,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:82,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:83,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:84,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:85,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A30:86,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:87,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:88,YSAMYQENVAQTDENTLYIIHEHYTWARLAYTWY HLA-A30:89,YSAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A30:90,YSAMYQENVAHTDANTLYIIYEHYTWAVWAYTWY HLA-A30:91,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:92,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:93,YSAMYQENVAQTDVDTLYIIYQHYTWAWLAYTWY HLA-A30:94,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:95,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:96,YSSMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:97,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:98,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A30:99,YSAMYQENVAHTDENTLYIIYEHYTWAVQAYTWY HLA-A3101,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3102,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3103,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A3104,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A3105,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A3106,YTAMYQENVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A3107,YTAMYQEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A3108,YTAMYEEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A3109,YTAMYQENVGHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3110,YTAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A3111,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3112,YTAMYQENVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A3113,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3114,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3115,YTAMYQENVARIDVDTLYIMYQDYTWAVLAYTWY HLA-A3116,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3117,YTAMYQENVAHINVDTLYIMYQDYTWAVLAYTWY HLA-A3118,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A31:01,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:02,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:03,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A31:04,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A31:05,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A31:06,YTAMYQENVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A31:07,YTAMYQEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A31:08,YTAMYEEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A31:09,YTAMYQENVGHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:10,YTAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A31:100,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:101,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:102,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:103,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:104,YTAMYRENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:105,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:106,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:107,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:108,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:109,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:11,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:110,YTAMYQENVAHIDVDTLYIMYQDYTWAELAYTWY HLA-A31:111,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:112,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:113,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:114,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:115,YTAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A31:116,YTAMYQENVAHIDVDTLYIMYQDCTWAVLAYTWY HLA-A31:117,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:118,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:119,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:12,YTAMYQENVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A31:120,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:121,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:122,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:123,YTAMYQENVAHIDVDTLYIRYQDYTWAVLAYTWY HLA-A31:124,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:125,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:127,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:128,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:129,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTCY HLA-A31:13,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:130,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:132,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:133,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:134,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:135,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:136,YTAMYQENVAHIDVDTLYIMYQDYTWAVQAYTWY HLA-A31:137,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:138,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:139,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:140,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:142,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:143,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:144,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:145,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:146,YTAMYQENVAHIDVDTLYLMYQDYTWAVLAYTWY HLA-A31:147,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:148,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:15,YTAMYQENVARIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:16,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:17,YTAMYQENVAHINVDTLYIMYQDYTWAVLAYTWY HLA-A31:18,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A31:19,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:20,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:21,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:22,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:23,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:24,YTAMYQENVAHIDVDTLYIMYQDYTWAAQAYRWY HLA-A31:25,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYRWY HLA-A31:26,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:27,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:28,YTAMYQENVTHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:29,YTAMYQENVAHIDVDTLYLMFQDYTWAVLAYTWY HLA-A31:30,YTAMYQENVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A31:31,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:32,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:33,YTAMYQENVAHIDGDTLYIMYQDYTWAVLAYTWY HLA-A31:34,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:35,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:36,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:37,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:38,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:39,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:40,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:41,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:42,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:43,YTAMYQENVAHIDVDTLYIMYQDYTWAALAYTWY HLA-A31:44,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:45,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:46,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:47,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:48,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:49,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:50,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:51,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:52,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:53,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:54,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:55,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:56,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:57,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:58,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:59,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:61,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTSY HLA-A31:62,YTAMYQENVAHIDVDTLYIMYQDYTWVALAYTWY HLA-A31:63,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:64,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:65,YTAMYQENVAHIDVDTLHIMYQDYTWAVLAYTWY HLA-A31:66,YTAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A31:67,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:68,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:69,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:70,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:71,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:72,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:73,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:74,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:75,YTAMYKENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:76,YTAMYQENVAHIDVDTLYIMYQDYTWTVLAYTWY HLA-A31:77,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:78,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:79,YTAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A31:80,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:81,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:82,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:83,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:84,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:85,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:86,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:87,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:88,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A31:89,YTAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A31:90,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:91,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:92,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:93,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:94,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:95,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:96,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:97,YTAMYQENVAHIDVDTLYIMYQDYTWAERAYTWY HLA-A31:98,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A31:99,YTAMYQENVAHIDVDTLYVRYQDYTWAVLAYTWY HLA-A3201,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3202,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A3203,YFAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A3204,YFAMYQENVAHTDESIAYIIYRDYTWAELAYTWY HLA-A3205,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3206,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3207,YSAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3208,YFAMYQENVAHTHESIAYIMYQDYTWAVLAYTWY HLA-A3209,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTRY HLA-A3210,YFAMYQENVAHTDESIAYIMYQDYTWAEWAYTWY HLA-A3211,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYEWY HLA-A3212,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3213,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTGY HLA-A3214,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3215,YFAMYRNNVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:01,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:02,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A32:03,YFAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A32:04,YFAMYQENVAHTDESIAYIIYRDYTWAELAYTWY HLA-A32:05,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:06,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:07,YSAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:08,YFAMYQENVAHTHESIAYIMYQDYTWAVLAYTWY HLA-A32:09,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTRY HLA-A32:10,YFAMYQENVAHTDESIAYIMYQDYTWAEWAYTWY HLA-A32:100,YFAMYQENVVHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:102,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:103,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:104,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:105,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:106,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:107,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:108,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:109,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:110,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:111,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:113,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:114,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:115,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:116,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:118,YFAMYQENVAHTDESIAYIMYQDYTWAVWAYTWY HLA-A32:119,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:12,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:120,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:121,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:13,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTGY HLA-A32:14,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:15,YFAMYRNNVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:16,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:17,YFAMYQENVAQTDESIAYIMYQDYTWAVLAYTWY HLA-A32:18,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:20,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:21,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:22,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A32:23,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:24,YFAMYQENMAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:25,YFAMYHENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:26,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYRWY HLA-A32:28,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:29,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:30,YFAMYQENVAHTDESIAYIMYRDYTWAVLAYTWY HLA-A32:31,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:32,YFAMYQENVAHTDESIAYIMYRDYTWAVLAYTWY HLA-A32:33,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:34,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:35,YFALYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:36,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:37,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:38,YFAMYQENVAHTDERIAYIMYQDYTWAVLAYTWY HLA-A32:39,YFAMYRENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:40,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:41,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:42,YTAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:43,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:44,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:46,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:47,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:49,YFAMYQENVAYTDESIAYIMYQDYTWAVLAYTWY HLA-A32:50,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:51,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:52,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:53,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:54,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:55,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:57,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:58,YFARYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:59,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:60,YFAMYQENVAHTDESIACIMYQDYTWAVLAYTWY HLA-A32:61,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:62,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:63,YFAMYQENVAHTDESIAYIMYQDYTWAELAYTWY HLA-A32:64,YYAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:65,YFAMYQENVAHTDESIAYIIYQDYTWAVLAYTWY HLA-A32:66,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:67,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:68,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:69,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:70,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:71,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:72,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:73,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:74,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:75,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:76,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:77,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:78,YFAMYQENVAHTDEIIAYIMYQDYTWAVLAYTWY HLA-A32:79,YFAMYEEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:80,YFAMYQENVAHTDESALYIMYQDYTWAVLAYTWY HLA-A32:81,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTSY HLA-A32:82,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:83,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:84,YFAMYQENVAHIDESIAYIMYQDYTWAVLAYTWY HLA-A32:85,YFAIYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:86,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:87,YFAMYQENVAHTDESIAYIMYQDYTWALLAYTWY HLA-A32:88,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:89,YFAMYQENVAHTDESIAYLNYQDYTWAVLAYTWY HLA-A32:90,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:91,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:93,YFAMYGENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:94,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:95,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:96,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:97,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:98,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A32:99,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A3301,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A3303,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3304,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A3305,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A3306,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3307,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A3308,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3309,YTAMYGENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3310,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A3311,YTAMYRNNVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A3312,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3313,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A33:01,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:03,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:04,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:05,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:06,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:07,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:08,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:09,YTAMYGENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:10,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A33:100,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:101,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:102,YTAMYRNNVAHIDVDTLYIMYQDYTWAVQAYTWY HLA-A33:103,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:104,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:105,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:106,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWN HLA-A33:107,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:108,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:109,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:11,YTAMYRNNVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A33:110,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:111,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:112,YTAMYRNNVAHIDVDTLYIMYQDYTWARLAYTWY HLA-A33:113,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:114,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:115,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:116,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:117,YTAMYRNNVAHIGVDTLYIMYQDYTWAVLAYTWY HLA-A33:118,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:119,YSAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:12,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:120,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYMWY HLA-A33:121,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:122,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:124,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:125,YTAMYRNNVAQTDVDTLYIMYQDYTWAVLAYTWH HLA-A33:126,YTAMYRNNVAHIDVDTLYIMHQDYTWAVLAYTWY HLA-A33:127,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:128,YTAMYRNNVAYIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:13,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A33:130,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:131,YTAMYRNNVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A33:132,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A33:133,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:134,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:135,YTAMYRSNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:136,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:137,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:138,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:139,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:14,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:141,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:142,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:144,YTAMYRNNVAHIDVDTLYIIYQDYTWAVLAYTWY HLA-A33:145,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:146,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:147,YTAMYRNNVAHTDVNTLYIMYQDYTWAVLAYTWY HLA-A33:148,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:149,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:15,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:150,YTAMYRNNVAHIDVDTLYIMYQDYTWAVQAYTWY HLA-A33:151,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:152,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:153,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:155,YTAMYRNNVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A33:158,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:159,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:16,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:160,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:161,YTAMYRNNVAHIDMDTLYIMYQDYTWAVLAYTWY HLA-A33:162,YTAMYRNNVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A33:163,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:164,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:165,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:166,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:167,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLPYTWH HLA-A33:168,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:169,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:17,YTAMYRNNVAHIDADTLYIMYQDYTWAVLAYTWY HLA-A33:170,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:18,YTAMYRNNVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A33:19,YTAMYRNNVAHIDVDTLYLMFHYYTWAVQAYTGY HLA-A33:20,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:21,YTAMYEENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:22,YTAMYRNNVAHIDVDTLYVRYQDYTWAVLAYTWY HLA-A33:23,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:24,YTAMYRNNVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A33:25,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:26,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:27,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:28,YTAMYRNNVAHIDVDTLYIMYQDYTWAELAYTWY HLA-A33:29,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:30,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:31,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:32,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:33,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:34,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:35,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:36,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:37,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:39,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:40,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:41,YTAMYRNNVAHIDVDTPYIMYQDYTWAVLAYTWY HLA-A33:42,YTAMYRNNVSHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:43,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:44,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:45,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:46,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:47,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:48,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A33:49,YTAMYRNNVAHIDVDTLYIIYQDYTWAVLAYTWH HLA-A33:50,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:51,YYAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:52,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:53,YTAMYEEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:54,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:55,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:56,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:57,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:58,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:59,YTAMYRNNVAHIDVDTLYIMYQDYTWAAQAYTWY HLA-A33:60,YTSMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:61,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYRWY HLA-A33:62,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:63,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:64,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:65,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:66,YTAMYQNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:67,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:68,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:69,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:70,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:71,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:72,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:75,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:76,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:77,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:78,YTDMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:79,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:81,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:82,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:83,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:84,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:85,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:86,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:87,YTAMYRNNVAHFDVDTLYIMYQDYTWAVLAYTWY HLA-A33:88,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:89,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:90,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:91,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:92,YAAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A33:93,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:94,YTAMYRNNVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A33:95,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:97,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A33:98,YTAMYRNNVAHIDVDTLYIMYQDYTRAVLAYTWY HLA-A33:99,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A3401,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A3402,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A3403,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A3404,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A3405,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A3406,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYTWY HLA-A3407,YYAMYRNNVSQTDVDTLYIIYRDYTWAELAYTWY HLA-A3408,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:01,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:02,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:03,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:04,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:05,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYTWY HLA-A34:07,YYAMYRNNVSQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:08,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:09,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:11,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYAWY HLA-A34:12,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:13,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:14,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:15,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:16,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:17,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:18,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:19,YYAMYQENVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A34:20,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A34:21,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A3601,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A3602,YFAMYQENMAHTDANTLYIIYRDYTWVARAYTWY HLA-A3603,YFAMYQENMAHTDANTLYLMYRDYTWVARVYTWY HLA-A3604,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A36:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A36:02,YFAMYQENMAHTDANTLYIIYRDYTWVARAYTWY HLA-A36:03,YFAMYQENMAHTDANTLYLMYRDYTWVARVYTWY HLA-A36:04,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A36:05,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A36:06,YFAMYQENMAHTDANTLYIIYRDCTWVARVYTWY HLA-A36:07,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A36:08,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A4301,YYAMYLQNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A43:01,YYAMYLQNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A6601,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A6602,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A6603,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYEWY HLA-A6604,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWH HLA-A6605,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYRWY HLA-A6606,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYRWY HLA-A66:01,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:02,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A66:03,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYEWY HLA-A66:04,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWH HLA-A66:05,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYRWY HLA-A66:07,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:08,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:09,YYAMYRNNVAQTDVDTLYVRYQDYTWAEWAYRWY HLA-A66:10,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRGY HLA-A66:11,YYAMYRNNVAQTDADTLYIRYQDYTWAEWAYRWY HLA-A66:12,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:13,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:14,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:15,YYAMYRNNVAHIDVDTLYIRYQDYTWAEWAYRWY HLA-A66:16,YYAMYRNNVAQTDVDTLYIRYQDYTWVEWAYEWY HLA-A66:17,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:18,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:19,YYAMYRNNVAQTDVDTLYIRYQDYTWAERAYRWY HLA-A66:20,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:21,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A66:22,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:23,YYAMYQENVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:24,YYAMYRNNVAQTDVDTLHIRYQDYTWAEWAYRWY HLA-A66:25,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A66:29,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:30,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:31,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A66:32,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A6801,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6802,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A6803,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A6804,YYAMYRNNVAHIDVDTLYIMYRDYTWAVWAYTWY HLA-A6805,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A6806,YYAMYRNNVAQTDVDTLYIMYEHYTWAVWAYTWY HLA-A6807,YYAMYRNNVAQTDVDTLYIMYRHYTWAVWAYTWY HLA-A6808,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A6809,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A6810,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6812,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6813,YYAMYRENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6814,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6815,YYAMYRNNVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A6816,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6817,YYAMYRNNVAQTDVDTLYIMYRVYTWAVWAYTWY HLA-A6819,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6820,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A6821,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6822,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6823,YYAMYRNNVAQTDVDTLYIRYRDYTWAVWAYTWY HLA-A6824,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6825,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6826,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTGY HLA-A6827,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A6828,YYAMYRNNVAQTDVDTLYIRYHYYTWAVRAYTWY HLA-A6829,YTAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6830,YYAMYGENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6831,YYAMYRNNVAHTDVDTLYIRYHYYTWAVWAYTWY HLA-A6832,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6833,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6834,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYMWY HLA-A6835,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6836,YYAMYRNNVAQTDENIAYIMYRDYTWAVWAYTWY HLA-A6837,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6838,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6839,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6840,YYAMYRNNVGQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:01,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:02,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:03,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:04,YYAMYRNNVAHIDVDTLYIMYRDYTWAVWAYTWY HLA-A68:05,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A68:06,YYAMYRNNVAQTDVDTLYIMYEHYTWAVWAYTWY HLA-A68:07,YYAMYRNNVAQTDVDTLYIMYRHYTWAVWAYTWY HLA-A68:08,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A68:09,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A68:10,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:100,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:101,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:102,YYTMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:103,YYAMYRNNVAQTDVDTLYIIYRDYTWAVWAYTWY HLA-A68:104,YYAMYRNNVAQTDVDTLYIMYHYYTWAVWAYTWY HLA-A68:105,YYAMYRNNVAQTDVDTLYVRYRDYTWAVWAYTWY HLA-A68:106,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:107,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:108,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWTYTWY HLA-A68:109,YYAMYRNNVAHTDENTLYIMYRDYTWAVWAYTWY HLA-A68:110,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:111,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:112,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:113,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWVYTWY HLA-A68:114,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:115,YYAMYRNNVAQTDVDTLYIMYRDYTWAVRVYTGY HLA-A68:116,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:117,YSAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:118,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:119,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:12,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:121,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:122,YYAIYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:123,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:124,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:125,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:126,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:127,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:128,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:129,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A68:13,YYAMYRENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:130,YYAMYLQNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:131,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTGY HLA-A68:132,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:133,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:134,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYRWY HLA-A68:135,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:136,YYAMYRNNVAQTDENTLYIMYRDYTWAVWAYTWY HLA-A68:137,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:138,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:139,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:14,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:140,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:141,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:143,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:144,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:145,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:146,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:147,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:149,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:15,YYAMYRNNVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A68:150,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:151,YYAMYRNNVAQTDVDTLYITYRDYTWAVWAYTWY HLA-A68:152,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:153,YYAMYRNNVAQTDVATLYIRYHYYTWAVWAYTWY HLA-A68:154,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:155,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:156,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:157,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYEWY HLA-A68:158,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:16,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:160,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:161,YYAMYRNNVAQTDVDTLYIMYPDYTWAVWAYTWY HLA-A68:162,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:163,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:164,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:165,YYAMYRNNVAQTDVDTLHIMYRDYTWAVWAYTWY HLA-A68:166,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:167,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:168,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A68:169,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:17,YYAMYRNNVAQTDVDTLYIMYRVYTWAVWAYTWY HLA-A68:170,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:172,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:173,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:174,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:175,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:176,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:177,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:178,YYAMYQENVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:179,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:180,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:183,YYAMYRNNVAQTDVDTLYIMYRDYTWAEWAYTWY HLA-A68:184,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:185,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:186,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:187,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:188,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:189,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:19,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:190,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:191,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:192,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:193,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:194,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:195,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:196,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:197,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:198,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:20,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A68:200,YYAMYRNNVAQTDVDTLYIMYRDYAWAVWAYTWY HLA-A68:201,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:202,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:204,YYAMYRNNVAQTDVDTLYIMYRDYTWAEQAYTWY HLA-A68:21,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:22,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:23,YYAMYRNNVAQTDVDTLYIRYRDYTWAVWAYTWY HLA-A68:24,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:25,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:26,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTGY HLA-A68:27,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:28,YYAMYRNNVAQTDVDTLYIRYHYYTWAVRAYTWY HLA-A68:29,YTAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:30,YYAMYGENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:31,YYAMYRNNVAHTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:32,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:33,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:34,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYMWY HLA-A68:35,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:36,YYAMYRNNVAQTDENIAYIMYRDYTWAVWAYTWY HLA-A68:37,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:38,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:39,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:40,YYAMYRNNVGQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:41,YYAMYRNNVAQTDVDTLYIMYRDYTWVVWAYTWY HLA-A68:42,YYAMYRNNVAQTDVDTLYIMYRDYTWAEWAYTWY HLA-A68:43,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:44,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:45,YSAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:46,YYAMYRNNVAQTDVNTLYIMYRDYTWAVWAYTWY HLA-A68:47,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:48,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:50,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:51,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:52,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:53,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:54,YYAMYRNNVAQTDVDTLYIRYHYYTWAEWAYTWY HLA-A68:55,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:56,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:57,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:58,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:60,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:61,YYAMYRNNVAQTDVDTLYIRYHYYTWAEWAYRWY HLA-A68:62,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:63,YYAMYRNNVAQTDVDTLYIMYRDYTWAELAYTWY HLA-A68:64,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:65,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTGY HLA-A68:66,YYAMYQENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:67,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:68,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:69,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:70,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:71,YFAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:72,YYAMYRNNVTQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:73,YYAMYRNNVAQTDVDTLYIMYRDYTWAVRAYTWY HLA-A68:74,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:75,YYAMYGNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:76,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:77,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:78,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:79,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:80,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:81,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:82,YYAMYRNNVAQTDVDTLYIRCHYYTWAVWAYTWY HLA-A68:83,YYAMYRNNVAQTDVDTLYVMYRDYTWAVWAYTWY HLA-A68:84,YYAMYRNNVAQTDANTLYIMYRDYTWAVWAYTWY HLA-A68:85,YYAMYRNNVVQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:86,YYAMYRNNVAQTDVDILYIRYHYYTWAVWAYTWY HLA-A68:87,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:88,YYAMYRNNVAQTDVDTLYIMYRYYTWAVWAYTWY HLA-A68:89,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:90,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:91,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:92,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:93,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:95,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:96,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:97,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A68:98,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A68:99,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A6901,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A69:01,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A69:02,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A69:03,YYAMYRNNVAQTDVDTLYVRYHYYTWAVQAYTWY HLA-A69:04,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A69:05,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A7401,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7402,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7403,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7404,YFAMYGEKVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7405,YFAMYQENVAHADVDTLYIMYQDYTWAVLAYTWY HLA-A7406,YFAMYQENVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A7407,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A7408,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7409,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A7410,YFAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A7411,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:01,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:02,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:03,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:04,YFAMYGEKVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:05,YFAMYQENVAHADVDTLYIMYQDYTWAVLAYTWY HLA-A74:06,YFAMYQENVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A74:07,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A74:08,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:09,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:10,YFAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A74:11,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:13,YFAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:15,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:16,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:17,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:18,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:19,YYAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:20,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:21,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A74:22,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:23,YFAMYQENVAHTDVDTLYIIYQDYTWAVLAYTWY HLA-A74:24,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:25,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:26,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:27,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:28,YFAMYQENVAHTDVDTLYIMYQDYTWAELAYTWY HLA-A74:29,YFAMYQENVAHTDVDTLYIMYQDYTWAVWAYTWY HLA-A74:30,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:31,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A74:33,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A74:34,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A8001,YFAMYEENVAHTNANTLYIIYRDYTWARLAYEGY HLA-A80:01,YFAMYEENVAHTNANTLYIIYRDYTWARLAYEGY HLA-A80:02,YFAMYEENVAHTDVDTLYIIYRDYTWARLAYEGY HLA-A80:03,YFAMYEENVAHTNANTLYIIYRDYTWARLAYTGY HLA-A80:04,YFAMYEENVAHTNENTLYIIYRDYTWARLAYEGY HLA-A9201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYRWY HLA-A9202,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A9203,YFAMYQENVAQTHVDTLYVRCHYYTWAVLAYTWY HLA-A9204,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A9205,YFAMYGEKVAHTHVDTLYVRYEYYTWAVLAYTWY HLA-A9206,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9207,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9208,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A9209,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9210,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A9211,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9212,YFAMYGEKVAHTDENIAYVRCHYYTWAVLAYTWY HLA-A9214,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A9215,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A9216,YFAMYGEKVAHTHLDTLYVRYHYYTWAVLAYTWY HLA-A9217,YFAMYGEKVAHTHVDTLYVRYQDYTWAEWAYTWY HLA-A9218,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9219,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9220,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9221,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9222,YYAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A9223,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A9224,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A9226,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-B0702,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0703,YYSEYRNIYTNTDESNLYLSYDYYTWAERAYEWY HLA-B0704,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B0705,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B0706,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B0707,YYSEYRNIYAQTDESNLYLRYDYYTWAERAYEWY HLA-B0708,YYSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B0709,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B0710,YYSEYRNICAQTDESNLYLSYDYYTWAERAYEWY HLA-B0711,YYSEYRNIYAQTDENNLYLSYDSYTWAERAYEWY HLA-B0712,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B0713,YYSGYREKYRQADVSNLYLSYDYYTWAERAYEWY HLA-B0714,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B0715,YYSEYRNIYAQADVSNLYLSYDYYTWAERAYEWY HLA-B0716,YYSEYRNIYTNTYESNLYLSYDYYTWAERAYEWY HLA-B0717,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B0718,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B0719,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYTWY HLA-B0720,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLSY HLA-B0721,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0722,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0723,YYSEYRNIYAQTDESNLHLSYDYYTWAERAYEWY HLA-B0724,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B0725,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYEWY HLA-B0726,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYEWY HLA-B0727,YYSEYRNISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B0728,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B0729,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0730,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0731,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYTWY HLA-B0732,YYSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B0733,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0734,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B0735,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0736,YYSEYRNIYAQTDENIAYLSYDYYTWAERAYEWY HLA-B0737,YYSEYRNIYANTYESNLYLSYDYYTWAERAYEWY HLA-B0738,YYSEYRNIFTNTYENIAYLSYDYYTWAERAYEWY HLA-B0739,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0740,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B0741,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0742,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0743,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYTWY HLA-B0744,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0745,YYSEYRNIYAQTDESNLYLSYDYYTWAERTYEWY HLA-B0746,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0747,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0748,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYEWY HLA-B0749,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0750,YYSEYRNISTNTYESNLYLSYDYYTWAERAYEWY HLA-B0751,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYEWY HLA-B0752,YYSEYRNIYAQTDESNLYLSYDYYTWAERVYEWY HLA-B0753,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B0754,YYSEYREIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0755,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYEWY HLA-B0756,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0757,YYSEYRNIYAQTDENNLYLSYDYYTWAERAYEWY HLA-B0758,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:02,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:03,YYSEYRNIYTNTDESNLYLSYDYYTWAERAYEWY HLA-B07:04,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B07:05,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:06,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:07,YYSEYRNIYAQTDESNLYLRYDYYTWAERAYEWY HLA-B07:08,YYSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B07:09,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B07:10,YYSEYRNICAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:100,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYLWY HLA-B07:101,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:102,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:103,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:104,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:105,YYSEYRNIYAQTVESNLYLSYNYYTWAERAYEWY HLA-B07:106,YYSEYRNIYAQTDESNLYLSYDYYTRAERAYEWY HLA-B07:107,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:108,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:109,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:11,YYSEYRNIYAQTDENNLYLSYDSYTWAERAYEWY HLA-B07:110,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:112,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:113,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:114,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:115,YYSEYRNIYAQTDESNLYLSYNFYTWAERAYEWY HLA-B07:116,YYSEYRNIYVQTDESNLYLSYDYYTWAERAYEWY HLA-B07:117,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:118,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B07:119,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:12,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B07:120,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:121,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYERY HLA-B07:122,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:123,YYSEYREIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:124,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:125,YYSEYRNIYTQTDESNLYLSYDYYTWAERAYEWY HLA-B07:126,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:127,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:128,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:129,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:13,YYSGYREKYRQADVSNLYLSYDYYTWAERAYEWY HLA-B07:130,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:131,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYLWY HLA-B07:132,YYSEYRNLYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:133,YYSKYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:134,YYSTYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:136,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:137,YYSEYRNIYAQTDESNLYIRYNYYTWAERAYEWY HLA-B07:138,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:139,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:14,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B07:140,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYESY HLA-B07:141,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:142,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:143,YHSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:144,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWS HLA-B07:145,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:146,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B07:147,YYSEYRNIYAQTDESNLYLSYDYYTLAELAYEWY HLA-B07:148,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:149,YYSEYRNIYAQTDENTAYLSYDYYTWAERAYEWY HLA-B07:15,YYSEYRNIYAQADVSNLYLSYDYYTWAERAYEWY HLA-B07:150,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:151,YYSEYRNIYAQTDESNLYLSYDYYTLAERAYEWY HLA-B07:152,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:153,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYESY HLA-B07:154,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:155,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:156,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:157,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:158,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:159,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:16,YYSEYRNIYTNTYESNLYLSYDYYTWAERAYEWY HLA-B07:160,YYSEYRNIYAQADESNLYLSYDYYTWAERAYEWY HLA-B07:162,YYSEYRNIYAQTDESNLYIRYDSYTWAERAYEWY HLA-B07:163,YYSEYRNIYAQTDESNLYIRSDYYTWAERAYEWY HLA-B07:164,YYSEYRNIYAQTDESNLYLSYDYYTWARLAYEWY HLA-B07:165,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:166,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:168,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:169,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:17,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B07:170,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:171,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:172,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:173,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:174,YYSEYRNIYAQTDESNLYLSYDYYSWAERAYEWY HLA-B07:175,YYSEYRNIYAQTDESNLYLSYDYCTWAERAYEWY HLA-B07:176,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:177,YYTEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:178,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:179,YYSEYRNIYAQTDESDLYLSYDYYTWAERAYEWY HLA-B07:18,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B07:180,YYSEYRNICTNTYENIAYLSYDYYTWAERAYEWY HLA-B07:183,YYSEYRNISAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:184,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:185,YYSEYRNIYAQTDDSNLYLSYDYYTWAERAYEWY HLA-B07:186,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:187,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:188,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:189,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:19,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYTWY HLA-B07:190,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:191,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:192,YYSEYRNIYAQTDESSLYLSYDYYTWAERAYEWY HLA-B07:193,YYSEYRNIYAQTDESNLYLRSDYYTWAERAYEWY HLA-B07:194,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:195,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:196,YYSEYRNIYAQTDESNLYLNYDYYTWAERAYEWY HLA-B07:197,YYSEYRNIYAQTDESNLYLNYHDYTWAERAYEWY HLA-B07:198,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:199,YYSEYRNIYAQTDESNLYISYDYYTWAERAYEWY HLA-B07:20,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLSY HLA-B07:200,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:202,YYSEYRNIYAQTDESNLYLSYDYYSLAVRAYEWY HLA-B07:203,YYSEYRNIYAQIDESNLYLSYDYYTWAERAYEWY HLA-B07:204,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:205,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:206,YYAEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:207,YYSEYRNIFTNTYESNLYLSYNYYTWAERAYEWY HLA-B07:208,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:209,YYSEYRNIYAQTDESNLYLSYNYYTWAVLAYEWY HLA-B07:21,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:210,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:211,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:212,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:213,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:214,YYSEYRNIYAQTDESNLYLRYNFYTWAERAYEWY HLA-B07:215,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:216,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:217,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:218,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWH HLA-B07:219,YYSEYGENMASTYENIAYLSYDYYTWAERAYEWY HLA-B07:22,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:220,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYLWH HLA-B07:221,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:222,YYSEYRNIYAQTDESNLYLSYNYYSWAERAYEWY HLA-B07:223,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYLWY HLA-B07:224,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:225,YYSEYRNIYAQTDESNLYMVYEHYTWAERAYEWY HLA-B07:226,YYSEYRNIYAQTDESNLYLSYDYYTWAALAYEWY HLA-B07:227,YYSEYRNIYAQTDESNLYIVYDYYTWAERAYEWY HLA-B07:228,YYSEYRNIFTNTYESNLYLSYDYYTWAERAYEWY HLA-B07:229,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:23,YYSEYRNIYAQTDESNLHLSYDYYTWAERAYEWY HLA-B07:230,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:232,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:233,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:234,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:235,YYSEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B07:236,YYSEYRNIYAQTDEDTLYLSYDYYTWAERAYEWY HLA-B07:237,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B07:238,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:239,YYSEYRNIYAQTDESNLYLWYDYYTWAERAYEWY HLA-B07:24,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B07:240,YYSEYRNIYAQTDEDNLYLSYDYYTWAERAYEWY HLA-B07:241,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:242,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:243,YYSEYQNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:244,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:245,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:246,YYSEYRNIYAQTDESNLYLSYDFYTWAERAYEWY HLA-B07:247,YYSGYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:248,YYSEYRNIYAQTDESNLYIRSDYYTWAERAYEWY HLA-B07:249,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:25,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYEWY HLA-B07:250,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:252,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:253,YYSEYRNIYAQTDVNNLYLSYDYYTWAERAYEWY HLA-B07:254,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:255,YYSEYRNIYAQTDESNLYLRYDSYTWAERAYEWY HLA-B07:256,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:257,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:258,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:259,YYSEYRNIYRQTDESNLYLSYDYYTWAERAYEWY HLA-B07:26,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYEWY HLA-B07:260,YYSEYRNIYAQTDESNLYLSYEHYTWAERAYEWY HLA-B07:261,YYSEYRNIYAQTDESNLYLSYDYYTWAVRAYEWY HLA-B07:262,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:263,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:264,YYSEHRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:265,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:266,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:267,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:268,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:269,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYQWY HLA-B07:27,YYSEYRNISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B07:270,YYSGYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:271,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:273,YYSEYRNIYAQTDESTLYLSYDYYTWAERAYEWY HLA-B07:274,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:275,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:276,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:277,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:278,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:279,YYSEYRNIYAQTDESNLYLSYDYYSLAERAYEWY HLA-B07:28,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B07:280,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:281,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:282,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:283,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:284,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:286,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:287,YYSEYRNIYAQTDESNLYLSYNSYTWAERAYEWY HLA-B07:288,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:289,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:29,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:290,YYSEYRIIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:291,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:292,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:293,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:294,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:295,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:296,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:297,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:298,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:299,YYSEYRNIYAQTDQSNLYLSYDYYTWAERAYEWY HLA-B07:30,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:300,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:301,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:302,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:303,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:304,YYSEYRNIYAQTDVSNLYLSYNYYTWAERAYEWY HLA-B07:305,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:306,YYSEYRNICTNTYESNLYLSYDYYTWAERAYEWY HLA-B07:307,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:308,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:309,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:31,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYTWY HLA-B07:310,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:311,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:312,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:313,CYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:314,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:317,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:319,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:32,YYSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B07:320,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:321,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:322,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:323,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:324,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:326,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:327,YYSEYRNIYAQTDESNLYLSYNFYTWAERAYEWY HLA-B07:328,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:329,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:33,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:331,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:332,YYSEYRNIYAQTDESNLYLSYNYYTWAARAYEWY HLA-B07:333,YYSQYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:334,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:335,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:336,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:337,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:338,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:339,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:34,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B07:340,YYSEYRNIYAQTDENNLYLSYNYYTWAERAYEWY HLA-B07:341,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:342,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:344,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:345,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:346,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:347,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:348,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:349,YYSEYRNIYAQTDESNLYLSYNYYTWAEDAYEWY HLA-B07:35,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:350,YYSEYRNIYAQTDESNLYISYDYYTWAERAYEWY HLA-B07:352,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:353,YYSEYRNIYAQTDESNLYLSYNYYAWAERAYEWY HLA-B07:354,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:355,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:356,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:357,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:358,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYLWY HLA-B07:36,YYSEYRNIYAQTDENIAYLSYDYYTWAERAYEWY HLA-B07:37,YYSEYRNIYANTYESNLYLSYDYYTWAERAYEWY HLA-B07:38,YYSEYRNIFTNTYENIAYLSYDYYTWAERAYEWY HLA-B07:39,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:40,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:41,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:42,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:43,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYTWY HLA-B07:44,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:45,YYSEYRNIYAQTDESNLYLSYDYYTWAERTYEWY HLA-B07:46,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:47,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:48,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYEWY HLA-B07:50,YYSEYRNISTNTYESNLYLSYDYYTWAERAYEWY HLA-B07:51,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYEWY HLA-B07:52,YYSEYRNIYAQTDESNLYLSYDYYTWAERVYEWY HLA-B07:53,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:54,YYSEYREIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:55,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYEWY HLA-B07:56,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:57,YYSEYRNIYAQTDENNLYLSYDYYTWAERAYEWY HLA-B07:58,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:59,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:60,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B07:61,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:62,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:63,YYSDYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:64,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEGY HLA-B07:65,YYATYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:66,YYSEYRNIYAQTDESNLYLSYDYYTWAEQAYEWY HLA-B07:68,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:69,YYSEYRNICTNTDESNLYLSYNYYTWAERAYEWY HLA-B07:70,YCSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:71,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:72,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:73,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:74,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:75,YYSEYRNIYAQTYENNLYLSYDYYTWAERAYEWY HLA-B07:76,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:77,YYSEYRNIYAQTDESNLYLRSDYYTWAERAYEWY HLA-B07:78,YYSEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B07:79,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:80,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYEWY HLA-B07:81,YYSEYRNIYAQTDESIAYLSYDYYTWAERAYEWY HLA-B07:82,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:83,YYSEYRNIFAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:84,YYSEYRNIYAQTDESNLYWTYDYYTWAERAYEWY HLA-B07:85,YYSEYRNICTNTDESNLYLSYDYYTWAERAYEWY HLA-B07:86,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:87,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:88,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:89,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:90,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:91,YYSEYRNIYAQTYESNLYLSYDYYTWAERAYEWY HLA-B07:92,YYSEYRNIYAQTDVSNLYLSYDYYTWAERAYEWY HLA-B07:93,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:94,YYSEYWNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:95,YYSEYRNIYAQTDESNLYFSYDYYTWAERAYEWY HLA-B07:96,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B07:97,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B07:98,YYSEYRNIYAQTDESNLYLSYDYYTCAERAYEWY HLA-B07:99,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B0801,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0802,YDSEYRNIFTNTDENTAYLSYNYYTWAVDAYTWY HLA-B0803,YDSEYRNIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B0804,YDSEYRNISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0805,YDSEYRNTFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0806,YDSEYRNIFTNTDENNLYLSYNYYTWAERAYTWY HLA-B0807,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B0808,YDSEYRNIFTNTDESNLYLSYNYYPGPWTPTRGT HLA-B0809,YDSEYRNIFTNTDESNLYWTYNYYTWAVDAYTWY HLA-B0810,YDSEYRDIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0811,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYAWY HLA-B0812,YDSEYRNIFTNTDESNLYLRYNYYTWAVDAYTWY HLA-B0813,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYTWY HLA-B0814,YDSEYRNIFTNTDESNLYLSYHDYTWAVDAYTWY HLA-B0815,YDSEYRNIFTNTDVSNLYLSYNYYTWAVDAYTWY HLA-B0816,YDSEYRNIFTNADESNLYLRYNYYTWAVDAYTWY HLA-B0817,YDSEYREISTNTDENNLYLSYNYYTWAVDAYTWY HLA-B0818,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0819,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0820,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYTWY HLA-B0821,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B0822,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0823,YDSEYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B0824,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0825,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYLWY HLA-B0826,YYAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0827,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0828,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B0829,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0831,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0832,YDSTYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B0833,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:01,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:02,YDSEYRNIFTNTDENTAYLSYNYYTWAVDAYTWY HLA-B08:03,YDSEYRNIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B08:04,YDSEYRNISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:05,YDSEYRNTFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:07,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B08:09,YDSEYRNIFTNTDESNLYWTYNYYTWAVDAYTWY HLA-B08:10,YDSEYRDIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:100,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:101,YDSEYREIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:102,YDTEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:103,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:104,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:105,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:106,YDSEYWNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:107,YDSEYRNIFTNTDESNLYLRYDSYTWAVDAYTWY HLA-B08:108,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:109,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:11,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYAWY HLA-B08:110,YDSEYRNISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B08:111,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B08:112,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:113,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:114,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:115,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:116,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:117,YDSEYRNIFTNTDESTAYLSYNYYTWAVDAYTWY HLA-B08:118,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWH HLA-B08:119,YDSEYGNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:12,YDSEYRNIFTNTDESNLYLRYNYYTWAVDAYTWY HLA-B08:120,YDSEYRNIFTNTDESNLYLSYNYYTLAVDAYTWY HLA-B08:121,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:122,YDTEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:123,YDSEYRNIYAQADESNLYLSYNYYTWAVDAYTWY HLA-B08:124,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:125,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYMWY HLA-B08:126,YDSEYRNIFTNTDEDTLYLSYNYYTWAVDAYTWY HLA-B08:127,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:128,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:129,YDSEYRNIFTNTDESNLYIRYNYYTWAVDAYTWY HLA-B08:13,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYTWY HLA-B08:130,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:131,YDSEYRNIFTNTDEDTLYLSYNYYTWAVDAYTWY HLA-B08:132,YDSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B08:133,YDSTYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B08:134,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:135,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:136,YDSEYRNIFTNTDESTLYLSYNYYTWAVDAYTWY HLA-B08:137,YDSEHRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:138,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:139,YDSEYRNIFTNTYEDTLYLSYNYYTWAVDAYTWY HLA-B08:14,YDSEYRNIFTNTDESNLYLSYHDYTWAVDAYTWY HLA-B08:140,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:141,YDSEYRNNFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:142,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:143,YDSEYRNIFTNTDESNLYLSYNYYTWAALAYTWY HLA-B08:144,YDSEYPNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:145,YDSEYRNIFTNADESNLYLSYNYYTWAVDAYTWY HLA-B08:146,YDSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:147,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:149,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:15,YDSEYRNIFTNTDVSNLYLSYNYYTWAVDAYTWY HLA-B08:150,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:151,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:152,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:153,YDSEYRNIFTNTDESNPYLSYNYYTWAVDAYTWY HLA-B08:154,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:155,YDSKYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:156,YDSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B08:157,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:158,YDSEYRNIFTNTEESNLYLSYNYYTWAVDAYTWY HLA-B08:159,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:16,YDSEYRNIFTNADESNLYLRYNYYTWAVDAYTWY HLA-B08:160,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:161,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:162,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:163,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:164,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:165,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYEWY HLA-B08:166,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:167,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:168,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:169,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:17,YDSEYREISTNTDENNLYLSYNYYTWAVDAYTWY HLA-B08:170,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:171,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYEWY HLA-B08:172,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:173,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:174,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:175,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B08:176,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:177,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:178,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:179,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:18,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:180,YDATYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:181,YDSEYRNIFTNTDESNLYIVYNYYTWAVDAYTWY HLA-B08:182,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:183,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:184,YDSEYRNIFTNTDESNLYLNYNYYTWAVDAYTWY HLA-B08:185,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:186,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYKWY HLA-B08:187,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:188,YDSGYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:189,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:190,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:191,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:192,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:193,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:194,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:195,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:196,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:197,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:198,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:199,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:20,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYTWY HLA-B08:200,YDSEYRNIFTNTDESNLYLSYNFYTWAVDAYTWY HLA-B08:201,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:202,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:203,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:204,YDSEYRNIFTNTDESNLYVSYNYYTWAVDAYTWY HLA-B08:205,YDSEYRNIFTNTDESNLYLSYNYYTLAVLAYEWY HLA-B08:206,YDSEYRNIFTNTDESNLYLSHNYYTWAVDAYTWY HLA-B08:207,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:208,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:209,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:21,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B08:210,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:211,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:212,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:213,YDSEYRNIFTNTDESNLYLSYNYYSWAVDAYTWY HLA-B08:216,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:217,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:218,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:219,YDSEYRNIFTITDESNLYLSYNYYTWAVDAYTWY HLA-B08:22,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:221,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:222,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:223,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:224,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:23,YDSEYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B08:24,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:25,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYLWY HLA-B08:26,YYAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:27,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:28,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B08:29,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:31,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:32,YDSTYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:33,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:34,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:35,YDSEYRNIFTNTDESNLYLSYNSYTWAVDAYTWY HLA-B08:36,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:37,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B08:38,YDSEYREIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:39,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:40,YDSEYRNIFTNTDESNLYLSYNYYTWAVRAYEWY HLA-B08:41,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:42,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:43,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:44,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:45,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:46,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:47,YDSEYRNIFTNTDENNLYLSYNYYTWAVDAYTWY HLA-B08:48,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:49,YDSEYRNIFTNTDESNLYIRSNFYTWAVDAYTWY HLA-B08:50,YYSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:51,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:52,YDSEYRNIFTNTDESIAYLSYNYYTWAVDAYTWY HLA-B08:53,YDSEYRNIFTNTDESNLYLSYNYYTWAEDAYTWY HLA-B08:54,YDSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B08:55,YDSEYRNIFTNTDESNLYLSYNYYTWAVLTYTWY HLA-B08:56,YDAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:57,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:58,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:59,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:60,YDSEYRNIFTNTDESNLYISYNYYTWAVDAYTWY HLA-B08:61,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:62,YHSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:63,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:64,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:65,YDSEYRNICTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:66,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:68,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:69,YDSEYRNIFTNTDESNLYLSYNFYTWAVDAYTWY HLA-B08:70,YDSEYRNIFTNTDESNLYLSYNYYTWAVWAYTWY HLA-B08:71,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:73,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:74,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:75,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:76,YDSEYRNIFTNTDESNLYISYNYYTWAVDAYTWY HLA-B08:77,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:78,YDSEYRNIFTNTDENIAYLSYNYYTWAVDAYTWY HLA-B08:79,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B08:80,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:81,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:83,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:84,YDSEYRNIFTNTDESNLYWTYNYYTRAVDAYTWY HLA-B08:85,YDSEYRNIFSNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:87,YDSEYRNIFTNTDESNLYLSYDDYTWAVDAYTWY HLA-B08:88,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:89,YDSEYRNIFTNTDESNLYLRYDSYTWAVDAYTWY HLA-B08:90,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:91,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:92,YDSEYRNIFTNTDESNLCLSYNYYTWAVDAYTWY HLA-B08:93,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:94,YYSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:95,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:96,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:97,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:98,YDSEYQNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B08:99,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B1301,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B1302,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B1303,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B1304,YYTMYREISTNTYENTAYWTYDSYTWAVLAYLWY HLA-B1306,YYTMYREISTNTYENTAYIRYNLYTWAVLAYTWY HLA-B1308,YYTMYREISTNTYENTAYWTYNLYTWAVLACEWY HLA-B1309,YYTMYREISTNTYESNLYWTYNLYTWAVLAYEWY HLA-B1310,YYTMYREISTNTYENTAYLRYDSYTWAVLAYEWY HLA-B1311,YYTMYREISTNTYENTAYLRYNLYTWAVLAYEWY HLA-B1312,YYTMYREISTNTYENTAYIRYNLYTWAVLAYGWY HLA-B1313,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B1314,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B1315,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWH HLA-B1316,YYTMYREISTNTYENTAYWTYNLYTWAELAYEWY HLA-B1317,YYAMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B1318,YYTMYREISTNTYENTAYWTYNLYTWAVRAYEWY HLA-B1319,YYTMYREVSTNTYENTAYWTYNLYTWAVLAYEWY HLA-B1320,YYTMYREISTNTYENTAYIRYNLYTWAELAYEWY HLA-B13:01,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:02,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:03,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B13:04,YYTMYREISTNTYENTAYWTYDSYTWAVLAYLWY HLA-B13:06,YYTMYREISTNTYENTAYIRYNLYTWAVLAYTWY HLA-B13:08,YYTMYREISTNTYENTAYWTYNLYTWAVLACEWY HLA-B13:09,YYTMYREISTNTYESNLYWTYNLYTWAVLAYEWY HLA-B13:10,YYTMYREISTNTYENTAYLRYDSYTWAVLAYEWY HLA-B13:100,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:101,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:102,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:104,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:105,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:106,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:107,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:108,YYTMYREISTNTYENTAYLSYNYYTWAVLAYEWY HLA-B13:109,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:11,YYTMYREISTNTYENTAYLRYNLYTWAVLAYEWY HLA-B13:110,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:111,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:112,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:113,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:114,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:115,YYTMYREISSNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:117,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:118,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:119,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:12,YYTMYREISTNTYENTAYIRYNLYTWAVLAYGWY HLA-B13:120,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B13:121,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:122,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:124,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:125,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:126,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:127,YYTMYREISTNTYENTAYWTYDSYTWAVLAYEWY HLA-B13:128,YYTMYREISTNTYENTAYWTYNLYTWAERAYEWY HLA-B13:129,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:13,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B13:130,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:14,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:15,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWH HLA-B13:16,YYTMYREISTNTYENTAYWTYNLYTWAELAYEWY HLA-B13:17,YYAMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:18,YYTMYREISTNTYENTAYWTYNLYTWAVRAYEWY HLA-B13:19,YYTMYREVSTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:20,YYTMYREISTNTYENTAYIRYNLYTWAELAYEWY HLA-B13:21,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B13:22,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:23,YHTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:25,YYTMYREISTNTYESTAYIRYNLYTWAVLAYEWY HLA-B13:26,YYTMYREISTNTYENTAYIRYDSYTWAVLAYEWY HLA-B13:27,YYTMYREISTNTYENTAYWTFNLYTWAVLAYEWY HLA-B13:28,YYTMYREISTNTYENTACIRYNLYTWAVLAYEWY HLA-B13:29,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:30,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:31,YYTMYREISTNTYENTAYWTYNLYTWAEWAYEWY HLA-B13:32,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:33,YYAMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:34,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:35,YYTMYREISTNTYENTAYWTYDYYTWAVLAYEWY HLA-B13:36,YYTMYRNISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:37,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:38,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:39,YYTMYREISTNTYENNLYIRYNLYTWAVLAYEWY HLA-B13:40,YYTMYREISTNTYENTAYWTYNLYTWTVLAYEWY HLA-B13:41,YYTMYREISTNTYENTAYWTYNLYTWAVWAYEWY HLA-B13:42,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:43,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:44,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:45,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:46,YYTMYREISTNTYENTAYWTYNFYTWAVDAYTWY HLA-B13:47,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:48,YYTMYREISTNTYENTAYWTYNLYTWAELAYLWY HLA-B13:50,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:51,YYTMYREISTNTYENTAYIRYNFYTWAVLAYEWY HLA-B13:52,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:53,YYTMYREISTNTYENTAYWTYNLYTWAVLAYTWY HLA-B13:54,YYTMYREISANTYENTAYWTYNLYTWAVLAYEWY HLA-B13:55,YHTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:57,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:58,YYTTYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:59,YYTMYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B13:60,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:61,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:62,YYTMYREISTNTYENTAYWTYNYYTWAELAYLWH HLA-B13:64,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:65,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:66,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:67,YYTMYREISTNTYENNLYWTYNLYTWAVLAYEWY HLA-B13:68,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:69,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:70,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:71,YYTMYREISTNTYENTAYLSYNYYTWAVLAYEWY HLA-B13:72,YYTMYREISTNTYENTAYWTYDSYTWAVLAYEWY HLA-B13:73,YYTMYREISTNTYENTAYIRYNLYTWAVRAYEWY HLA-B13:74,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:75,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:77,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:78,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:79,YYTMYREISTNTYENTAYIRSNFYTWAVLAYEWY HLA-B13:80,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:81,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:82,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:83,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:84,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:85,YYTMYREISTDTYENTAYWTYNLYTWAVLAYEWY HLA-B13:86,YYTMYREISTNTYENTAYIRYNYYTWAVLAYLWY HLA-B13:87,YYTMDREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:88,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:89,YYTMYREISTNTYENTAYWTYNLYTWAVLTYEWY HLA-B13:90,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:91,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:92,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:93,YDTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:94,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:95,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B13:96,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:97,YYTEYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:98,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B13:99,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B1401,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B1402,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B1403,YYSEYRNICTNTDESNLYLWYNFYTWAERAYTWH HLA-B1404,HYSEYRNNCTNTDESNLYLWYNFYTWAELAYTWH HLA-B1405,YYSEYRNICTNTDESNLYLSYNFYTWAELAYTWH HLA-B1406,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B14:01,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:02,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:03,YYSEYRNICTNTDESNLYLWYNFYTWAERAYTWH HLA-B14:04,HYSEYRNNCTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:05,YYSEYRNICTNTDESNLYLSYNFYTWAELAYTWH HLA-B14:06,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B14:08,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B14:09,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:10,YYSEYRNICTNTDESNLYIRYNFYTWAELAYTWH HLA-B14:11,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:12,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:13,YYSEYRNICTNTDESNLYLSYNYYTWAELAYTWH HLA-B14:14,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B14:15,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:16,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:17,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:18,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B14:19,YYSEYRNICTNTDESNLYLWYNFYTWAELAYLWH HLA-B14:20,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:21,YYSEYRNIYAQTDESNLYLWYNFYTWAELAYTWH HLA-B14:22,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:23,YYSEYRNICTNTDESNLYLWYDYYTWAELAYTWH HLA-B14:24,YYSEYGNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:25,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:26,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:27,YYSEYRNICTNTDESNLYLWYNFYTWAELAYLWH HLA-B14:28,YDSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:29,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:30,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:31,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:32,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:33,YYSEYRNICTNTDESNLYLWYDYYTWAELAYTWH HLA-B14:34,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:35,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:36,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:37,YYSEYRNICTNTDESNLYWRYNLYTWAELAYTWH HLA-B14:38,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:39,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:40,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:42,YYSEYRNIFTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:43,YYSEYRNICTNTDESNLYLWYNFYTWAVLAYTWH HLA-B14:44,YYSEYRNICTNTDESNLYLWYNFYTWAELAYAWH HLA-B14:45,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:46,YYSEYRNICTNTDESNLYLWYNFYTWAELAYEWY HLA-B14:47,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:48,YYTEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:49,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:50,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:51,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:52,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:53,YYSEYRNICTNTDESNLYLSYNYYTWAELAYTWH HLA-B14:54,YYAEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:55,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B14:56,YYSEYRNICTNTDESNLYLRYDSYTWAVLAYTWH HLA-B14:57,YYSEYRNICAKTDESNLYLWYNFYTWAELAYTWH HLA-B14:58,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:59,YYSEYRNICTNTDESNLYLWYNFYTWAVLAYTWH HLA-B14:60,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:61,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:62,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWY HLA-B14:63,YYSEYRNICTNTDVSNLYLWYNFYTWAELAYTWH HLA-B14:64,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:65,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:66,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:67,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B14:68,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B1501,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1502,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B1503,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B1504,YYAMYREISTNTYESNLYWTYDSYTWAEWAYLWY HLA-B1505,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B1506,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B1507,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B1508,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1509,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWY HLA-B1510,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B1511,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1512,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B1513,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B1514,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLSY HLA-B1515,YYAMYRNISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1516,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B1517,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B1518,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B1519,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B1520,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B1521,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B1523,YYSEYRNICTNTYENIAYLRYDSYTWAELAYLWY HLA-B1524,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B1525,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B1527,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B1528,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1529,YYSEYRNIFTNTYESNLYLRYDSYTWAELAYLWY HLA-B1530,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B1531,YYAMYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B1532,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B1533,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1534,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1535,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B1536,YYAMYREISTNTYENTAYIRYDSYTWAELAYLWY HLA-B1537,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWH HLA-B1538,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWH HLA-B1539,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B1540,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B1542,YYAMYREISTNTYESNLYWTYNLYTWAELAYTWY HLA-B1543,YYAMYREISTNTYEDTLYLRYDSYTWAEWAYLWY HLA-B1544,YYAMYRNICTNTYESNLYIRYDSYTWAELAYTWY HLA-B1545,YYAMYREISTNTYESNLYLSYDYYTWAEWAYLWY HLA-B1546,YYAKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1547,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B1548,YYAMYREISTNTYESNLYLRYNYYTWAVLTYLWY HLA-B1549,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B1550,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWY HLA-B1551,YYSEYRNICTNTYESNLYLRYDSYTWAVDAYLWY HLA-B1552,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B1553,YYTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1554,YYSEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1555,YYAMYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B1556,YYAMYREIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1557,YYAMYREISTNTYVNNLYLRYDSYTWAEWAYLWY HLA-B1558,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B1560,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1561,YYSEYREISTNTDESNLYLRYDSYTWAELAYLWY HLA-B1562,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B1563,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B1564,YYSEYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B1565,YYAMYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B1566,YYAMYREICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1567,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B1568,YYSEYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B1569,YYSEYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B1570,YYAMYREISTNTDESNLYLRYDSYTWAEWAYLWY HLA-B1571,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1572,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B1573,YYAMYREISTNTYESNLYLRYNLYTWAEWAYLWY HLA-B1574,YYSEYREISINTYESNLYLRYDSYTWAELAYLWY HLA-B1575,YYAMYREISTNTYESNLYLRYDSYTWAQWAYLWY HLA-B1576,YYAMYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B1577,YYAMYREISTNTYESNLYIRYDDYTWAEWAYLWY HLA-B1578,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1580,YYSEYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B1581,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1582,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1583,YYAMYREISTNTYESNLYWTYNYYTWAVDAYTWY HLA-B1584,YYAMYREISTNTYESNLYLRFDSYTWAVRAYLWY HLA-B1585,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B1586,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B1587,YYAMYREISTNTYESIAYLRYDSYTWAEWAYLWY HLA-B1588,YYAMYRNISTNTYESNLYIRYDSYTWATLAYLWY HLA-B1589,YYAMYRNISTNTYENTAYIRYDSYTWAELAYLWY HLA-B1590,YYSEYRNICTNTYESNLYLRYDYYTWAELVYLWY HLA-B1591,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLSY HLA-B1592,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1593,YYSEYRNICTNTYESNLYLRYDSYTWAELAYTWY HLA-B1595,YYAMYQENMASTYENIAYWRYDSYTWAELAYLWY HLA-B1596,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1597,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B1598,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B1599,YYSEYRNICTNTYESNLYLRYDYYTWAERAYLWY HLA-B15:01,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:02,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:03,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:04,YYAMYREISTNTYESNLYWTYDSYTWAEWAYLWY HLA-B15:05,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:06,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B15:07,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:08,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:09,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWY HLA-B15:10,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:101,YYAMYREIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B15:102,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:103,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:104,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:105,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:106,YYAKYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:107,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:108,YYSEYRNICTNTYESNLYLRYDSYTWAELTYLWY HLA-B15:109,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B15:11,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:110,YYAMYREISTNTYESNLYLRCDSYTWAEWAYLWY HLA-B15:112,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:113,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:114,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B15:115,YYSEYRNICTNTYESTAYLRYDSYTWAELAYLWY HLA-B15:116,YYAMYREISTNTYESNLYLRYDSYSLAEWAYLWY HLA-B15:117,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B15:118,YYAMYREISTNTYESNLYLMYDSYTWAEWAYLWY HLA-B15:119,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:12,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B15:120,YYAMYRDISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:121,YYAMYRNISTNTYESNLYIRYDSYTWAELAYTWY HLA-B15:122,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:123,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:124,YYSEYRNICTNTYESNLYLRYDSYSLAVLAYEWY HLA-B15:125,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:126,YYAMYREISTNTYESNLYLSYDSCTWAEWAYLWY HLA-B15:127,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:128,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:129,YYAMYREISTNTYESNLYLNYDSYTWAEWAYLWY HLA-B15:13,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B15:131,YYSEYREISTNTYESNLYLRYDSYTWAELAYLSY HLA-B15:132,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:133,YYSEYRNICTNTYESNLYLRYDFYTWAELAYLWY HLA-B15:134,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:135,YYAMYREISTNTYENNLYLRYDSYTWAEWAYLWY HLA-B15:136,YYAMYREISTNTYESNLYLRYDSYTWAVLTYLWY HLA-B15:137,YYAMYREISTNTYESNLYWTYNFYTWAEWAYLWY HLA-B15:138,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B15:139,YYAMYRNISANTYESNLYIRYDSYTWAELAYLWY HLA-B15:14,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLSY HLA-B15:140,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:141,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B15:142,YDAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:143,YYAKYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:144,YYAMYRNISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B15:145,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:146,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:147,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:148,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:15,YYAMYRNISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:150,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B15:151,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:152,YYAMYREIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:153,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:154,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B15:155,YYAMYREISTNTYESNLYWTYDSYTWAVLAYLWY HLA-B15:156,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:157,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B15:158,YYSEYREISTNTYESNLFLRYDSYTWAELAYLWY HLA-B15:159,YYAMYREISTNTYESNLHLRYDSYTWAEWAYLWY HLA-B15:16,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B15:160,YYAMHREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:161,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLSY HLA-B15:162,YYAMYRENMASTYENIAYLRYHDYTWAALAYLWY HLA-B15:163,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:164,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:165,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B15:166,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:167,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:168,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:169,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:17,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:170,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:171,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:172,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:173,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:174,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:175,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:176,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:177,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:178,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:179,YYAMYREISTNTYESNLYLRYDSYTWAVDAYLWY HLA-B15:18,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:180,YDSEYRNIFTNTDESNLYLRYDSYTWAEWAYLWY HLA-B15:183,YYTMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:184,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:185,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B15:186,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B15:187,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:188,YYAMYREISTNTYESNLYLRYNYYTWAVLAYTWY HLA-B15:189,YYAMYRNICTNTDESNLYLRYDSYTWAEWAYLWY HLA-B15:19,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B15:191,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:192,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:193,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:194,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:195,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B15:196,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:197,YYSEYRNICTNTYESNLYLSYDSYTWAELAYLWY HLA-B15:198,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:199,YYAMYREISTNTYESNLYLRYDSYTWAEDAYTWY HLA-B15:20,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B15:200,YYSEYRNICTNTYESNLYLRYDSYTWATLAYLWY HLA-B15:201,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:202,YYATYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:203,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:204,YHAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:205,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:206,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:207,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:208,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:21,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:210,YHSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:211,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:212,YHTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:213,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:214,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:215,YYAMYRNIYTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:216,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:217,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:219,YYAMYREISTNTYESNLYLRYGSYTWAELAYLWY HLA-B15:220,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:221,YYSEYRNICTNTYESNLYLRYDSYTWAERAYLWY HLA-B15:222,YYAMYRENMASTYENIAYWRYDSYTWAVLAYLWY HLA-B15:223,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:224,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B15:225,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:227,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:228,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:229,YYSEYRNICTNTYESNLYLRYNFYTWAELAYLWY HLA-B15:23,YYSEYRNICTNTYENIAYLRYDSYTWAELAYLWY HLA-B15:230,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:231,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:232,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:233,YYAMYREISTNTYESNLYLRYDDYTWAEWAYLWY HLA-B15:234,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:235,YYSEYREISTNTYESNLYLRYDSYTWAVLTYLWY HLA-B15:236,YYAMYREIFTNTDESNLYLRYDSYTWAEWAYLWY HLA-B15:237,YYAMYREISTNTYESNLYLRYDSYTWAVRAYLWY HLA-B15:238,YYSEYRNICTNTYESNLYLRYDSYTWAELAYEWY HLA-B15:239,YYATYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:24,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B15:240,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:241,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B15:242,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:243,YYSEYREICTNTYESNLYLRYNYYTWAELAYLWY HLA-B15:244,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:247,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:248,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B15:249,YYAMYREISTNTYESNLYLRYDSYTWAEWTYLWY HLA-B15:25,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:250,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:251,YYSMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:252,YYSEYRNICTNTYESNLYLRYNYYTWAELAYTWY HLA-B15:253,YYSEYREISTNTYESNLYLRYDFYTWAELAYLWY HLA-B15:254,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B15:255,YYSEYREIYAQTDESNLYLRYDSYTWAELAYLWY HLA-B15:256,YYAMYREISTNTYENTAYLRYDSYTWAEWAYLWY HLA-B15:257,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:259,YYAEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:260,YYAMYREISTNTYESNLHLRYDSYTWAEWAYLWY HLA-B15:261,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:263,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:264,YYAMYREISTNTYESNLYLGYDSYTWAEWAYLWY HLA-B15:265,YYAMYRNISTNTYESNLYIRYDSYTWAELTYTWY HLA-B15:266,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:267,YYAMYREISTNTNESNLYLRYDSYTWAEWAYLWY HLA-B15:268,YYAMYRENMASTYENIAYLRYDSYTWAELAYLWY HLA-B15:269,YYAMYREISTNTYESNLYLRYDDYTWAEWAYLWY HLA-B15:27,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B15:270,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B15:271,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:273,YYAMYRENMASTYENIAYLRYHDYTWAELAHLWY HLA-B15:274,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:275,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:276,YYAMYREISTNTYESNLYLRYDSYTRAEWAYLWY HLA-B15:277,YYAMYREISTNTYESKLYLRYDSYTWAEWAYLWY HLA-B15:278,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:279,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:28,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:280,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:281,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:282,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:283,YYAMYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B15:284,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:285,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:286,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:287,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B15:288,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:289,YYAMYREISTNTYVSNLYIRYDSYTWAELAYLWY HLA-B15:29,YYSEYRNIFTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:290,YYSEYRNICTNTYESNLYLTYDSYTWAELAYLWY HLA-B15:291,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:292,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:293,YYSEYRNICTNTYESNLYWRYDSYTWAELAYLWY HLA-B15:295,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:296,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:297,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:298,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGC HLA-B15:299,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B15:30,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B15:300,YYAMYREISTNTYESNLYLRYDSYTWAECAYLWY HLA-B15:301,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:303,YYAMYRNIYTNTYESNLYWTYNLYTWAEWAYLWY HLA-B15:305,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:306,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:307,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:308,YYATYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:309,YYAMYREISTNTYESNLYLRYDSNTWAEWAYLWY HLA-B15:31,YYAMYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:310,YYAMYREISTNTYESNLYWTYDSYTWAELAYLWY HLA-B15:311,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:312,YYSEYRNICTNTYESNLYLRYDYYTWAQLAYLWY HLA-B15:313,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:314,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:315,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:316,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:317,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:318,YYAMYREISTNTYVSNLYLRYDSYTWAEWAYLWY HLA-B15:319,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:32,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B15:320,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:322,YYAMYREISTNTYESNLYLRYDSYTWAEGAYLWY HLA-B15:323,YYSEYRNICTNTYESNLYLRYDYYTWAELAYTWH HLA-B15:324,YYAMYREISTNTYESNLYLSYNYYTWAEWAYLWY HLA-B15:325,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:326,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:327,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B15:328,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:329,YYSEYRNICTNTYESNLYLSYNYYTWAELAYLWY HLA-B15:33,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:330,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:331,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:332,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B15:333,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:334,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:335,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWH HLA-B15:336,YYTMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:337,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:338,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:339,YYAMYREISTNTYENTAYLRYHDYTWAELAYLWY HLA-B15:34,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:340,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:341,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:342,YYAMYREISTNTYESNLYLNYHDYTWAEWAYLWY HLA-B15:343,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:344,YHAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B15:345,YYTMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:346,YYAMYREISTNTYESNLYLRYDSYIWAEWAYLWY HLA-B15:347,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:348,YYAMYREISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B15:349,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:35,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B15:350,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:351,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:352,YYAMYREISTNTYESNLYLRYDSYSWAEWAYLWY HLA-B15:353,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:354,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:355,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:356,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:357,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:358,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:359,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:36,YYAMYREISTNTYENTAYIRYDSYTWAELAYLWY HLA-B15:360,YYAMYREISTNTYESNLYLSYDSYTWAELAYLWY HLA-B15:361,YYAMYRENMASTYENIAYLRYNYYTWAELAYLWY HLA-B15:362,YYAMYRENMASTYENIAYWRYDSYTWAELDYLWY HLA-B15:363,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:364,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWH HLA-B15:365,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:366,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:367,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:368,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B15:369,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:37,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWH HLA-B15:370,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:371,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:372,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:373,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:374,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:376,YYSTYREICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:378,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:379,YYSEYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B15:38,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWH HLA-B15:381,YHAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B15:382,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:383,YYAMYREISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B15:384,YYAMYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:385,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:386,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:387,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:388,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:389,YYSEYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B15:39,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:390,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:391,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:392,YYAMYRGISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:393,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B15:394,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:395,YYAMYREISTNTYESNLYLNYDSYTWAELAYLWY HLA-B15:396,YYAMYRENMASTYENIAYLRYHDYTWAVLAYLWY HLA-B15:397,YYSEYREISTNTDVSNLYLRYDSYTWAELAYLWY HLA-B15:398,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B15:399,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:40,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B15:401,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:402,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:403,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:404,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:405,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:406,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:407,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B15:408,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B15:409,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:410,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:411,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:412,YYAMYREISTNTYESNLYLRYDSYSWAEWAYLWY HLA-B15:413,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:414,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:415,YYAMYREISTNTYESNLYLRYDSYTWAVWAYLWY HLA-B15:416,YYAMYREISTNTYESNLYLRYESYTWAEWAYLWY HLA-B15:417,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:418,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B15:419,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:42,YYAMYREISTNTYESNLYWTYNLYTWAELAYTWY HLA-B15:420,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:421,YYAMYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B15:422,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:423,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:424,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:425,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:426,YHSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:427,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:428,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:429,YDSMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:43,YYAMYREISTNTYEDTLYLRYDSYTWAEWAYLWY HLA-B15:430,YYAMYREISTNTYESKLYLRYDSYTWAEWAYLWY HLA-B15:431,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:432,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:433,YYSEYRNICTNTYESNLDLRYDSYTWAELAYLWY HLA-B15:434,YYSGYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:435,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWH HLA-B15:436,YYSGYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:437,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:438,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:439,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:44,YYAMYRNICTNTYESNLYIRYDSYTWAELAYTWY HLA-B15:440,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:441,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:442,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B15:443,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:444,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:445,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:446,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:447,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:448,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:449,YYAMYREISTNTYESNLYLRYDSYTWAVLTYTWY HLA-B15:45,YYAMYREISTNTYESNLYLSYDYYTWAEWAYLWY HLA-B15:450,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:451,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:452,YYAMYRELSTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:453,YYAMYREISTNTYESNLYLRYNSYTWAEWAYLWY HLA-B15:455,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B15:456,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:457,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:458,CYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:459,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:46,YYAKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:460,YYAMYRNISTNTYESNLYIRYNFYTWAELAYLWY HLA-B15:461,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:462,YYAMYGENMASTYENIAYLRYHDYTWAELAYLWY HLA-B15:464,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:465,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:466,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:467,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:468,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:469,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:47,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B15:470,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:471,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:472,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:473,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:474,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:475,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:476,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:477,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:478,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:479,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:48,YYAMYREISTNTYESNLYLRYNYYTWAVLTYLWY HLA-B15:480,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:481,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:482,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:484,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:485,YYAMYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B15:486,YYAMYRNIYTNTYESNLYLRYNLYTWAEWAYLWY HLA-B15:488,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B15:489,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:49,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B15:490,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:491,YYAMYRNISTNTYESNLHIRYDSYTWAELAYLWY HLA-B15:492,YYAMYPEISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:493,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:494,YYAMYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B15:495,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:497,YYAMYREISTNTYESNLYLRYDSYTWAELAYTWY HLA-B15:498,YYSEYRNICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:50,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWY HLA-B15:51,YYSEYRNICTNTYESNLYLRYDSYTWAVDAYLWY HLA-B15:52,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B15:53,YYTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:54,YYSEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:55,YYAMYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B15:56,YYAMYREIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:57,YYAMYREISTNTYVNNLYLRYDSYTWAEWAYLWY HLA-B15:58,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B15:60,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:61,YYSEYREISTNTDESNLYLRYDSYTWAELAYLWY HLA-B15:62,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:63,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B15:64,YYSEYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:65,YYAMYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B15:66,YYAMYREICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:67,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B15:68,YYSEYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B15:69,YYSEYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B15:70,YYAMYREISTNTDESNLYLRYDSYTWAEWAYLWY HLA-B15:71,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:72,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:73,YYAMYREISTNTYESNLYLRYNLYTWAEWAYLWY HLA-B15:74,YYSEYREISINTYESNLYLRYDSYTWAELAYLWY HLA-B15:75,YYAMYREISTNTYESNLYLRYDSYTWAQWAYLWY HLA-B15:76,YYAMYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B15:77,YYAMYREISTNTYESNLYIRYDDYTWAEWAYLWY HLA-B15:78,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:80,YYSEYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B15:81,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:82,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:83,YYAMYREISTNTYESNLYWTYNYYTWAVDAYTWY HLA-B15:84,YYAMYREISTNTYESNLYLRFDSYTWAVRAYLWY HLA-B15:85,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B15:86,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B15:87,YYAMYREISTNTYESIAYLRYDSYTWAEWAYLWY HLA-B15:88,YYAMYRNISTNTYESNLYIRYDSYTWATLAYLWY HLA-B15:89,YYAMYRNISTNTYENTAYIRYDSYTWAELAYLWY HLA-B15:90,YYSEYRNICTNTYESNLYLRYDYYTWAELVYLWY HLA-B15:91,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLSY HLA-B15:92,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:93,YYSEYRNICTNTYESNLYLRYDSYTWAELAYTWY HLA-B15:95,YYAMYQENMASTYENIAYWRYDSYTWAELAYLWY HLA-B15:96,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:97,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B15:98,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B15:99,YYSEYRNICTNTYESNLYLRYDYYTWAERAYLWY HLA-B1801,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1802,YHSTYRNISTNTYESNLYLNYDSYTWAVLAYTWH HLA-B1803,YHSTYRNISTNTDESNLYLRYDSYTWAVLAYTWH HLA-B1804,YYATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1805,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1806,YHSTYRNISTNTYVSNLYLRYDSYTWAVLAYTWH HLA-B1807,YHSTYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1808,YHSTYRNISTNTYESNLYLRCDSYTWAVLAYTWH HLA-B1809,YHSTYRNISTNTYENTAYLRYDSYTWAVLAYTWH HLA-B1810,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B1811,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B1812,YHSTYREISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1813,YHSTYRNISTNTYESNLYLRYDSYTWAVRAYTWH HLA-B1814,YHSTYRNISTNTYESNLYLSYDSYTWAVLAYTWH HLA-B1815,YHSTYRNISTNTYESNLYLRYDSYTWAELAYTWH HLA-B1818,YHSTYRNISTNTYESNLYLRSDSYTWAVLAYTWH HLA-B1819,YHSTYRNISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B1820,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1821,YHSTYRNISTNTYESNLYLRYDSYTWAERAYEWY HLA-B1822,YHSTYRNISTNTYESNLYISYDSYTWAVLAYTWH HLA-B1823,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1824,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1825,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B1826,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B18:01,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:02,YHSTYRNISTNTYESNLYLNYDSYTWAVLAYTWH HLA-B18:03,YHSTYRNISTNTDESNLYLRYDSYTWAVLAYTWH HLA-B18:04,YYATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:05,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:06,YHSTYRNISTNTYVSNLYLRYDSYTWAVLAYTWH HLA-B18:07,YHSTYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:08,YHSTYRNISTNTYESNLYLRCDSYTWAVLAYTWH HLA-B18:09,YHSTYRNISTNTYENTAYLRYDSYTWAVLAYTWH HLA-B18:10,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B18:100,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:101,YHSTYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B18:102,YHTTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:103,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:104,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:105,YHSTYRNISTNTYESNLYIRYDSYTWAVLAYTWH HLA-B18:106,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:107,YYTKYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:108,YHSTYRNISTNTYEDNLYLRYDSYTWAVLAYTWH HLA-B18:109,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:11,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B18:110,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B18:111,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:112,YHLTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:113,YHSTYRNISTNTYESNLYLRYDSYTWAVDAYTWH HLA-B18:114,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:115,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:116,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:117,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:118,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:119,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:12,YHSTYREISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:120,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:121,YHSTYRNISTNTYESNLYLRYDSYTWAVLDYTWH HLA-B18:122,YHSTYRNISTNTYESNLYLRYNFYTWAVLAYTWH HLA-B18:123,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:124,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:125,YYAEYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:126,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:127,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:128,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:129,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:13,YHSTYRNISTNTYESNLYLRYDSYTWAVRAYTWH HLA-B18:130,YHSTYRNISTNIYESNLYLRYDSYTWAVLAYTWH HLA-B18:131,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:132,YHSTYRNISTNTDEDNLYLRYDSYTWAVLAYTWH HLA-B18:133,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:134,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:135,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:136,YHSTYRNIFTNTYENIAYLRYDSYTWAVLAYTWH HLA-B18:137,YHSTYRNNSTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:139,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:14,YHSTYRNISTNTYESNLYLSYDSYTWAVLAYTWH HLA-B18:140,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:141,YHSTYRNISTNTYESNLYLRHDSYTWAVLAYTWH HLA-B18:142,YHSTYRNISTNTDVNNLYLRYDSYTWAVLAYTWH HLA-B18:143,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:144,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:145,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:146,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:147,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:148,YHSTYRNISTNTYESNLYLRYDFYTWAVLAYTWH HLA-B18:149,YHSTYRNISTNTYESNLYIRYDSYTWAVLAYTWH HLA-B18:15,YHSTYRNISTNTYESNLYLRYDSYTWAELAYTWH HLA-B18:150,YHSTYRNISTNTYESNLYIRFDSYTWAVLAYTWH HLA-B18:151,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:152,YHSTYRNISTNTDESNLYLRYDSYTWAELAYTWH HLA-B18:153,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:155,YHSTYRNISTSTYESNLYLRYDSYTWAVLAYTWH HLA-B18:156,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:157,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:158,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:159,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:160,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:161,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:18,YHSTYRNISTNTYESNLYLRSDSYTWAVLAYTWH HLA-B18:19,YHSTYRNISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B18:20,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:21,YHSTYRNISTNTYESNLYLRYDSYTWAERAYEWY HLA-B18:22,YHSTYRNISTNTYESNLYISYDSYTWAVLAYTWH HLA-B18:24,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:25,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:26,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B18:27,YHSTYRNISTNTYESNLYLMFDSYTWAVLAYTWH HLA-B18:28,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:29,YHATYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:30,YHSTYRNISTNTYESNLYLRYDSYTWAERAYTWH HLA-B18:31,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:32,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:33,YHSTYRNICTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:34,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:35,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B18:36,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B18:37,YHSEYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:38,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:39,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:40,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:41,YHSTYRNISTNTYESNLYLRYESYTWAVLAYTWH HLA-B18:42,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:43,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:44,YHSTYRNISTNTYESNLYLWYDSYTWAVLAYTWH HLA-B18:45,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:46,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:47,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:48,YHSKYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:49,YHSTYRNISTNTYENNLYLRYDSYTWAVLAYTWH HLA-B18:50,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWH HLA-B18:51,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:52,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:53,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:54,YHSTYRNISTNTYEDTLYLRYDSYTWAVLAYTWH HLA-B18:55,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:56,YHSTYRNISTNTYESNLYLRYDSYTWAVDAYLSY HLA-B18:57,YHSTYRNISTNTYESNLYLRYDSYTWAELAYLWH HLA-B18:58,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B18:59,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:60,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:61,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B18:62,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:63,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:64,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:65,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:66,YHSMYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:67,YHSTYRNISTNTYESIAYLRYDSYTWAVLAYTWH HLA-B18:68,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:69,YHSTYRNISTNTYESNLYIRYDSYTWAVLAYTWH HLA-B18:70,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:71,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:72,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:73,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:75,YHSTYRNISTNTYESNLYLRYDSYAWAVLAYTWH HLA-B18:76,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:77,YHSTYPNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:78,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:79,YHSTYRNIFTNTYENNLYLRYDSYTWAVLAYTWH HLA-B18:80,YHTTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:81,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:82,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:83,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:84,YHSTYRNISTNTYESNLCLRYDSYTWAVLAYTWH HLA-B18:85,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:86,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYMWH HLA-B18:87,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:88,YHSTYRNISTNTYESNLYLRYDSYTLAVLAYTWH HLA-B18:89,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:90,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:91,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:92,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:93,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:95,YHSTYRNISTNTYESNLHLRYDSYTWAVLAYTWH HLA-B18:96,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:97,YHSTYRNISTNTYESNLYLRYNSYTWAVLAYTWH HLA-B18:98,YHATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B18:99,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B2701,YHTEYREICAKTYENTAYLNYHDYTWAVLAYEWY HLA-B2702,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B2703,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B2704,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B2705,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B2706,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B2707,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B2708,YHTEYREICAKTDESNLYLNYHDYTWAVLAYEWY HLA-B2709,YHTEYREICAKTDEDTLYLNYHHYTWAVLAYEWY HLA-B2710,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B2711,YHTEYREICAKTDESTLYLSYNYYTWAVLAYEWY HLA-B2712,YHTEYREICTNTDESNLYLNYHDYTWAVLAYEWY HLA-B2713,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B2714,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B2715,YHTEYREICAKTDESTLYLNYHDYTWAELAYTWY HLA-B2716,YHTEYREICTNTDEDTLYLNYHDYTWAVLAYEWY HLA-B2717,YHTEFREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B2718,YHTEYREISTNTYESNLYLNYHDYTWAELAYEWY HLA-B2719,YHTEYREICAKTDEDTLYIRYHDYTWAVLAYEWY HLA-B2720,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B2721,YHTEYREICAKTDESTLYLRYDYYTWAELAYEWY HLA-B2723,YHTEYRNIFTNTYESTLYLNYHDYTWAVLAYEWY HLA-B2724,YHTEYREICAKTDESTLYLSYNYYSWAELAYEWY HLA-B2725,YHTEYREICAKTDESTLYLNYHDYTWAEWAYLWY HLA-B2726,YHTEYREICAQTDESNLYLNYHDYTWAVLAYEWY HLA-B2727,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYEWY HLA-B2728,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWH HLA-B2729,YHTEYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B2730,YHTEYREICAKTDENIAYIRYHDYTWAVLAYEWY HLA-B2731,YHTEYREICAQTDESTLYLNYHDYTWAVLAYEWY HLA-B2732,YHTEYREICAKTDEDTLYLSYHDYTWAVLAYEWY HLA-B2733,YHTEYREICAKTDESNLYLSYNYYTWAVLAYEWY HLA-B2734,YHTEYREICAKTDEDTLYLSYDYYTWAVLAYEWY HLA-B2735,YHTEYREICAKTDEDTLYLNYNFYTWAVLAYEWY HLA-B2736,YHTEYREICAKTDESTLYLNYHDYSLAVLAYEWY HLA-B2737,YYTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B2738,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B27:01,YHTEYREICAKTYENTAYLNYHDYTWAVLAYEWY HLA-B27:02,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:03,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:04,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:05,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:06,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B27:07,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B27:08,YHTEYREICAKTDESNLYLNYHDYTWAVLAYEWY HLA-B27:09,YHTEYREICAKTDEDTLYLNYHHYTWAVLAYEWY HLA-B27:10,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B27:100,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:101,YHTEYREICAQTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:102,YHTEYREICAKTDENIAYLNYNYYTWAVLAYEWY HLA-B27:103,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:104,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:105,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:106,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B27:107,YHTEYREICAKTDESTLYLNYDSYTWAELAYEWY HLA-B27:108,YHTEYREICAKTDESTLYLNYHDYTWAERAYEWY HLA-B27:109,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:11,YHTEYREICAKTDESTLYLSYNYYTWAVLAYEWY HLA-B27:110,YHTEYREICAKTDENTLYLNYHDYTWAVLAYEWY HLA-B27:111,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:112,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:113,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:114,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:115,YHTEYREICAKTDESTLYLNYHDYTWAEWAYEWY HLA-B27:116,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:117,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:118,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:119,YHTEYREICTNTYENIAYLNYHDYTWAVLAYEWY HLA-B27:12,YHTEYREICTNTDESNLYLNYHDYTWAVLAYEWY HLA-B27:120,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:121,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:122,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:123,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:124,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:125,YHTEYREICAKTDESTLYLRYNYYSLAVLAYEWY HLA-B27:126,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:127,YHTEYREICAKTDEDTLYIRYDDYTWAVDAYLSY HLA-B27:128,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:129,YHTEYREICANTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:13,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:130,YHTEYREICAKTDEDTLYWTYNYYTWAVLAYEWY HLA-B27:131,YHTEYREICAKTYESTLYLNYHDYTWAVLAYEWY HLA-B27:132,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:133,YHTEYREICAKTDEDTLYLNYHDYTWAGLAYEWY HLA-B27:134,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:135,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:136,YHTEYREICAKTDEDTLYLNYDYYTWAVLAYEWY HLA-B27:137,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:138,YHTEYREICAKTDESTLYLSYDYYTWAELAYEWY HLA-B27:139,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B27:14,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B27:140,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:141,YHTEYREICAKTDEDTLYLNSHDYTWAVLAYEWY HLA-B27:142,YHTEYREICAKTDENTAYLNYHDYTWAVLAYEWY HLA-B27:143,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:144,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:145,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:146,NHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:147,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:148,YHTEYPEICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:149,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:15,YHTEYREICAKTDESTLYLNYHDYTWAELAYTWY HLA-B27:150,YHTEYREICAKTDEDTLYINYHDYTWAVLAYEWY HLA-B27:151,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:152,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:153,YHTEYREICTNTDESNLYWTYNYYTWAELAYLWH HLA-B27:154,YHTEYREICAKTDESTLYLNYDYYTWAVLAYEWY HLA-B27:155,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:156,YHTEYREICAKTDEDTLCLNYHDYTWAVLAYEWY HLA-B27:157,YHTEYRNIYAQTDENIAYLNYHDYTWAVLAYEWY HLA-B27:158,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:159,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:16,YHTEYREICTNTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:160,YHTEYREICAKTDEDTLYLNYHDYTWAVLTYEWY HLA-B27:161,YHTEYREICAKTDEDTLYLNYHDYTWAVWAYEWY HLA-B27:162,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:163,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:164,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B27:165,YHTEYREICAKTDESNLYLNYHDYTWAELAYEWY HLA-B27:166,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:167,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:168,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B27:169,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:17,YHTEFREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:170,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:171,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:172,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:173,YHTEYREICAKTDESTLYLNYHDYSWAELAYEWY HLA-B27:174,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:175,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:177,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:178,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:179,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:18,YHTEYREISTNTYESNLYLNYHDYTWAELAYEWY HLA-B27:180,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B27:181,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:182,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:183,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:184,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:185,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:186,YHTEYREICAKTDEDTLYLNYQDYTWAVLAYEWY HLA-B27:187,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B27:188,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:19,YHTEYREICAKTDEDTLYIRYHDYTWAVLAYEWY HLA-B27:20,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B27:21,YHTEYREICAKTDESTLYLRYDYYTWAELAYEWY HLA-B27:23,YHTEYRNIFTNTYESTLYLNYHDYTWAVLAYEWY HLA-B27:24,YHTEYREICAKTDESTLYLSYNYYSWAELAYEWY HLA-B27:25,YHTEYREICAKTDESTLYLNYHDYTWAEWAYLWY HLA-B27:26,YHTEYREICAQTDESNLYLNYHDYTWAVLAYEWY HLA-B27:27,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYEWY HLA-B27:28,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWH HLA-B27:29,YHTEYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B27:30,YHTEYREICAKTDENIAYIRYHDYTWAVLAYEWY HLA-B27:31,YHTEYREICAQTDESTLYLNYHDYTWAVLAYEWY HLA-B27:32,YHTEYREICAKTDEDTLYLSYHDYTWAVLAYEWY HLA-B27:33,YHTEYREICAKTDESNLYLSYNYYTWAVLAYEWY HLA-B27:34,YHTEYREICAKTDEDTLYLSYDYYTWAVLAYEWY HLA-B27:35,YHTEYREICAKTDEDTLYLNYNFYTWAVLAYEWY HLA-B27:36,YHTEYREICAKTDESTLYLNYHDYSLAVLAYEWY HLA-B27:37,YYTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:38,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B27:39,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:40,YHTEYREICAKTDESNLYLNYHDYTWAELAYEWY HLA-B27:41,YHTEYREICAKTDEDTLYLNYDSYTWAVLAYEWY HLA-B27:42,YHTEYREICAKTDEDNLYLNYHDYTWAVLAYEWY HLA-B27:43,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B27:44,YHTEYREICAKTYESNLYLNYHDYTWAVLAYEWY HLA-B27:45,YHTEYREICAKTDEDTLYLNYHDYTWAVRAYEWY HLA-B27:46,YHTEYREICAKTDEDTLYLNYHYYTWAVLAYEWY HLA-B27:47,YHTEYREICAKTDEDTLYLNYHDYTWAVDAYLSY HLA-B27:48,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:49,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:50,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYESY HLA-B27:51,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:52,YHTTYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:53,YHTEYREICAKTDEDIAYLNYHDYTWAVLAYEWY HLA-B27:54,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B27:55,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:56,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:57,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:58,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:60,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:61,YHTEYREICAKTDESTLYLNYHDYTWAVLAYEWY HLA-B27:62,YHTEYREICAKTDENIAYLNYHDYTWAVLAYTWH HLA-B27:63,YHTEYREICAKTDESTLYLNYHDYTWAELAYLWY HLA-B27:67,YHTMYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:68,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:69,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:70,YHTEYREICAKTDEDTLYLRYHDYTWAVLAYEWY HLA-B27:71,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWY HLA-B27:72,YHTEYREICAKTDEDTLYLNNHDYTWAVLAYEWY HLA-B27:73,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:74,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:75,YHSEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:76,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYLWY HLA-B27:77,YHTEYREICANTDENIAYLNYHDYTWAVLAYEWY HLA-B27:78,YHTEYREICAKTDEDTLYLNYHSYTWAVLAYEWY HLA-B27:79,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:80,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:81,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B27:82,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:83,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:84,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:85,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:86,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B27:87,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:88,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:89,YHTEYREICAKTDENNLYLNYHDYTWAVLAYEWY HLA-B27:90,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:91,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B27:92,YHTEYRNICTNTYEDTLYLNYHDYTWAELAYEWY HLA-B27:93,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:95,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B27:96,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:97,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:98,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B27:99,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B3501,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3502,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B3503,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3504,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B3505,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B3506,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B3507,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3508,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B3509,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B3510,YYATYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3511,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWY HLA-B3512,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B3513,YYATYREIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3514,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYLWY HLA-B3515,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYEWY HLA-B3516,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B3517,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B3518,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B3519,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3520,YYATYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3521,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWH HLA-B3522,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYLWY HLA-B3523,YYATYRNIFTNTYESNLYIRFDSYTWAVLAYLWY HLA-B3524,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B3525,YYSEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3526,YYAEYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3527,YYATYRNIFTNTYENNLYIRYDSYTWAVLAYLWY HLA-B3528,YYATYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3529,YYATYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B3530,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B3531,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B3532,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B3533,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYEWY HLA-B3534,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B3535,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYTWY HLA-B3536,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3537,YYATYRNIFTNTYESNLYWTYDSYTWAVLAYLWY HLA-B3538,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLWY HLA-B3539,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B3540,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3541,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B3542,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3543,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B3544,YYATYRNIFTNTYESNLYLRYNYYTWAEWAYLWY HLA-B3545,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLSY HLA-B3546,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3547,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3548,YYATYRNIFTNTYESNLYIRSDSYTWAVLAYLWY HLA-B3549,YYAEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3550,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3551,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B3552,YYATYRNIFTNTYECNLYIRYDSYTWAVLAYLWY HLA-B3554,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3555,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3556,YYATYRNIFTNTYENNLYIRYDFYTWAVLAYLWY HLA-B3557,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3558,YYATYRNIFTNTYESNLYLSYDSYTWAELAYLWY HLA-B3559,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B3560,YYATYRNIFTNTYESNLYWTYNLYTWAVLAYTWY HLA-B3561,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B3562,YYATYRNIFTNTYESNLYIRYDSYTWAVWAYLWY HLA-B3563,YHTKYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3564,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B3565,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3566,YYATYRNIFTNTYESNLYLSYDSYTWAVRAYEWY HLA-B3567,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B3568,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B3569,YYATYREIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B3570,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B3571,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLSY HLA-B3572,YYATYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B3573,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B3574,YYATYRNIFTNTYVSNLYIRYDFYTWAVLAYLWY HLA-B3575,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B3576,YYATYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B3577,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:01,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:02,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:03,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:04,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:05,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:06,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B35:07,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:08,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:09,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:10,YYATYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:100,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:101,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:102,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:103,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:104,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:105,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:106,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:107,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:108,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:109,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWH HLA-B35:11,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWY HLA-B35:110,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:111,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:112,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:113,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:114,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:115,YYATYRNIFTNTYESNLYIRYDSYTWAVDAYLWY HLA-B35:116,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:117,YYATYRNIFTNTYESNLYLSYDSYTWAEWAYLWY HLA-B35:118,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:119,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:12,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:120,YYATYRNIFTNTYESNLYIRHDSYTWAVLAYLWY HLA-B35:121,YYATYRNIFTNTYESNLYIRYHSYTWAVLAYLWY HLA-B35:122,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:123,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:124,YYSTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:125,YYSTYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:126,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:127,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:128,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:13,YYATYREIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:131,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:132,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:133,YYATYRNIFTNTYESNLYIRYVSYTWAVLAYLWY HLA-B35:135,YYATYRNICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:136,YYATYRNIFTNTDESNLYIRYDFYTWAVLAYLWY HLA-B35:137,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:138,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:139,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:14,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYLWY HLA-B35:140,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:141,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:142,YYSTYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:143,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:144,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:146,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:147,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:148,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:149,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:15,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYEWY HLA-B35:150,YYTTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:151,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B35:152,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:153,YYATYRNIFTNTCESNLYIRYDFYTWAVLAYLWY HLA-B35:154,YYAKYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:155,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:156,YYATYRNIFTNTYESNLYIRYDFYTWAVRAYLWY HLA-B35:157,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYTWH HLA-B35:158,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:159,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:16,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:160,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:161,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:162,YHSTYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:163,YYATYRNIFTNTYESNLYIRYDFYTWAVWAYLWY HLA-B35:164,YYATYRNIFTNTYESNLYISYNSYTWAVRAYLWY HLA-B35:166,YYATYRNIFTNTYESNLYIRYDSYTWAVVAYLWY HLA-B35:167,YYATYRNIFTNTYESNLYIRYDFYTWAELAYLWY HLA-B35:168,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:169,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLSY HLA-B35:17,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:170,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:171,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:172,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B35:174,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:175,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:176,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:177,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:178,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:179,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:18,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B35:180,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:181,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:182,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:183,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:184,YYTTYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:185,YYATYRNIFTNTYENNLYLRYDSYTWAEWAYLWY HLA-B35:186,YYATYREKYRQTDVSNLYIRYDSYTWAVLAYLWY HLA-B35:187,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:188,YYATYRNIFTNTYESNLYIRYDSYTWAELAYTWH HLA-B35:189,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:19,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:190,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYTWH HLA-B35:191,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:192,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:193,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:194,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:195,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:196,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:197,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:198,YYAEYRNIFTNTDESNLYIRYDFYTWAVLAYLWY HLA-B35:199,YYATYRNIFTNTYESNLYLSYDYYTWAVLAYLWY HLA-B35:20,YYATYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:200,YYATYRNIFTDTYESNLYIRYDSYTWAVLAYLWY HLA-B35:201,YYTTYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:202,YYATYQNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:203,YYATYRNIFTNTYEDNLYIRYDSYTWAVLAYLWY HLA-B35:204,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:205,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:206,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:207,YYAMYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:208,YYATYRNIFTNTYESNLYIVYDSYTWAVLAYLWY HLA-B35:209,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:21,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWH HLA-B35:210,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:211,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:212,YYATYRNIVTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:213,YYATYRNIFTNTYESNLYIRYDFYTWAEWAYTWY HLA-B35:214,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:215,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:217,YHTKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:218,YDATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:219,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:22,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYLWY HLA-B35:220,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:221,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:222,YYATYRNIFTNTYESKLYIRYDSYTWAVLAYLWY HLA-B35:223,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:224,YYATYRNIFTNSYESNLYIRYDSYTWAVLAYLWY HLA-B35:225,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:226,YYATYGEISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:227,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:228,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:229,YYATYRNIFTQTDESNLYIRYDSYTWAVRAYLWY HLA-B35:23,YYATYRNIFTNTYESNLYIRFDSYTWAVLAYLWY HLA-B35:230,YYATYRNIFTNTYESNLYIRYNYYSLAVLAYEWY HLA-B35:231,YHATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:232,YYATYRNIFTNTYESNLYLSYDSYTWAERAYLWY HLA-B35:233,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWH HLA-B35:234,YYATYRNIFTNTYESNLYLRYHDYTWAVLAYLWY HLA-B35:235,YYATYRNIFTNTYESNLYWTYDFYTWAVLAYLWY HLA-B35:236,YYATYRNIFTNTYESNLYIRYDFYTWAVLTYLWY HLA-B35:237,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:238,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:239,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:24,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B35:240,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:241,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:242,YYATYRNIFTNTYESNLYISYDFYTWAVLAYLWY HLA-B35:243,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:244,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:245,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:246,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:247,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:248,YYATYRNIFTNTYESNQYIRYDSYTWAVLAYLWY HLA-B35:249,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:25,YYSEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:250,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:251,YYATYRNIFTNTYESNLYLRYNYYTWAVLAYLWY HLA-B35:252,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:253,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:254,YYAEYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B35:255,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B35:256,YDATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:257,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:258,YYATYRNIFTNTYESNLYIRFNYYTWAVLAYLWY HLA-B35:259,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYLWY HLA-B35:26,YYAEYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:260,YYATYRNIFTNTYESNLYIRYDSYTWAVDAYLWY HLA-B35:261,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B35:262,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYTWY HLA-B35:263,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:264,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:265,YYATYRNIFTNTYESNLYWTYDSYTWAEWAYLWY HLA-B35:266,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:267,YYSTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:268,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:269,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:27,YYATYRNIFTNTYENNLYIRYDSYTWAVLAYLWY HLA-B35:270,YYATYREIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:271,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:272,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:273,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B35:274,YYAKYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:275,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:276,YYATYRNIFTNTYESNLYWTYNFYTWAVLTYTWY HLA-B35:277,YYATYRNIFTNTYESNLYIRYDSYTWAELAYTWY HLA-B35:278,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:279,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:28,YYATYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:280,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:281,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:282,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:283,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:284,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:285,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:286,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:287,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B35:288,YYATYRNIFTNTYESNLYMRYDSYTWAVLAYLWY HLA-B35:289,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:29,YYATYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B35:290,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:291,YYATYRNIFTNTYESNLYIRYDLYTWAVLAYLWY HLA-B35:292,YYATYRNIFTNTYESNLYLRYNYYTWAVLAYLWY HLA-B35:293,YYATYRNIFTNTYESNMFIRYDSYTWAVLAYLWY HLA-B35:294,YYATYRNICTNTDESNLYIRYDSYTWAVLAYLWY HLA-B35:295,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:296,YYATYRNISTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:297,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:298,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:299,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:30,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:300,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:301,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:302,YYATYRNIFTNTYESNLHIRYDSYTWAVLAYLWY HLA-B35:303,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:304,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:305,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:306,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:307,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:308,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:309,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLSY HLA-B35:31,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B35:310,YYATYRNIFTNTYEGNLYIRYDSYTWAVLAYLWY HLA-B35:311,YYAMYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:312,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:313,YYATYRNIFTNTYKSNLYIRYDSYTWAVLAYLWY HLA-B35:314,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:315,YYATYRNIFTNTYESNLNIRYDSYTWAVLAYLWY HLA-B35:316,YYATYRNIFTNTDESNLYIRYNYYTWAVLAYLWY HLA-B35:317,YHTKYREISTNTYESNLYIVYDSYTWAVLAYLWY HLA-B35:318,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B35:319,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:32,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B35:320,YYSTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:321,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:322,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:323,YHATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:324,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:325,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:326,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:327,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:328,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:329,YYATYRNIFTNTYESTLYIRYDFYTWAVLAYLWY HLA-B35:33,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYEWY HLA-B35:330,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:331,YYATYRNIFTNTYESNLYIRYDSYSWAVLAYLWY HLA-B35:332,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:334,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:335,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:336,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:337,YYATYRNIFTNTYESNLYIRYDSYTWAERAYLWY HLA-B35:338,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:339,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:34,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B35:340,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:341,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYEWY HLA-B35:342,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:343,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYTWY HLA-B35:344,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:345,YYATYRNIFTNTYESNLYIRYDPYTWAVLAYLWY HLA-B35:346,YYATYRNIFTNTYESNLYISYDSYTWAVRAYLWY HLA-B35:347,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:348,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:349,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:35,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYTWY HLA-B35:350,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYTWY HLA-B35:351,YYATYRNIFTNTYQSNLYIRYDSYTWAVLAYLWY HLA-B35:352,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:353,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:354,YYATYRNIFTNTYESNLYIRYDFYTWAVLSYLWY HLA-B35:355,YYATYRNIFTNTYEDNLYIRYDFYTWAVLAYLWY HLA-B35:356,YYATYRNIFTNTYVSNLYIRYDSYTWAVRAYLWY HLA-B35:357,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:358,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:359,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:36,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:360,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:361,YYAEYREISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:362,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:363,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:364,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:365,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:366,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:367,YYATYRNIFTNTYESNLYLRYNYYTWAVLAYLWY HLA-B35:368,YYATYRNIFAQTYESNLYLSYDSYTWAVLAYLWY HLA-B35:369,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:37,YYATYRNIFTNTYESNLYWTYDSYTWAVLAYLWY HLA-B35:370,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:371,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:372,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:373,YYATYPNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:374,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:375,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:376,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:377,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:378,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:379,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:38,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLWY HLA-B35:380,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:382,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:383,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:384,YYATYRNIFTNTYESNLYIRYNYYTWAELAYLWY HLA-B35:385,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:386,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:387,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:388,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:389,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:39,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B35:391,YYATYRNIFTNTYESNLHIRYNYYTWAVLAYLWY HLA-B35:392,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:393,HYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:394,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B35:395,YYATYRNIFTNTYESNLYIRFDFYTWAVLAYLWY HLA-B35:396,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:397,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:398,YYATYRNIFTNTYESNLYIRYDFHTWAVLAYLWY HLA-B35:399,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:400,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:401,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:402,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:403,YYATYRNIFTNTCESNLYIRYNYYTWAVLAYLWY HLA-B35:404,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:405,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:406,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:407,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B35:408,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:409,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:41,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B35:410,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:411,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:412,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:413,YYATYRNIFTNTYESNLYIRYNFYTWAEWAYLWY HLA-B35:42,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:43,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:44,YYATYRNIFTNTYESNLYLRYNYYTWAEWAYLWY HLA-B35:45,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLSY HLA-B35:46,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:47,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:48,YYATYRNIFTNTYESNLYIRSDSYTWAVLAYLWY HLA-B35:49,YYAEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:50,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:51,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:52,YYATYRNIFTNTYECNLYIRYDSYTWAVLAYLWY HLA-B35:54,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:55,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:56,YYATYRNIFTNTYENNLYIRYDFYTWAVLAYLWY HLA-B35:57,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:58,YYATYRNIFTNTYESNLYLSYDSYTWAELAYLWY HLA-B35:59,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B35:60,YYATYRNIFTNTYESNLYWTYNLYTWAVLAYTWY HLA-B35:61,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:62,YYATYRNIFTNTYESNLYIRYDSYTWAVWAYLWY HLA-B35:63,YHTKYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:64,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:66,YYATYRNIFTNTYESNLYLSYDSYTWAVRAYEWY HLA-B35:67,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:68,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B35:69,YYATYREIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B35:70,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:71,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLSY HLA-B35:72,YYATYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:74,YYATYRNIFTNTYVSNLYIRYDFYTWAVLAYLWY HLA-B35:75,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B35:76,YYATYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B35:77,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:78,YYATYRNIFANTYESNLYIRYDSYTWAVLAYLWY HLA-B35:79,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B35:80,YYATYREIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B35:81,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWH HLA-B35:82,YYATYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:83,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:84,YHTTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:85,YYATYRNICTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:86,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYEWY HLA-B35:87,YYATYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B35:88,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B35:89,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:90,YYTTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:91,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:92,YYATYRNIFTNAYESNLYIRYDSYTWAVLAYLWY HLA-B35:93,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYTWY HLA-B35:94,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B35:95,YYATYRNISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B35:96,YYATYRNIFTNTYESNLYIRYDFYTWAELAYTWH HLA-B35:97,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B35:98,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B35:99,YYATYRNIFTNTYESNLYLRYDSYTWAERAYLWY HLA-B3701,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B3702,YHSTYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B3704,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWH HLA-B3705,YHSTYREISTNTYEDNLYIRSNFYTWAVDAYTWY HLA-B3706,YHSKYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B3707,YHSTYREISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B3708,YHSTYRNISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B3709,YHSTYREISTNTYEDTLYLSYDYYTWAVDAYTWY HLA-B3710,YHSTYREISTNTYENTAYIRSNFYTWAVDAYTWY HLA-B3711,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B3712,YHSTYREISTNTYEDTLYIRYNYYTWAVDAYTWY HLA-B3713,YHSTYREISTNTYEDTLYIRSNFYTWAEDAYTWY HLA-B37:01,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:02,YHSTYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B37:04,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWH HLA-B37:05,YHSTYREISTNTYEDNLYIRSNFYTWAVDAYTWY HLA-B37:06,YHSKYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:07,YHSTYREISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B37:08,YHSTYRNISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:09,YHSTYREISTNTYEDTLYLSYDYYTWAVDAYTWY HLA-B37:10,YHSTYREISTNTYENTAYIRSNFYTWAVDAYTWY HLA-B37:11,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B37:12,YHSTYREISTNTYEDTLYIRYNYYTWAVDAYTWY HLA-B37:13,YHSTYREISTNTYEDTLYIRSNFYTWAEDAYTWY HLA-B37:14,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B37:15,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:17,YHSTYREISTNTYEDTLYIRSNFYTWTVDAYTWY HLA-B37:18,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:19,YHSTYREISTNTYEDTLYIRYNFYTWAVDAYTWY HLA-B37:20,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:21,YHSTYREIFTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:22,YHATYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:23,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:24,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:25,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:26,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:27,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:28,YHSEYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:29,YHSTYREISTNTYESTLYIRSNFYTWAVDAYTWY HLA-B37:31,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:32,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:34,YHSTYREISTNTYENIAYIRSNFYTWAVDAYTWY HLA-B37:35,YHSTYREISTNTYEDTLYIRSDSYTWAVDAYTWY HLA-B37:36,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:37,YHSTYREISTNTDESNLYIRSNFYTWAVDAYTWY HLA-B37:38,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:39,YHSTYREISTNTYEDTLYIRSNFYTWAVRAYLWY HLA-B37:40,YHSTYREISTNTYEDTLYIRSNFYTWAVLTYTWY HLA-B37:41,YHLTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:43,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:44,YHSTYREISTNTYEDTLYLRYNFYTWAVDAYTWY HLA-B37:45,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:46,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:47,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:48,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYLWY HLA-B37:49,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:50,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:51,YHSTYREISTNTYEDTLYLRSNFYTWAVDAYTWY HLA-B37:52,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:53,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:54,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:55,YYSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:56,YHSTYREISTNTYEDTLYIRYDSYTWAVDAYTWY HLA-B37:57,YHSTYREICTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:58,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:59,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:60,YHSTYREICAKTDEDTLYIRSNFYTWAVDAYTWY HLA-B37:61,YHSMYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:62,YDSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:63,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:64,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:65,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:66,YHSTYREISTNTYEDTLYIRSNFYTWAVWAYTWY HLA-B37:67,YHSTYRNIFTNTYESNLYIRSNFYTWAVDAYTWY HLA-B37:68,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:69,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:70,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:71,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:72,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:73,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:74,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:75,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:76,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:77,YHSTYREISTNTYEDTLYIRSDFYTWAVDAYTWY HLA-B37:78,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B37:80,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B3801,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3802,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B3803,YYSEYREISTNTDESTAYLRYNFYTWAVLTYTWY HLA-B3804,YYSEYREICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B3805,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3806,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3807,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3808,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYMWY HLA-B3809,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3810,YYSEYRNICTNTYENIAYLRYNFYTWAELAYTWY HLA-B3811,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3812,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3813,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B3814,YYSEYRNICTNTDENIAYLRYNFYTWAVLTYTWY HLA-B3815,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B3816,YYTEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:01,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:02,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:03,YYSEYREISTNTDESTAYLRYNFYTWAVLTYTWY HLA-B38:04,YYSEYREICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:05,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:06,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:07,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:08,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYMWY HLA-B38:09,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:10,YYSEYRNICTNTYENIAYLRYNFYTWAELAYTWY HLA-B38:11,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:12,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:13,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:14,YYSEYRNICTNTDENIAYLRYNFYTWAVLTYTWY HLA-B38:15,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:16,YYTEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:17,YYSEYRNICTNTYEDTLYLRYNFYTWAVLTYTWY HLA-B38:18,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:19,YYSEYRNICTNTYENIAYLSYNFYTWAVLTYTWY HLA-B38:20,YYSEYRNICTNTYENIAYIRYNFYTWAVLTYTWY HLA-B38:21,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:22,YYSEYRNICTNTYENIAYLNYNFYTWAVLTYKWY HLA-B38:23,YYSEYRNICTNTYENTAYFRYNFYTWAVLTYTWY HLA-B38:24,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:25,YYSEYREICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:26,YYSEYRNIYAQTDENIAYLRYNFYTWAVLTYTWY HLA-B38:27,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:28,YYAEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:29,YYSEYRNICTNTYENTAYLRYDFYTWAVLTYTWY HLA-B38:30,YYSEYRNICTNTYENIAYLRYNFYTWAVDAYLWY HLA-B38:31,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:32,YYSEYRNICTNTYENIAYLRYNFYTWAELTYTWY HLA-B38:33,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:35,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:36,YYSEYRNICTNTYENIAYLRYNFYTWAVLAYTWY HLA-B38:37,YYSEYRNICTNTYENIAYLRYNFYTWAVLTHTWY HLA-B38:38,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:39,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:40,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:41,YYSEYRNICTNTDESIAYLRYNFYTWAVLTYTWY HLA-B38:42,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:43,YYSEYRNICTNTYENTAYLRYNFYTLAVLTYTWY HLA-B38:44,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:45,YYSEYRNICTNTYENTAYLRYNFYTWAVLIYTWY HLA-B38:46,YYTEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:47,YYSEYRNICTNTYESTAYLRYNFYTWAVLTYTWY HLA-B38:48,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:49,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:50,YYSEYRNICTNTYENTAYLRYNFYTWAVLAYTWY HLA-B38:51,YYSEYWNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:52,YYSEYRNICTNTYENIAYLRYDSYTWAVLAYTWY HLA-B38:53,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:54,YYSEYRNICTDTYENIAYLRYNFYTWAVLTYTWY HLA-B38:56,YYSEYRKICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:57,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:58,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:59,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:60,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:61,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:62,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:63,YYSEYRNICTNTYENIAYLRYNFYSLAVLAYEWY HLA-B38:64,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:65,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYLWY HLA-B38:66,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:67,YYSEYRNICTNTYESIAYLRYNFYTWAVLTYTWY HLA-B38:69,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:70,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:71,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:72,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:73,YYSEYRNICTNTYENIAYLRYNYYTWAVLTYTWY HLA-B38:74,YYSEYRNIFTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:75,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:76,YYSEYRNICTNTYENTACLRYNFYTWAVLTYTWY HLA-B38:77,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:78,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:79,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B38:81,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B38:82,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B3901,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3902,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3903,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B3904,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3905,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B3906,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B3908,YYSEYREISTNTYESNLYLRYNFYTWAVRTYTWY HLA-B3909,YYSEYRNICTNTDESNLYLRSNFYTWAVLTYTWY HLA-B3910,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3912,YDSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3913,YYSEYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B3914,YYSEYRNICTNTDESNLYLSYNYYTWAVLTYTWY HLA-B3915,YYSEYRNICTNTDESNLYLRYDFYTWAVLTYTWY HLA-B3916,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3917,YYSEYRNIYTNTDESNLYLRYNLYTWAVLTYTWY HLA-B3918,YYSEYRNICTNTDESNLYLRYNFYTWAEWTYTWY HLA-B3919,YYSTYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3920,YYSEYRNIYTNTYENNLYLRYNFYTWAVLTYTWY HLA-B3922,YYSEYREICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3923,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3924,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B3926,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3927,YYSEYRNICTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B3928,YYSEYRNICTNTDESNLYLTYNFYTWAVLTYTWY HLA-B3929,YYSEYRNICTNTDESNLYLSYDYYTWAVLTYTWY HLA-B3930,YYSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B3931,YHSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3932,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWH HLA-B3933,YYSEYRNICTNTDESNLYWTYNFYTWAVRAYLWY HLA-B3934,YYSEYRNICTNTDESNLYWTYNFYTWAVLAYTWY HLA-B3935,YYSEYRNICTNTDESNLYLRYNFYTWAELTYTWY HLA-B3936,YYSEYRNICTNTDESNLYLRYNFYTWAEWAYTWY HLA-B3937,YYSEYRNICTNTYESNLYLSYNFYTWAVLTYTWY HLA-B3938,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3939,YYSEYRNISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3941,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B3942,YYSEYRNICTNTDESNLYIRYNFYTWAVLTYTWY HLA-B39:01,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:02,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:03,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B39:04,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:05,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B39:06,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:07,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B39:08,YYSEYREISTNTYESNLYLRYNFYTWAVRTYTWY HLA-B39:09,YYSEYRNICTNTDESNLYLRSNFYTWAVLTYTWY HLA-B39:10,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:100,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:101,YHSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:102,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYMWY HLA-B39:103,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:104,YYSEYRNICTNTDESILYLRYNFYTWAVLTYTWY HLA-B39:105,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:106,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:107,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWY HLA-B39:108,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:109,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:11,YYSEYRNICTNTYESNLYLRYNFYTWAVRTYTWY HLA-B39:110,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:111,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:112,YYSEYRNICTNTDESNLYLRSNFYTWAVLAYTWY HLA-B39:113,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B39:114,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:115,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:117,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:118,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B39:119,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:12,YDSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:120,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B39:121,YYSGYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:122,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:123,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:124,YYSEYRNICTNTDENNLYLRYNFYTWAVLTYTWY HLA-B39:125,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:126,YYSEYRNIYTNTDESNLYLRYNYYTWAVLTYTWY HLA-B39:127,YYSEYRNICTNTDESNLYWTSNFYTWAVLTYTWY HLA-B39:128,YHSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B39:129,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:13,YYSEYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B39:130,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:131,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:132,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:134,YYSEYRNICTNTDESNLYLRYNSYTWAVLTYTWY HLA-B39:135,YYAEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:136,YYSEYRNICTNTDESNLYLRYNFYTLAALAYTWY HLA-B39:137,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:138,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:14,YYSEYRNICTNTDESNLYLSYNYYTWAVLTYTWY HLA-B39:140,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:141,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:143,YYSEYRNIYTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B39:15,YYSEYRNICTNTDESNLYLRYDFYTWAVLTYTWY HLA-B39:16,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:17,YYSEYRNIYTNTDESNLYLRYNLYTWAVLTYTWY HLA-B39:18,YYSEYRNICTNTDESNLYLRYNFYTWAEWTYTWY HLA-B39:19,YYSTYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:20,YYSEYRNIYTNTYENNLYLRYNFYTWAVLTYTWY HLA-B39:22,YYSEYREICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:23,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:24,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B39:26,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:27,YYSEYRNICTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B39:28,YYSEYRNICTNTDESNLYLTYNFYTWAVLTYTWY HLA-B39:29,YYSEYRNICTNTDESNLYLSYDYYTWAVLTYTWY HLA-B39:30,YYSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B39:31,YHSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:32,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWH HLA-B39:33,YYSEYRNICTNTDESNLYWTYNFYTWAVRAYLWY HLA-B39:34,YYSEYRNICTNTDESNLYWTYNFYTWAVLAYTWY HLA-B39:35,YYSEYRNICTNTDESNLYLRYNFYTWAELTYTWY HLA-B39:36,YYSEYRNICTNTDESNLYLRYNFYTWAEWAYTWY HLA-B39:37,YYSEYRNICTNTYESNLYLSYNFYTWAVLTYTWY HLA-B39:39,YYSEYRNISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:41,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:42,YYSEYRNICTNTDESNLYIRYNFYTWAVLTYTWY HLA-B39:43,YYSEYRNICTNTDESNLYLRYDSYTWAVLAYTWH HLA-B39:44,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:45,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:46,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:47,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYEWY HLA-B39:48,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWH HLA-B39:49,YYSEYREISTNTYESNLYLRYDFYTWAVLTYTWY HLA-B39:50,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYEWY HLA-B39:51,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:52,YYSEYRNICTDTDESNLYLRYNFYTWAVLTYTWY HLA-B39:53,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:54,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:55,YYSEYRNICTNTYESNLYLRYDFYTWAVLTYTWY HLA-B39:56,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B39:57,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:58,YYSEYRNIFTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:59,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:60,YYSEYRNICTNTDESNLYLRYNFYTWAALTYTWY HLA-B39:61,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:62,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:63,YYAEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:64,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:65,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:66,YYSEYPNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:67,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:68,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:69,YYSKYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:70,YYSEYRNICTNTDESNLYLRYNYYTWAVLTYTWY HLA-B39:71,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:72,YCSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:73,YYSEYRNICTNTDESNLYFRYNFYTWAVLTYTWY HLA-B39:74,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWY HLA-B39:75,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:76,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B39:77,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:78,YYSEYRDICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:79,YYSEYRNICTNTDESNLYLWYNFYTWAVLTYTWY HLA-B39:80,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:81,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:82,YYSEYRNICTNTDESNLYLRYNFYTWAALAYTWY HLA-B39:83,YYSEYRNIFTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:84,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:85,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:86,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:88,YYSEYRNISTNTDESNLYLRSNFYTWAVLTYTWY HLA-B39:89,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:90,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B39:91,YYSEYRNICTNTDESNLYLRYDSYTWAVLTYTWY HLA-B39:92,YYSEYGNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:93,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:94,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:96,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:98,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B39:99,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B4001,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4002,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4003,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B4004,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B4005,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWY HLA-B4006,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B4007,YHTKYREIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4008,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4009,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B4010,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4011,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B4012,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4013,YHTKYREIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B4014,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B4015,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B4016,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B4018,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B4019,YHTKYREISTNTYENIAYLSYNYYTWAVLAYEWY HLA-B4020,YHTKYREISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B4021,YYAMYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4023,YHTKYREISTNTYESNLYLRYNYYSWAERAYEWY HLA-B4024,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B4025,YHTKYRNISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4026,YHTKYREISTNTYESNLYLRYNYYTWAELAYLWY HLA-B4027,YHTKYREISTNTYESNLYLSYNNYTWAVLAYEWY HLA-B4028,YHTKYREISTNTYESNLYIRYNYYTWAELAYLWH HLA-B4029,YHTKYPEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4030,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B4031,YHTKYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B4032,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B4033,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B4034,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B4035,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4036,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B4037,YHTKYREISTNTYENNLYLSYNYYTWAVLAYEWY HLA-B4038,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B4039,YHTKYREISTNTYESNLYLSYNYYTWAVLAYTWY HLA-B4040,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4042,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B4043,YHTKYREISTNTDESNLYLRYNYYSLAVLAYEWY HLA-B4044,YHTKYREISTNTYESNLYWTYDYYTWAVLAYEWY HLA-B4045,YHTKYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B4046,YHTEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4047,YHTKYREISTNTYENTAYLRYNYYSLAVLAYEWY HLA-B4048,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B4049,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4050,YHTKYREISTNTDESNLYLSYNYYTWAVLAYEWY HLA-B4051,YHTKYREISTNTYESNLYLRYNYYSWAELAYTWH HLA-B4052,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B4053,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B4054,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4055,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4056,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4057,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4058,YYAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4059,YHTKYREISTNTYESNLYIRYDSYSLAVLAYEWY HLA-B4060,YHTKYREISTNTYESNLYLRSDSYSLAVLAYEWY HLA-B4061,YHTKYREIYTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4062,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4063,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B4064,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B4065,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4066,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4067,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4068,YHTKYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B4069,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4070,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B4071,YHTKYREISTNTYESNLYLSYNLYTWAVLAYLWY HLA-B4072,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B4073,YHTKYREISTNTYVSNLYLRYNYYSLAVLAYEWY HLA-B4074,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4075,YHTKYREICTNTYESNLYWTYNYYTWAVLAYEWY HLA-B4076,YHTKYREISTNTYESKLYLRYNYYSLAVLAYEWY HLA-B4077,YHTKYREISTNTYESNLYLRYNFYTLAVLAYEWY HLA-B40:01,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:02,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:03,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B40:04,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B40:05,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWY HLA-B40:06,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:07,YHTKYREIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:08,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:09,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B40:10,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:100,YHTKYREISTNTYESNLYLRFNYYSLAVLAYEWY HLA-B40:101,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:102,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:103,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:104,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:105,YHTKYREISTNTYESNLYLSYNSYTWAVLAYEWY HLA-B40:106,YHTKYRNIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:107,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:108,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:109,YHTKYREISTNTYESIAYWTYNYYTWAVLAYEWY HLA-B40:11,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B40:110,YYTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B40:111,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:112,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:113,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWH HLA-B40:114,YHTKYREISTNTYESNLYLRYNYYSWAVLAYEWY HLA-B40:115,YHTKYWEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:116,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:117,YHTKYREISTNTYENIAYLRYNYYSLAVLAYEWY HLA-B40:119,YHTKYREISTNTYDSNLYLSYNYYTWAVLAYEWY HLA-B40:12,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:120,YHTKYREISTNTYESNLYIRYDYYTWAVLAYEWY HLA-B40:121,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B40:122,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:123,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:124,YHTKYREISTNTYESNLYLRYHDYSLAVLAYEWY HLA-B40:125,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:126,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:127,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:128,YHTKYREISTNTYESNLYLRYNYYSLAVRAYEWY HLA-B40:129,YYTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B40:13,YHTKYREIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B40:130,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:131,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:132,YHTKYREISTNTYESNLYLRYNYYSLAVLAYESY HLA-B40:134,YHTKYREISTNIYESNLYLRYNYYSLAVLAYEWY HLA-B40:135,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:136,YHTKYREISTNTYESNLYLRYNYYTWAVDAYEWY HLA-B40:137,YYAMYREISTNTYESNLYIRYNYYSLAVLAYEWY HLA-B40:138,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:139,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:14,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B40:140,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:141,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:143,YHTKYREISTNTYESNLYLSFNYYTWAVLAYEWY HLA-B40:145,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:146,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:147,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:148,YHTKYREISTNTYESNLYWTYNYYTWAELAYEWY HLA-B40:149,YHSKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:15,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B40:150,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:151,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:152,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:153,YHTKYREISTNTYESNLYLRYNYYSLTVLAYEWY HLA-B40:154,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:155,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:156,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:157,YHTKYREISTNTYENTAYLSYNYYTWAVLAYEWY HLA-B40:158,YHTKYREISTNTYESNLYLRYNSYTWAELAYEWY HLA-B40:159,YHTKYREISTNTYESNLYWTYDSYTWAVLAYEWY HLA-B40:16,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B40:160,YHTKYREISTNTYESNLYIRYNYYSLAVLAYEWY HLA-B40:161,YHTKYREISTNTYESNLYWTYNYYTWAERAYEWY HLA-B40:162,YHTKYREIFTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:163,YHTKYREISTNTYESNLYLRYNYYSLAVLAYTWH HLA-B40:164,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:165,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:166,YHTKYRNIYAQTDESNLYLRYNYYSLAVLAYEWY HLA-B40:167,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:168,YHTKYREISTNTYESNLSLRYNYYSLAVLAYEWY HLA-B40:169,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:170,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:171,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:172,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:173,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:174,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWH HLA-B40:175,YHTKYREISTNTYESNLCLRYNYYSLAVLAYEWY HLA-B40:176,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:177,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:178,YHTKYREISTNTYESNLYLRYNYYSLAVLAYESY HLA-B40:179,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:18,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B40:180,YHTKYREISTNTYESNLYLSYHDYTWAVLAYEWY HLA-B40:181,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:182,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:183,YHTKYREISTNTYESNLYLRYNYYSLAELAYEWY HLA-B40:184,YHTKYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B40:185,YHTTYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:186,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:187,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:188,YHTKYREISTNTYEDTLYLRYNYYSLAVLAYEWY HLA-B40:189,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:19,YHTKYREISTNTYENIAYLSYNYYTWAVLAYEWY HLA-B40:190,YHTKYREISTNTYESNLHWTYNYYTWAVLAYEWY HLA-B40:191,CHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:192,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:193,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:194,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:195,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:196,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:197,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:198,YHTKYREISTNTYESNLYLRYNYYSLAERAYEWY HLA-B40:199,YHTKYREISTNTYESNLYLRYNYYSLAVLAYTWY HLA-B40:20,YHTKYREISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B40:200,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:201,YHTKYREISTNTYESTAYLSYNYYTWAVLAYEWY HLA-B40:202,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:203,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:204,YHTKYREVSTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:205,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:206,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:207,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:208,YHTRYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:209,YHTTYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:21,YYAMYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:210,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:211,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:212,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:213,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:214,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:215,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:217,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:218,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:219,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:220,YHTKYREIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:221,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:222,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B40:223,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:224,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:225,YHTKYREISTNTYESNLYLNYNYYTWAVLAYEWY HLA-B40:226,YHTKYREISTKTYESNLYLSYNYYTWAVLAYEWY HLA-B40:227,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:228,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:229,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:23,YHTKYREISTNTYESNLYLRYNYYSWAERAYEWY HLA-B40:230,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:231,YHTKYREISTNTYESNLYLRYNYYSWAVDAYEWY HLA-B40:232,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:233,YHTKYREISTNTYESNLYFRYNYYSLAVLAYEWY HLA-B40:234,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:235,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:236,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:237,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B40:238,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:239,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:24,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B40:240,YHTKYREISTNTYESNLYLRYNDYSLAVLAYEWY HLA-B40:241,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:242,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:243,YHTKYREISTNTYESNLYLWCNYYTWAVLAYEWY HLA-B40:244,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:245,YHTKYREISTNTYESNLYLRSNYYSLAVLAYEWY HLA-B40:246,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:247,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:248,YHAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:249,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:25,YHTKYRNISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:250,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:251,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:252,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:253,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:254,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:255,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:257,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:258,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:259,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:26,YHTKYREISTNTYESNLYLRYNYYTWAELAYLWY HLA-B40:260,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:261,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:262,YHTKYREISTNTYESNLYLRYNYYSLALLAYEWY HLA-B40:264,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:266,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:267,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B40:268,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:269,YHTKYREISTNTYESNLYWTYNYYTWAVLAYECY HLA-B40:27,YHTKYREISTNTYESNLYLSYNNYTWAVLAYEWY HLA-B40:270,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:271,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:272,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:273,YHIKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:274,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:275,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:276,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:277,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:278,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:279,YHTKYREISTNTYESNLYLRYNYYSLAVDAYEWY HLA-B40:28,YHTKYREISTNTYESNLYIRYNYYTWAELAYLWH HLA-B40:280,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B40:281,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:282,YHAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:283,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:284,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B40:285,YHTKYREISTNTYESNLYLRYNYYSVAVLAYEWY HLA-B40:287,YHTKYREISTNTYESNLYLSYNYYTLAVLAYEWY HLA-B40:288,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:289,YHTKYREISTNTYESNLHLSYNYYTWAVLAYEWY HLA-B40:29,YHTKYPEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:290,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:292,YHTKYREISTNTYESIAYLSYNYYTWAVLAYEWY HLA-B40:293,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:294,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:295,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:296,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:297,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:298,YHTKYREISTNTYESNLYWTYNYYSLAVLAYEWY HLA-B40:299,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:30,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B40:300,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:301,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:302,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:303,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:304,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:305,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:306,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:307,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:308,YHTTYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:309,YHTKYREISTNTYESNLYLSYNYYTWAELAYEWY HLA-B40:31,YHTKYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B40:310,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:311,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:312,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:313,YHTKYRNISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:314,YHTKYREISTNTYESNLYLSYNFYTWAVLAYEWY HLA-B40:315,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:316,YHTKYREISTNTYESNLYLTYNYYSLAVLAYEWY HLA-B40:317,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:318,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:319,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:32,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B40:320,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:321,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:322,YHTKYREICTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:323,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:324,YHTKYREISTNTYESNLYLRYNYYSLAVWAYLWY HLA-B40:325,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:326,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:327,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:328,YDTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:329,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:33,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B40:330,YHTKYREISTNTYESNLYWTYNFYTWAVLAYEWY HLA-B40:331,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:332,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:333,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:334,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:335,YHTKYREISTNTYESHLYLSYNYYTWAVLAYEWY HLA-B40:336,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:339,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:34,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B40:340,YHTKYREISTNTYENIAYWTYNYYTWAVLAYEWY HLA-B40:341,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:342,YYTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:343,YHTKYREISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B40:344,YHTKYREISTNTYERNLYLRYNYYSLAVLAYEWY HLA-B40:346,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:347,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:348,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:349,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:35,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:350,YHTTYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:351,YHAKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B40:352,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B40:353,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:354,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:355,YHTKYREISTNTYESNLYLRYNYYSWAELAYEWY HLA-B40:356,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:357,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:358,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:359,YHTKYREISTNTYESNLYLSYNYYTWVVLAYEWY HLA-B40:36,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B40:360,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:362,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:363,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:364,YHAKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:365,YYATYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:366,YHTKYREISTNTYESNLYWRYNYYTWAVLAYEWY HLA-B40:367,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:368,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B40:369,YHTKYREIPTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:37,YHTKYREISTNTYENNLYLSYNYYTWAVLAYEWY HLA-B40:370,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:371,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:373,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:374,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:375,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:376,YHTKYREISTNTYESNLYWTYNYYTWAALAYEWY HLA-B40:377,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B40:378,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:379,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:38,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B40:380,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:381,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:382,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:383,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:384,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:385,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:386,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:387,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:388,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:389,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:39,YHTKYREISTNTYESNLYLSYNYYTWAVLAYTWY HLA-B40:390,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:391,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:392,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:393,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:394,YHTKYREISTNTYESIAYLRYNYYSLAVLAYEWY HLA-B40:395,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:396,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:397,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:398,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:40,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:400,YHTKYREISTNTYESNQYLRYNYYSLAVLAYEWY HLA-B40:401,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:402,YHTKYREISTNTYESNLYLRYNYYSLAVLAYECY HLA-B40:403,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:404,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:406,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:407,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:408,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:409,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:410,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:411,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:412,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:413,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:414,YHTKYREISTNTYESNLYLSYDDYTWAVLAYEWY HLA-B40:42,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B40:43,YHTKYREISTNTDESNLYLRYNYYSLAVLAYEWY HLA-B40:44,YHTKYREISTNTYESNLYWTYDYYTWAVLAYEWY HLA-B40:45,YHTKYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B40:46,YHTEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:47,YHTKYREISTNTYENTAYLRYNYYSLAVLAYEWY HLA-B40:48,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B40:49,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:50,YHTKYREISTNTDESNLYLSYNYYTWAVLAYEWY HLA-B40:51,YHTKYREISTNTYESNLYLRYNYYSWAELAYTWH HLA-B40:52,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B40:53,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:54,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:55,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:56,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:57,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:58,YYAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:59,YHTKYREISTNTYESNLYIRYDSYSLAVLAYEWY HLA-B40:60,YHTKYREISTNTYESNLYLRSDSYSLAVLAYEWY HLA-B40:61,YHTKYREIYTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:62,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:63,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B40:64,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B40:65,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:66,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:67,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:68,YHTKYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B40:69,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:70,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:71,YHTKYREISTNTYESNLYLSYNLYTWAVLAYLWY HLA-B40:72,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B40:73,YHTKYREISTNTYVSNLYLRYNYYSLAVLAYEWY HLA-B40:74,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:75,YHTKYREICTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:76,YHTKYREISTNTYESKLYLRYNYYSLAVLAYEWY HLA-B40:77,YHTKYREISTNTYESNLYLRYNFYTLAVLAYEWY HLA-B40:78,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:79,YHTKYREISTNTYESNLHLRYNYYSLAVLAYEWY HLA-B40:80,YHTKYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B40:81,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:82,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:83,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:84,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:85,YHTKYREISTNTYESNLYLSYNYYIWAVLAYEWY HLA-B40:86,YHTKYREISTNTYESNLYWTYNFYTWAVLAYEWY HLA-B40:87,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:88,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B40:89,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:90,YHTKYREISTNTYESNLYLSYNYYTWAVLAHEWY HLA-B40:91,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:92,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B40:93,YHTEYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B40:94,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:95,YHTKYREISTNTYESNLYWTYNYYTWAELAYEWY HLA-B40:96,YHTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B40:97,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B40:98,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B40:99,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B4101,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B4102,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B4103,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B4104,YHTKYREISTNTYESNLYLSYDYYTWAVDAYTWY HLA-B4105,YHTKYREISTNTYESKLYWRYNYYTWAVDAYTWY HLA-B4106,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B4107,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B4108,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B41:01,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:02,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:03,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B41:04,YHTKYREISTNTYESNLYLSYDYYTWAVDAYTWY HLA-B41:05,YHTKYREISTNTYESKLYWRYNYYTWAVDAYTWY HLA-B41:06,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:07,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:08,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B41:09,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:10,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:11,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:12,YHAKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:13,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:14,YHTKYREISTNTYESNLHWRYNYYTWAVDAYTWY HLA-B41:15,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:16,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:17,YHTKYREISTNTYESNLYWRYNYYTWAVDAYLWY HLA-B41:18,YHTKYREISTNTYESNLYLSYDFYTWAVDAYTWY HLA-B41:19,YHTKYREISTNTYESNLYLSYNYYTWAVDAYEWY HLA-B41:20,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:21,YHTKYREISTNTYESNLYWRYDYYTWAVDAYTWY HLA-B41:22,YHSKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:23,YHTKYREISNNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:24,YHTKYREISTNTYESNLYLSYNSYTWAVDAYTWY HLA-B41:25,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:26,YHTKYREISTNTYESNQYWRYNYYTWAVDAYTWY HLA-B41:27,YHTKYREISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B41:28,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:29,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:30,YHTKYREISTNTYESNLYWRYNSYTWAVDAYTWY HLA-B41:31,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:32,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:33,YYTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:34,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:35,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:36,YHAKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:37,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:38,YHTKYREISTNTYESNLYLSYNYYTLAVDAYTWY HLA-B41:39,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:40,YHTKYREISTNTYESNLYLSYNYYTWAMDAYTWY HLA-B41:41,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:42,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:43,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:44,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:46,YHTKYREIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B41:47,YYTKYREISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B41:48,YHTKYREISTNTYESNLYIRYNYYTWAVDAYTWY HLA-B41:49,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:50,YHTKYREISTNTYESNLYWRYNFYTWAVDAYTWY HLA-B41:51,YHTKYREISTNTYESNLYLSYDSYTWAVDAYTWY HLA-B41:52,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:53,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:54,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B41:55,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B41:56,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B4201,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B4202,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B4204,YYSEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B4205,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B4206,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B4207,YYSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B4208,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B4209,YHSEYRNIYAQTDESNLYLSYDSYTWAVDAYTWY HLA-B42:01,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:02,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:04,YYSEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B42:05,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:06,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B42:07,YYSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B42:08,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:09,YHSEYRNIYAQTDESNLYLSYDSYTWAVDAYTWY HLA-B42:10,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:11,YYSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B42:12,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:13,YYSEYRNIYAQTDESNLYIRYNYYTWAVDAYTWY HLA-B42:14,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:15,YYSEYRNIYAQTDENNLYLSYNYYTWAVDAYTWY HLA-B42:16,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYTWY HLA-B42:17,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:18,YHSEYRNIYAQADESNLYLSYNYYTWAVDAYTWY HLA-B42:19,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B42:20,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B42:21,YYAEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:22,YYSEYRNIYAQTDESKLYLSYNYYTWAVDAYTWY HLA-B42:23,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:24,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B42:25,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B4402,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4403,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4404,YYTKYREISTNTYENTAYIRYDDYTWAVRAYTSY HLA-B4405,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B4406,YYATYRNIFTNTYENIAYIRYDDYTWAVDAYLSY HLA-B4407,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4408,YYTMYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4409,YYTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B4410,YYTKYREISTNTYENTAYIRFNLYTWAVLAYLSY HLA-B4411,YYTKYREISTNTYENTPYIRYDDYTWAVDAYLSY HLA-B4412,YYTKYRNISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4413,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4414,YYTKYREISTNTYENTAYIRYNDYTWAVDAYLSY HLA-B4415,YHTKYREISTNTYESTAYWRYNLYTWAVDAYLSY HLA-B4416,YYTKYREISTNTYENTAYIRYDDYTWAVDAYEWY HLA-B4417,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B4418,YHTKYREISTNTYENIAYWRYNLYTWAVDAYLSY HLA-B4420,YYTKYREISTNTYENTAYWTYDDYTWAVDAYLSY HLA-B4421,YYTKYREISTNTYENTAYIRYDDYTWAVDAYESY HLA-B4422,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4424,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4425,YYTKYREISTNTYENIAYIRYDYYTWAVDAYLSY HLA-B4426,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4427,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4428,YYTKYREISTNTYENTAYIRYDDYTWAVRAYLSY HLA-B4429,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B4430,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4431,YYTKYREISTNTYENTAYLRYNYYSLAVLAYESY HLA-B4432,YYTKYPEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4433,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4434,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4435,YYTKYREISTNTYENTAYIRYDDYTWAVEAYLSY HLA-B4436,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4437,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWY HLA-B4438,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4439,YYPKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4440,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4441,YYTKYREISTNTYENTAYLRYDDYTWAVDAYLSY HLA-B4442,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLWY HLA-B4443,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B4444,YYTEYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4445,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B4446,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B4447,YYTKYREISTNTYENTAYWTYDDYTWAVLAYLSY HLA-B4448,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4449,YDTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4450,YYTKYREISTNTYENIAYIRYDDYTWAVLAYLSY HLA-B4451,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4453,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4454,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B44:02,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:03,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:04,YYTKYREISTNTYENTAYIRYDDYTWAVRAYTSY HLA-B44:05,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:06,YYATYRNIFTNTYENIAYIRYDDYTWAVDAYLSY HLA-B44:07,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:08,YYTMYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:09,YYTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B44:10,YYTKYREISTNTYENTAYIRFNLYTWAVLAYLSY HLA-B44:100,YYTKYREISTNTYENTAYWRYDDYTWAVDAYLSY HLA-B44:101,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:102,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:103,YHTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:104,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:105,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:106,YYTKYREISTNTYENTAYLSYDDYTWAVDAYLSY HLA-B44:107,YYTKYREISTNTYENTAYIRYDYYTWAVLAYLSY HLA-B44:109,YYTKYREISTNTYESTAYIRYDDYTWAVLAYLSY HLA-B44:11,YYTKYREISTNTYENTPYIRYDDYTWAVDAYLSY HLA-B44:110,YYTKYREISTNTYENTAYISYDDYTWAVLAYLSY HLA-B44:111,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:112,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:113,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:114,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:115,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:116,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:117,YYTKYREISTNTYENTAYIRYDFYTWAVDAYLSY HLA-B44:118,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:119,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:12,YYTKYRNISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:120,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:121,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:122,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:123,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:124,YYTKYREISTNTYENTAYIRYDDYTWAVLAYESY HLA-B44:125,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:126,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:127,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:128,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:129,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B44:13,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:130,YYSEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:131,YHTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B44:132,YYTKYREISTNTYENTAYIRYDDYTWAVDAYTWY HLA-B44:133,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:134,YYTTYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:135,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B44:136,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:137,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:139,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:14,YYTKYREISTNTYENTAYIRYNDYTWAVDAYLSY HLA-B44:140,YYTKYREISTNTYENTAYIRYNLYTWAVDAYLSY HLA-B44:141,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:142,YYTKYREISTNTYENTAYIRYDDYTWAVDACLSY HLA-B44:143,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:144,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B44:145,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:146,YYTKYREISTNTYENTAYIRYDDYTWAEWAYLSY HLA-B44:147,YYTKYREISTNTYENTAYIRYDDYTWAVLAHLSY HLA-B44:148,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:15,YHTKYREISTNTYESTAYWRYNLYTWAVDAYLSY HLA-B44:150,YYTKYREISTNTYENTAYIRYDDYTWAERAYEWY HLA-B44:151,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:152,YYTKYREISTNTYENTTYIRYDDYTWAVDAYLSY HLA-B44:153,YYTKYREISTNTYENTAYIVYDDYTWAVLAYLSY HLA-B44:154,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:155,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:156,YDSEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:157,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:158,YYTKYREISTNTYENTAYLSYDYYTWAVDAYLSY HLA-B44:159,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:16,YYTKYREISTNTYENTAYIRYDDYTWAVDAYEWY HLA-B44:161,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:162,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:163,YYTKYREISTNTYENTAYIRYDDYTWAVLAYTSY HLA-B44:164,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:165,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:166,YYTKYREISTNTYENTAYLSYNYYTWAVDAYTWY HLA-B44:167,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:168,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:169,YYTKYREISTNTYENTAYIRYDDYSWAVDAYLSY HLA-B44:17,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B44:170,YYTKYREISTNTYENAAYIRYDDYTWAVDAYLSY HLA-B44:172,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:173,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:174,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:175,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:176,YYTKYREISTNTYESTAYIRYDDYTWAVDAYLSY HLA-B44:177,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:178,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:179,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:18,YHTKYREISTNTYENIAYWRYNLYTWAVDAYLSY HLA-B44:180,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:181,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:182,YYTKYREISTNTYENTAYIRYDDYSWAVLAYLSY HLA-B44:183,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:184,YYTKYREISTNTYENTAYLSYNYYTWAVLAYLSY HLA-B44:185,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:186,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:187,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:188,YHTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:189,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:190,YYTKYREISTNTYENTAYIRYDDYTWAVDAYTWH HLA-B44:191,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:192,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:193,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:194,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:196,YYTKYREISTNTYENTGYIRYDDYTWAVDAYLSY HLA-B44:197,YYTKYREISTNTYENTAYWRYDDYTWAVLAYLSY HLA-B44:199,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:20,YYTKYREISTNTYENTAYWTYDDYTWAVDAYLSY HLA-B44:200,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:201,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:202,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:203,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSH HLA-B44:204,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:205,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:206,YYTKYREISTNTDENTAYIRYDDYTWAVDAYLSY HLA-B44:207,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:208,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:209,YYTKYREISTNTYENTAYIRSDDYTWAVLAYLSY HLA-B44:21,YYTKYREISTNTYENTAYIRYDDYTWAVDAYESY HLA-B44:210,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:211,YYTKYREISTNTYENTAYISYDDYTWAVDAYLSY HLA-B44:212,YHTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:213,YYTKYREISTNTYENTAYLSYNYYTWAVDAYLSY HLA-B44:214,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:215,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:216,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:218,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:219,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:22,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:220,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:221,YYSKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:222,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:223,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:224,YYSKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:225,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:226,YYTKYREISTNTYENTAYIRYDLYTWAVDAYLSY HLA-B44:227,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:228,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:229,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:230,YYTKYREISTNTYENTAYLRYDSYTWAVDAYLSY HLA-B44:231,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:232,YYTKYRNIFTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:233,YYTKYREISTNTYENTAYIRYDDYNWAVLAYLSY HLA-B44:234,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLLY HLA-B44:235,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:236,YYTKYREISTNTYENTAYLRYDYYTWAVDAYLSY HLA-B44:238,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:239,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:24,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:240,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:241,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:242,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:243,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:244,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:245,YYAKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:247,YYTKYREISTNTYENTAYIRYDDYTLAALAYLSY HLA-B44:248,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:249,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:25,YYTKYREISTNTYENIAYIRYDYYTWAVDAYLSY HLA-B44:250,YYTKYREISTNTYENTAYIRYDYYTWAVLAYLSY HLA-B44:251,YYTKYREISTNTYENTAYIRYDFYTWAVLAYLSY HLA-B44:252,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:253,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:254,YYTKYREISTNTYENNLYIRYDDYTWAVDAYLSY HLA-B44:255,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:256,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B44:257,YYTKYREISTNTYEDTLYIRYDDYTWAVDAYLSY HLA-B44:258,YYSKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:259,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:26,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:260,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:261,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:262,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:263,YYTKYRNICTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:264,YYTKYREISTNTYENTAYMRYDYYTWAVDAYLSY HLA-B44:265,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:266,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:268,YYTKYREISTNTYENTAYIRYDDYTWAVLAYTWY HLA-B44:269,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:27,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:270,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:271,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:272,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:273,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:274,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:275,YYTKYREISTNTYENTAYIRYDDYTWAVWAYLWH HLA-B44:276,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B44:277,YYTKYREISTNTDESNLYIRYDDYTWAVLAYLSY HLA-B44:278,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:279,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:28,YYTKYREISTNTYENTAYIRYDDYTWAVRAYLSY HLA-B44:280,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:281,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:282,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:283,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:284,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:285,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B44:286,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:287,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:288,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:289,YYTKYREISTNTYENTAYIRYDDYTWVVDAYLSY HLA-B44:29,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B44:290,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWH HLA-B44:291,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:292,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:293,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:294,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:295,YYTKYREISTNTYENTAYIRYDDYTWAALAYLSY HLA-B44:296,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:297,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:298,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:299,YYTKYREISTNTYENTAYIRYDDYTWAVWAYLSY HLA-B44:30,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:300,YYTKYREISTNTYKNTAYIRYDDYTWAVLAYLSY HLA-B44:301,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:302,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:304,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:305,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:307,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:308,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B44:31,YYTKYREISTNTYENTAYLRYNYYSLAVLAYESY HLA-B44:311,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:312,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:313,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:315,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:316,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:317,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:318,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSC HLA-B44:319,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:32,YYTKYPEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:320,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:321,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:322,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:323,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:324,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:325,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:326,YYTKYPEISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:327,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:329,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:33,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:330,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:331,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:332,YYTKYRELSTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:34,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:35,YYTKYREISTNTYENTAYIRYDDYTWAVEAYLSY HLA-B44:36,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:37,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWY HLA-B44:38,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:39,YYPKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:40,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:41,YYTKYREISTNTYENTAYLRYDDYTWAVDAYLSY HLA-B44:42,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLWY HLA-B44:43,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B44:44,YYTEYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:45,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:46,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B44:47,YYTKYREISTNTYENTAYWTYDDYTWAVLAYLSY HLA-B44:48,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:49,YDTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:50,YYTKYREISTNTYENIAYIRYDDYTWAVLAYLSY HLA-B44:51,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:53,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:54,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B44:55,YHTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:57,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:59,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:60,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:62,YYTKYREISTNTYENTAYIRYNYYTWAVDAYLSY HLA-B44:63,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:64,YYTKYREISTNTYENTAYIRYDDYTWAVLAYEWY HLA-B44:65,YYTKYREISTNTYENTAYLRYDDYTWAVLAYLSY HLA-B44:66,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:67,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:68,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:69,YYTKYWEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:70,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:71,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:72,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:73,YYTKYREISTNTYENTAYIRYDDYTWAVDGYLSY HLA-B44:74,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:75,YYTKYREISTNTYENNLYIRYDYYTWAVDAYLSY HLA-B44:76,YYTKYREISTNTYENTAYIRYDDYTWAERAYLSY HLA-B44:77,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B44:78,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B44:79,YYTKYREISTNTYENTAYIRYDDYTWAELAYLSY HLA-B44:80,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:81,YYTNYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:82,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B44:83,YYATYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:84,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:85,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:86,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:87,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:88,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:89,YYTKYREISTNTYENTAYIRYDDYTWAVDTYLSY HLA-B44:90,YYTKYREIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B44:91,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLWY HLA-B44:92,YYTKYREISTNTYENTAYIRYDDYTWAMLAYLSY HLA-B44:93,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B44:94,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:95,YYTKYREISTNTYENIAYIRYDDYTWAVDAYLSY HLA-B44:96,YYTKYREISTNTYENTAYIGYDDYTWAVLAYLSY HLA-B44:97,YYTKYREICAKTDENTAYIRYDDYTWAVDAYLSY HLA-B44:98,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B44:99,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B4501,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B4502,YHTKYREISTNTYESNLYWRYNFYTWAVDAYLSY HLA-B4503,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B4504,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLWY HLA-B4505,YHTKYREISTNTYESNLYWRYNLYTWAVDVYLSY HLA-B4506,YHTKYREIYAQTDESNLYWRYNLYTWAVDAYLSY HLA-B4507,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:01,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:02,YHTKYREISTNTYESNLYWRYNFYTWAVDAYLSY HLA-B45:03,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:04,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLWY HLA-B45:05,YHTKYREISTNTYESNLYWRYNLYTWAVDVYLSY HLA-B45:06,YHTKYREIYAQTDESNLYWRYNLYTWAVDAYLSY HLA-B45:07,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:08,YHTKYREISTNTYESNLYWRYNLYTWAVDAYTWY HLA-B45:09,YHTKYREISTNTYESNLYWRYDSYTWAVDAYLSY HLA-B45:10,YHTKYREISTNTYESNLYWRYNLYTWAVDAYEWY HLA-B45:11,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:12,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:13,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:14,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:15,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:16,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:17,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:18,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:19,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:20,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:21,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:22,YHTTYRNISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:23,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B45:24,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B4601,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B4602,YYAMYREKYRQTGVSNLYLRYDSYTWAEWAYLWY HLA-B4603,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-B4604,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B4605,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B4606,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYEWY HLA-B4608,YYAMYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-B4609,YYAMYREKYRQTDVSNLYLRYDSYTWAVWAYLWY HLA-B4610,YYTMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B4611,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYLWY HLA-B46:01,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:02,YYAMYREKYRQTGVSNLYLRYDSYTWAEWAYLWY HLA-B46:03,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-B46:04,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:05,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:06,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYEWY HLA-B46:08,YYAMYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-B46:09,YYAMYREKYRQTDVSNLYLRYDSYTWAVWAYLWY HLA-B46:10,YYTMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:11,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYLWY HLA-B46:12,YYAMYREKYRQTDVSNLYLSYDSYTWAEWAYLWY HLA-B46:13,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-B46:14,YHAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:16,YYAMYREKFRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:17,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLSY HLA-B46:18,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYTWY HLA-B46:19,YYAMYREKYRQTDVSNLYLRYDSYTWAVLTYLWY HLA-B46:20,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:21,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYTWY HLA-B46:22,YYAMYREKYRRTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:23,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:24,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:25,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYEWY HLA-B46:26,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:27,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:28,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:29,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYTWY HLA-B46:30,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-B46:31,YYAMYREKHRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:32,YYAMYREKYRQTDVSNLYWTYDSYTWAEWAYLWY HLA-B46:33,YYAMYREKYRQTDVSNLYIRYDSYTWAVLAYLWY HLA-B46:34,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:35,YYAMYREKYRQTHVSNLYLRYDSYTWAEWAYLWY HLA-B46:36,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:37,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:38,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:39,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:40,YYATYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:42,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:43,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYLWY HLA-B46:44,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:45,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:46,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:47,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:48,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:49,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:50,YYAMYREKYRQTYVSNLYLRYDSYTWAEWAYLWY HLA-B46:52,YYAMYREKYRQTDVSNLHLRYDSYTWAEWAYLWY HLA-B46:53,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:54,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:56,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:57,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:58,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:59,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:60,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:61,YYAMYREKYRQTDVSNLYLRYNFYTWAEWAYLWY HLA-B46:62,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYLWY HLA-B46:63,YYAMYREKYRQTDVSNLYLRYDSCTWAEWAYLWY HLA-B46:64,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:65,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:66,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:67,YYAMYREKYRQTDVSNLYIRYDSYTWAEWAYLWY HLA-B46:68,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:69,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:70,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:71,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:72,YYAMYREKYRQTDESNLYLRYDSYTWAEWAYLWY HLA-B46:73,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B46:74,YYAMYREKYRQTDVSNLYLRYNYYTWAEWAYLWY HLA-B46:75,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B4701,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B4702,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B4703,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B4704,YYTKYREISTNTYENTAYLNYHDYTWAVLAYEWY HLA-B4705,YYTKYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B47:01,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B47:02,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B47:03,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B47:04,YYTKYREISTNTYENTAYLNYHDYTWAVLAYEWY HLA-B47:05,YYTKYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B47:06,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B47:07,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B47:08,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYTWY HLA-B47:09,YYTKYREISTNTYEDTLYLRFHDYTWAALAYEWY HLA-B47:10,YYTKYREISTNTYEDTLYLRFHDYTWAELAYEWY HLA-B4801,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B4802,YYSEYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B4803,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B4804,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B4805,YYSEYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B4806,YYSEYRNIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B4807,YYSEYREISTNTYESNLYLSYNFYSLAVLAYEWY HLA-B4808,YYSEYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B4809,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B4810,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4811,YYSEYREISTNTYESNLYLSYNYYSLAVLAYELY HLA-B4812,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4813,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B4814,YYSEYREISTNTYESNLYLSYNSYTLAVLAYEWY HLA-B4815,YYSEYREISTNTYESNLYLSYNYYSLAELAYEWY HLA-B4816,YYSEYRVISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B4817,YYSEYREISTNTYESNLYIRYNFYSLAVLAYEWY HLA-B4818,YYSEYREISTNTYESIAYLSYNYYSLAVLAYEWY HLA-B48:01,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:02,YYSEYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B48:03,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B48:04,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:05,YYSEYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B48:06,YYSEYRNIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:07,YYSEYREISTNTYESNLYLSYNFYSLAVLAYEWY HLA-B48:08,YYSEYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B48:09,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:10,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B48:11,YYSEYREISTNTYESNLYLSYNYYSLAVLAYELY HLA-B48:12,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B48:13,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B48:14,YYSEYREISTNTYESNLYLSYNSYTLAVLAYEWY HLA-B48:15,YYSEYREISTNTYESNLYLSYNYYSLAELAYEWY HLA-B48:16,YYSEYRVISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:17,YYSEYREISTNTYESNLYIRYNFYSLAVLAYEWY HLA-B48:18,YYSEYREISTNTYESIAYLSYNYYSLAVLAYEWY HLA-B48:19,YYSEYREISTNTYESNLYLSYNYYSLAVWAYEWY HLA-B48:20,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:21,YYSEYREISTNTYESNLYLNYNYYSLAVLAYEWY HLA-B48:22,YHSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:23,YYSEYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B48:24,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:25,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B48:26,YYSEYREISTNTYESNLYLNYHDYSLAVLAYEWY HLA-B48:27,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:28,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:29,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:30,YHSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:31,YYSEYREIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:32,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:33,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:34,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:35,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:36,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:37,YYSEYREISTNTYESNLYLSYNYYSLAVLAYTWY HLA-B48:38,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:39,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:40,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B48:41,YYSKYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:42,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:43,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:44,YYSEYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B48:45,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:46,YYSEYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B48:47,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B48:48,YYSEYREISTNTDESNLYLSYNYYSLAVLAYEWY HLA-B4901,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B4902,YHTKYREISTNTYENTAYWRYNLYTWAELAYLWY HLA-B4903,YHATYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B4904,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B4905,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B49:01,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:02,YHTKYREISTNTYENTAYWRYNLYTWAELAYLWY HLA-B49:03,YHATYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:04,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B49:05,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B49:06,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:07,YHTKYREISTNTYENIAYWRYNLYTWAELAYEWY HLA-B49:08,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:09,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWH HLA-B49:10,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:11,YHTKYREISTNTYENIAYWRYNLYTWAVLAYLWY HLA-B49:12,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:13,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:14,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:16,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:17,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:18,YHTKYREISTNTYENIAYWRYNYYTWAELAYLWY HLA-B49:20,YHTKYREISTNTYENIAYWRYNLYTWAELAYLSY HLA-B49:21,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:22,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:23,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:24,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:25,YDSKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:26,YHTEYRNICTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:27,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:28,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:29,YHTKYREISTNTYENIAYWRYNLYTLAELAYLWY HLA-B49:30,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:31,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:32,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:33,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:34,YHTKYREVSTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:35,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:36,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:37,YHTKYREISTNTYENIAYWRYNLYTWAELDYLWY HLA-B49:38,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:39,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:40,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:41,YHTKYREISTNTYENIAYWRYNLYTWAERAYLWY HLA-B49:42,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:43,YHTKYREISTNTYENIAYWMYNLYTWAELAYLWY HLA-B49:44,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:45,YHTKYREISTNTYENIAYWRYNLYTWAALAYLWY HLA-B49:46,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:47,YHTKYREISTNTYENIAYLRYNLYTWAELAYLWY HLA-B49:48,YHAKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:49,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:50,YHTKYREISTNTYENIAYWRYNFYTWAELAYLWY HLA-B49:51,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:52,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:53,YHTKYREIPTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:54,YHTKYREISTNTYENIAYWTYNLYTWAELAYLWY HLA-B49:55,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:56,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:57,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:58,YHNKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B49:59,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B5001,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B5002,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B5004,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:01,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:02,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B50:04,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:05,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:06,YHTRYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:07,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:08,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:09,YHTKYREISTNTYESNLYWRYNFYTWAELAYLWY HLA-B50:10,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:11,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:12,YHTKYREISTNTYESNLYGRYNLYTWAELAYLWY HLA-B50:13,YYTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:14,YHTKYREISTNTYESNLYWRYNYYTWAELAYLWY HLA-B50:15,YHTKYRNISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:16,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:17,YHTKYREISTNTYESNLYIRYNLYTWAELAYLWY HLA-B50:18,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:19,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:20,YHTKYREISTNTYESNLYWRFHDYTWAELAYLWY HLA-B50:31,YHTKYREISTNTYESNLYWRYNLYTWAELAYEWY HLA-B50:32,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:33,YHTKYREISTNTYESNLYWRYDSYTWAELAYLWY HLA-B50:34,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:35,YHTKYREISTNTYESNLYWRYNLYTWAELAYLRY HLA-B50:36,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:37,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:38,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:39,YHTKYREISTNTYESNLYWRYDLYTWAELAYLWY HLA-B50:40,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:41,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:42,YHTKYREISTNTYESNLYWRYNLHTWAELAYLWY HLA-B50:43,YYTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:44,YHTKYREISTNTYESNLYWRYNLYTRAELAYLWY HLA-B50:45,YHTKYREISTNTYESNLYWRYNLYTWAELAYTWY HLA-B50:46,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:47,YHTKYREISTNTYESNLYWRYNLYTWAEWAYLWY HLA-B50:48,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:49,YHTKYREISTNTYESNLYWRYNLYTWAVLTYTWY HLA-B50:50,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:51,YHTKYREISTNTYESNLYLWYNLYTWAELAYLWY HLA-B50:52,YHTKYREISTNTDESNLYWRYNLYTWAELAYLWY HLA-B50:53,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:54,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:55,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:56,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B50:57,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:58,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWH HLA-B50:59,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:60,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B50:61,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B5101,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5102,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B5103,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLGH HLA-B5104,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B5105,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWY HLA-B5106,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWH HLA-B5107,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5108,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B5109,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B5111,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5112,YYATYRNIFTNTYENIADWTYNYYTWAELAYLWH HLA-B5113,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B5114,YYATYRNIFTNTYENIAYWTYKYYTWAELAYLWH HLA-B5115,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B5116,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWH HLA-B5117,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5118,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5119,YYATYRNIFTNTYENIAYWTYNYYTWAVLTYLWH HLA-B5120,YYATYRNIFTNTDENIAYWTYNYYTWAVDAYLWH HLA-B5121,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWH HLA-B5122,YYATYRNICTNTYENIAYWTYNYYTWAELAYLWH HLA-B5123,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLSY HLA-B5124,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5126,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5128,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5129,YYATYRNIFTNTYENIAYWTYNYYTWAERAYLWH HLA-B5130,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5131,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWH HLA-B5132,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5133,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5134,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWY HLA-B5135,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5136,YYATYRNIFTNTYENIAYWTYNYYTWAEDAYTWY HLA-B5137,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B5138,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5139,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5140,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWY HLA-B5142,YYATYRNIFTNTYENIAYIRYDDYTWAVLAYLSY HLA-B5143,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5145,YYATYRNIFTNTYENIAYLRYDSYTWAELAYLWH HLA-B5146,YYATYRNIFTNTYENIAYITYNYYTWAELAYLWH HLA-B5147,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B5148,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5149,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:01,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:02,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B51:03,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLGH HLA-B51:04,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B51:05,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWY HLA-B51:06,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWH HLA-B51:07,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:08,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B51:09,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B51:10,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWY HLA-B51:100,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:101,YYATYRNIFTNTYENIAYWTYNYYTWAELTYTWH HLA-B51:102,YYATFRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:103,YHTTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:104,YYAMYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:105,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:106,YYATYRNIFTNTYENIAYWTYNLYTWAELAYLWH HLA-B51:107,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:108,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLSY HLA-B51:109,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:111,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:112,YYAKYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:113,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:114,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:115,YYATYRNIFTNTYENIAYWTYNYYTWAALAYLWH HLA-B51:116,YHSTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:117,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:119,YYTTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:12,YYATYRNIFTNTYENALYWTYNYYTWAELAYLWH HLA-B51:12,YYATYRNIFTNTYENIADWTYNYYTWAELAYLWH HLA-B51:120,YYATYRNIFTNTYENIAYWTYNYYTWAKLAYLWH HLA-B51:121,YYATYRNIFTKTYENIAYWTYNYYTWAELAYLWH HLA-B51:122,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B51:123,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:124,YYATYRNIFTNTYENIAYWTCNYYTWAELAYLWH HLA-B51:125,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:126,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:127,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:128,YYATYRNIFSNTYENIAYWTYNYYTWAELAYLWH HLA-B51:129,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:13,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B51:130,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:131,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:132,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:133,YYATYRNIFTNTYENIAYWTYNYHTWAELAYLWH HLA-B51:134,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:135,YYATYRNIFTNTYENIAYLRYDYYTWAELAYLWH HLA-B51:136,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:137,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:138,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:139,YYATYRNIFTNTYENIAYIRYNYYTWAVLAYLWH HLA-B51:14,YYATYRNIFTNTYENIAYWTYKYYTWAELAYLWH HLA-B51:140,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:141,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B51:142,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:143,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWY HLA-B51:144,YYATYRNIFTNTYENIAYWTYNYYTWAELAYVWY HLA-B51:145,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:146,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B51:147,YYAMYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:148,YYATYRNIFTNTYENIAYLSYNYYTWAVLAYLWY HLA-B51:15,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B51:150,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:151,YHATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:152,YYATYRNIFTNTYENIAYWKYNYYTWAELAYLWH HLA-B51:153,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYTWH HLA-B51:154,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:155,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:156,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:157,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B51:158,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:159,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:16,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWH HLA-B51:160,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:161,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:162,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:163,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:164,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:165,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:166,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:167,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:168,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:169,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:17,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:170,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:171,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:172,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B51:174,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:175,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:176,YDSTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:177,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:179,YYSTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:18,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:180,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B51:181,YYATYRNIFTNTYENIAYWTYNYYTLAALAYLWH HLA-B51:182,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:183,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:185,YYATYRNIFTNTYESIAYWTYNYYTWAELAYLWH HLA-B51:186,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:187,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:188,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:189,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:19,YYATYRNIFTNTYENIAYWTYNYYTWAVLTYLWH HLA-B51:190,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:191,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:192,YYATYRNIFTNTYENIAYWTYNDYTWAELAYLWH HLA-B51:193,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:194,YYATYRNIFTNTYENIAYLRYNYYTWAVLAYLWH HLA-B51:195,YYATYRNIFTNTYENIAYWTYNYYIWAELAYLWH HLA-B51:196,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:197,YYATYRNIFTNTYENIAYWTYDYYTWAERAYTWY HLA-B51:198,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:199,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B51:20,YYATYRNIFTNTDENIAYWTYNYYTWAVDAYLWH HLA-B51:200,YYATYRNIFTNTYENIAYWTSNYYTWAELAYLWH HLA-B51:201,YYATYRNIFTNTDVNIAYWTYNYYTWAELAYLWH HLA-B51:202,YYATYRNIFTNTYENIACWTYNYYTWAELAYLWH HLA-B51:203,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:204,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:205,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:206,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:207,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:208,YYATYRNIFTNTDENIAYWTYNYYTWAELAYLWH HLA-B51:209,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:21,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWH HLA-B51:210,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:211,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:212,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:213,YYATYRNIFTNTYENIAYLTYNYYTWAELAYLWH HLA-B51:214,YYATYRNISTNTYENIAYWTYNDYTWAELAYLWH HLA-B51:215,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:216,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B51:217,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWH HLA-B51:218,YYSTYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:219,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:22,YYATYRNICTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:220,YYATYRNIFTNTYENIAYLRYDSYTWAEWAYLWY HLA-B51:221,YYATYRNIFTNTYENIAYWTYNYCTWAELAYLWH HLA-B51:222,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:223,YYATYRNIFTNTYENIAYWTYNLYTWAELAYLWH HLA-B51:224,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:225,YYATYRNIFTNTYENIAYWTYNLYTWAELAYLWH HLA-B51:226,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:227,YYATYRNIFTNTYENIAYIRYDYYTWAELAYLWH HLA-B51:228,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:229,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:23,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLSY HLA-B51:230,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:231,YYATYRDIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:232,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:233,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:234,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:236,YYATYRNILTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:237,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:238,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:239,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:24,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:240,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:241,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:242,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:243,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:244,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:246,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:247,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:248,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:249,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:250,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:251,YYATYRNISTNTYENIAYWTYNSYTWAELAYLWH HLA-B51:252,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:253,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:254,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:255,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:257,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:258,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:259,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B51:26,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:260,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:261,YYATYRNIFTNTYENIAYWTYDDYTWAELAYLGH HLA-B51:262,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:263,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B51:265,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:266,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:267,YYAEYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:28,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:29,YYATYRNIFTNTYENIAYWTYNYYTWAERAYLWH HLA-B51:30,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:31,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWH HLA-B51:32,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:33,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:34,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWY HLA-B51:35,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:36,YYATYRNIFTNTYENIAYWTYNYYTWAEDAYTWY HLA-B51:37,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B51:38,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:39,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:40,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWY HLA-B51:42,YYATYRNIFTNTYENIAYIRYDDYTWAVLAYLSY HLA-B51:43,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:45,YYATYRNIFTNTYENIAYLRYDSYTWAELAYLWH HLA-B51:46,YYATYRNIFTNTYENIAYITYNYYTWAELAYLWH HLA-B51:48,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:49,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:50,YYATYRNIFTNTYENGLYWTYNYYTWAELAYLWH HLA-B51:51,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:52,YYATYRNIFTNTHENIAYWTYNYYTWAELAYLWH HLA-B51:53,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:54,YYATYRNIFTNTYENTAYWTYNYYTWAVRAYLWY HLA-B51:55,YYATYRNIFTNTYENIAYWTYNYYTWAEQAYLWH HLA-B51:56,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B51:57,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:58,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:59,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWY HLA-B51:60,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:61,YYATYRNIFTNTYENIAYWTYNYYTWAEWAYLWH HLA-B51:62,YYATYRNIFTNTYENIAYLRYNLYTWAELAYLWH HLA-B51:63,YYATYRNIFTNTYENIAYWTYNSYTWAELAYLWH HLA-B51:64,YYATYRNIFTNTYENIAYLSYNYYTWAELAYLWH HLA-B51:65,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:66,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:67,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:68,YDATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:69,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:70,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:71,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:72,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:73,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B51:74,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:75,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:76,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:77,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:78,YYATYRNIFTNTYENTAYWTYNYYTWAELAYLWH HLA-B51:79,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:80,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:81,YYATYRNIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B51:82,YYATYRNIFTNTYENIAYWTYNYYTWAERAYEWH HLA-B51:83,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:84,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:85,YYATYRNIFTNTYENIAYWTYHDYTWAELAYLWH HLA-B51:86,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:87,YYATYRNIFTNTYENIAYWTYNYYTWADLAYLWH HLA-B51:88,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:89,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:90,YYATYRNIFTNTYENIAYWTYDYYTWAELAYLWH HLA-B51:91,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:92,YYATYRNIFTNTYENIAYWTYDFYTWAELAYLWH HLA-B51:93,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWY HLA-B51:94,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:95,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:96,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B51:97,YYATYRNIFTNTYENIAYWTYNSYTWAVDAYLWH HLA-B51:99,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5201,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5202,YYAMYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5203,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWY HLA-B5204,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5205,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5206,YYATYREIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B5207,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B5208,YYATYREISTNTYENIAYWTYNYYTWAELAYEWH HLA-B5209,YYATYREISTNTYESIAYWTYNYYTWAELAYLWH HLA-B5210,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWH HLA-B5211,YYATYREISTNTYENIAYWTYNYYTWAELAYLWY HLA-B52:01,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:02,YYAMYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:03,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWY HLA-B52:04,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:05,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:06,YYATYREIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:07,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:08,YYATYREISTNTYENIAYWTYNYYTWAELAYEWH HLA-B52:09,YYATYREISTNTYESIAYWTYNYYTWAELAYLWH HLA-B52:10,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWH HLA-B52:11,YYATYREISTNTYENIAYWTYNYYTWAELAYLWY HLA-B52:12,YYATYREISTNTYENIAYWTYDYYTWAELAYLWH HLA-B52:13,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:14,YYATYREISTNTYENIAYWTYNFYTWAELAYLWH HLA-B52:15,YYATYREISTNTYENIAYWTYNYYTWAELAYLSH HLA-B52:16,YYSEYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:17,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:18,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:19,YYATYREISTNTYENIAYWTYNYYTWAVDAYLWH HLA-B52:20,YYATYREISTNTYENTAYWTYNYYTWAELAYLWH HLA-B52:21,YYATYREISTNTYENIAYWTYNYYTWAEWAYLWH HLA-B52:22,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:23,YYATYREISTDTYENIAYWTYNYYTWAELAYLWH HLA-B52:24,YYATYREISTNTYENIAYWTYNYYTWAERAYLWH HLA-B52:25,YYATYREISTNTYENIAYWTYNLYTWAELAYLWH HLA-B52:26,YYATYREISTNTYENIAYWTYDDYTWAELAYLWH HLA-B52:27,YYSTYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:28,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:29,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:30,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:31,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:32,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:33,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:34,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:35,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:36,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:37,YYATYREISTNTYENIAYWTYNYYTWAELAYTWH HLA-B52:38,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:39,YYATYREISTNTYENIAYWTYNSYTWAELAYLWH HLA-B52:40,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:41,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:42,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:43,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:44,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:45,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:46,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:47,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:48,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:50,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:51,YHATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:52,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:53,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:54,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:55,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:56,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:57,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:58,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:59,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:60,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:61,YYATYREISTNTYENIAYWTYNYYTWAEVAYLWH HLA-B52:62,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:63,YYATYREISTNTYENIAYWTYDYYTWAELAYLWH HLA-B52:64,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:65,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:66,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:67,YYATYREISTNTYENIAYWTYNYYTWAELAYEWY HLA-B52:68,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:69,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:70,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:71,YYATYREISTNTYENIAYWTYNYYTWAVLTYTWH HLA-B52:72,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:73,YYATYRQISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:74,YYATYREISTNTYENIAYWTYNYYTLAVLAYLWH HLA-B52:75,YYATYREISTNTYENIAYWTYDFYTWAELAYLWH HLA-B52:76,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:77,YDSTYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:78,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:79,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:80,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:81,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:82,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:83,YYTTYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B52:84,YYATYREISTNTYENIAYWTYNYYTWAELTYTWH HLA-B5301,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B5302,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWH HLA-B5303,YYATYRNIFTNTYEDTLYIRYDSYTWAVLAYLWY HLA-B5304,YYATYRNIFTNTYENIAYIRYDFYTWAVLAYLWY HLA-B5305,YYATYRNIFTNTYESIAYIRYDSYTWAVLAYLWY HLA-B5306,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWH HLA-B5307,YYATYRNIFTNTYENIAYIRSNFYTWAVLAYLWY HLA-B5308,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWY HLA-B5309,YYATYRNISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B5310,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B5311,YYATYRNIFTNTYENTAYIRYDSYTWAVRAYLWY HLA-B5312,YYATYRNIFTNTYESTAYIRYDSYTWAVLAYLWY HLA-B5313,YYATYRNIFTNTYENTAYIRYDSYTWAVLAYLWY HLA-B53:01,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:02,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWH HLA-B53:03,YYATYRNIFTNTYEDTLYIRYDSYTWAVLAYLWY HLA-B53:04,YYATYRNIFTNTYENIAYIRYDFYTWAVLAYLWY HLA-B53:05,YYATYRNIFTNTYESIAYIRYDSYTWAVLAYLWY HLA-B53:06,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWH HLA-B53:07,YYATYRNIFTNTYENIAYIRSNFYTWAVLAYLWY HLA-B53:08,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWY HLA-B53:09,YYATYRNISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B53:10,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:11,YYATYRNIFTNTYENTAYIRYDSYTWAVRAYLWY HLA-B53:12,YYATYRNIFTNTYESTAYIRYDSYTWAVLAYLWY HLA-B53:13,YYATYRNIFTNTYENTAYIRYDSYTWAVLAYLWY HLA-B53:14,YYATYRNIFTNTYENIAYLSYDSYTWAVLAYLWY HLA-B53:15,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:16,YYATYRNIFTNTYESIAYIRYDSYTWAVRAYLWY HLA-B53:17,YYATYREISTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:18,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:19,YYATYRNIFTNTYENIAYIRYNYYTWAVLAYLWY HLA-B53:20,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:21,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:22,YYATYRNIFTNTYENIAYIRYDSYTWAVDAYLSY HLA-B53:23,YYATYRNIFTNTDENIAYIRYDSYTWAVLAYLWY HLA-B53:24,YYATYRNIFTNTYENIAYIRYDSYTWAVRAYLWY HLA-B53:25,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:26,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:27,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:28,YYATYREISTNTYENIAYIRYDSYTWAELAYLWH HLA-B53:29,YYATYRNIFTNTYENIAYIGYDSYTWAVLAYLWY HLA-B53:30,YYAKYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:31,YYATYRNIFTNTYENTAYIRYDFYTWAVLAYLWY HLA-B53:32,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:33,YYATYRNIFTNTYESIAYIRYDFYTWAVLAYLWY HLA-B53:34,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:35,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:36,YYATYRNIFTNTYENTAYIRYNYYTWAVLAYLWY HLA-B53:37,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:38,YYATYREISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B53:39,YYAKYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:40,YYATYRNISTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:41,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:42,YYATYRNIFTNTYENIAYIRYDYYTWAVLAYLWY HLA-B53:43,YYSTYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:44,YYATYRNIFTNTYENIAYLRYDSYTWAVLAYLWY HLA-B53:45,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:46,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:47,YYATYRNIFTNTYENIAYLRYDSYTWAVLAYLWY HLA-B53:49,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:50,YYATYRNIFTNTYENIAYIRYNSYTWAVLAYLWY HLA-B53:51,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:52,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B53:53,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B5401,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5402,YHAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5403,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B5404,YYAGYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B5405,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5406,YYAGYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B5407,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5409,YYAGYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B5410,YYAGYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B5411,YYAGYRNIYAQTDESNLYWTYNYYSWAVLAYTWY HLA-B5412,YYAGYRNIYAQTDENIAYWTYNLYTWAVLAYTWY HLA-B5413,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:01,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:02,YHAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:03,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B54:04,YYAGYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B54:06,YYAGYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B54:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:09,YYAGYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B54:10,YYAGYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B54:11,YYAGYRNIYAQTDESNLYWTYNYYSWAVLAYTWY HLA-B54:12,YYAGYRNIYAQTDENIAYWTYNLYTWAVLAYTWY HLA-B54:13,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:14,YYAGYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B54:15,YYAGYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B54:16,YYAGYRNIYAQTDESNLYWTYDLYTWAVLAYTWY HLA-B54:17,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:18,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:19,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:20,YYAGYRNIYAQTDESNLYWTYNLYTWAERAYTWY HLA-B54:21,YYSGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:22,YYAGYRNIYAQTDESNLYWTYNLYSWAVLAYTWY HLA-B54:23,YYAGYRNIYAQTEESNLYWTYNLYTWAVLAYTWY HLA-B54:24,YYAGYRNIFAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:25,YYAGYRNIYAETDESNLYWTYNLYTWAVLAYTWY HLA-B54:26,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B54:27,YYAGYRNIYAQTDESNLYWTYNLYAWAVLAYTWY HLA-B54:28,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:29,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:30,YYAGYRNIYANTYESNLYWTYNLYTWAVLAYTWY HLA-B54:31,YYAGYRNIYAQTDESNLYWTYNLCTWAVLAYTWY HLA-B54:32,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:33,YYAGYRNIYAQTDESNLYWTYNLYTWAEWAYLWY HLA-B54:34,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:35,YYAGYREIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:36,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:37,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B54:38,YYAGYRNIYAQTDESNLYLWCNLYTWAVLAYTWY HLA-B5501,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B5502,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5503,YYAEYRNIYAQTDVSNLYWTYNLYTWAELAYTWY HLA-B5504,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYTWY HLA-B5505,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B5507,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5508,YYAEYRNIYAQTDESNLYLRYNYYTWAVLAYLWY HLA-B5509,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B5510,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5511,YYAEYRNIYAQTDESNLYWMYNLYTWAELAYTWY HLA-B5512,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYTWY HLA-B5513,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYTWY HLA-B5514,YYAEYRNIYAQTDESNLYIVYDSYTWAELAYTWY HLA-B5515,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B5516,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5517,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B5518,YYAEYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B5519,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5520,YYAEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B5521,YYAEYRNIYAQTDESNLYWTYNLYTWAEWAYTWY HLA-B5522,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B5523,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B5524,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYEWY HLA-B5525,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B5526,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B5527,YYAEYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B55:01,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:02,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:03,YYAEYRNIYAQTDVSNLYWTYNLYTWAELAYTWY HLA-B55:04,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYTWY HLA-B55:05,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:08,YYAEYRNIYAQTDESNLYLRYNYYTWAVLAYLWY HLA-B55:09,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B55:10,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:11,YYAEYRNIYAQTDESNLYWMYNLYTWAELAYTWY HLA-B55:12,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYTWY HLA-B55:13,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYTWY HLA-B55:14,YYAEYRNIYAQTDESNLYIVYDSYTWAELAYTWY HLA-B55:15,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:16,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:17,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B55:18,YYAEYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B55:19,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:20,YYAEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B55:21,YYAEYRNIYAQTDESNLYWTYNLYTWAEWAYTWY HLA-B55:22,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B55:23,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B55:24,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYEWY HLA-B55:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:27,YYAEYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B55:28,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B55:29,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:30,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:31,YYAEYRNIYAQTYESNLYWTYNLYTWAELAYTWY HLA-B55:32,YYAEYRNIYAQTDESNLYWTYNSYTWAVLAYTWY HLA-B55:33,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:34,YYAEYREISAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:35,YYAMYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:36,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:37,YYAEYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B55:38,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:39,YYAEYRNIYAQTDESNLYWTYNLHTWAVLAYTWY HLA-B55:40,YYAEYREIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:41,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:42,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:43,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:44,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:45,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:46,YYAEYRNIYAQTDESNLYWTYDLYTWAVLAYTWY HLA-B55:47,YYAEYRNISAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:48,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:49,YYAEYRNIYAQTDVSNLYLSYNYYTWAVLAYTWY HLA-B55:50,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:51,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYLWY HLA-B55:52,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYTWY HLA-B55:53,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:54,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:56,YYAEYRNIYAQTDESNLYWTYNLYTWAEDAYTWY HLA-B55:57,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:58,YYAEYRNIYAQTDESNLYWTYNFYTWAELAYTWY HLA-B55:59,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:60,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:61,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:62,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:63,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:64,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:65,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:66,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:67,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:68,YYAEYRNIYAQTDESNLYWTYDSYTWAELAYTWY HLA-B55:69,YYAEYRNIYAQTDVSNLYWTYNLYTWAVLAYTWY HLA-B55:70,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:71,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:72,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:73,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:74,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:75,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:76,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:77,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:78,YYAEYRNIYANTDESNLYWTYNLYTWAELAYTWY HLA-B55:79,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:80,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:81,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B55:82,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:84,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:85,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:86,YYAEYRNIYAQTDESNLYLSYNYYTRAVLAYTWY HLA-B55:87,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:88,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B55:90,YYAEYRNIYAQTDEDTLYWTYNLYTWAELAYTWY HLA-B55:91,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:92,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:93,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:94,YYAEYRNIYAQTDESNLYWTYNLCTWAELAYTWY HLA-B55:95,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B55:96,YYAEYRNIYAQTDESNLYWTYNLYTWVVLAYTWY HLA-B5601,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B5602,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B5603,YYAEYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B5604,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B5605,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B5606,YYATYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B5607,YYAEYRNIYAQTDENTAYWTYNLYTWAVLAYLWY HLA-B5608,YYAEYREKYGQTDESNLYWTYNLYTWAVLAYLWY HLA-B5609,YYAEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B5610,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYTWY HLA-B5611,YYAEYRNIYAQTDESNLYIRYDFYTWAVLAYLWY HLA-B5612,YYAEYRNIYAQTDESNLYIRYNYYTWAVLAYTWY HLA-B5613,YYAEYRNIYAQTDESNLYWTYNLYTWAVDAYLWY HLA-B5614,YYAEYREKYRQTDESNLYWTYNLYTWAVLAYLWY HLA-B5615,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYLWY HLA-B5616,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B5617,YYAEYRNIYANTDESNLYWTYNLYTWAVLAYLWY HLA-B5618,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B5620,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:01,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:02,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B56:03,YYAEYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B56:04,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B56:05,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B56:06,YYATYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B56:07,YYAEYRNIYAQTDENTAYWTYNLYTWAVLAYLWY HLA-B56:08,YYAEYREKYGQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:09,YYAEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B56:10,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYTWY HLA-B56:11,YYAEYRNIYAQTDESNLYIRYDFYTWAVLAYLWY HLA-B56:12,YYAEYRNIYAQTDESNLYIRYNYYTWAVLAYTWY HLA-B56:13,YYAEYRNIYAQTDESNLYWTYNLYTWAVDAYLWY HLA-B56:14,YYAEYREKYRQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:15,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYLWY HLA-B56:16,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:17,YYAEYRNIYANTDESNLYWTYNLYTWAVLAYLWY HLA-B56:18,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B56:20,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:21,YYAEYRNIYAQTDENIAYWTYNYYTWAELAYLWH HLA-B56:22,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYLWY HLA-B56:23,YYAEYRNIYANTYESNLYWTYNLYTWAVLAYTWY HLA-B56:24,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYLWY HLA-B56:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:27,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:29,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:30,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:31,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWH HLA-B56:32,YYAEYRNIYAQTDESNLYLRYDSYTWAELAYTWY HLA-B56:33,YYAEYRNICTNTDESNLYWTYNLYTWAVLAYLWY HLA-B56:34,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWH HLA-B56:35,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:36,YYTEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:37,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYLWY HLA-B56:39,YYAMYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:40,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:41,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYLWY HLA-B56:42,YYAEYRNIYTNTYESNLYWTYNLYTWAVLAYLWY HLA-B56:43,YYAEYRNIYAQTDESNLYWTYNLYTWAVWAYLWY HLA-B56:44,YYAEYRNISTNTYESNLYWTYNLYTWAVLAYLWY HLA-B56:45,YYATYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:46,YYAEYRNIYAQTDESTLYWTYNLYTWAVLAYLWY HLA-B56:47,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:48,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:49,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:50,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYLWY HLA-B56:51,YYAEYRNIYAQTDESNLYLRYNLYTWAVRAYLWY HLA-B56:52,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:53,YYAEYRNIYVQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:54,YYAEYRNIYTNTYESNLYWTYNLYTWAVLAYTWY HLA-B56:55,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:56,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B56:57,YYAEYQNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B56:58,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:59,YYAEYRNIYAQTDESNLYWTYNLYTWAALAYLWY HLA-B56:60,YYAEYRNIYAQTDESNLYIRYNLYTWAVLAYEWY HLA-B56:61,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:62,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B56:63,YYAEYRNIYAQTDESNLYLRYNLYTWAVRAYLWY HLA-B56:64,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B5701,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B5702,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B5703,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B5704,YYAMYGENMASTYENIAYIVYDDYTWAVRAYLWY HLA-B5705,YYAMYGENMASTYENIAYIRYNYYTWAVRAYLWY HLA-B5706,YYAMYGENMASTYENIAYIVYDSYIWAVLAYLWY HLA-B5707,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLSY HLA-B5708,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B5709,YYAMYGENMASTYENIAYIVYNYYTWAEDAYLWY HLA-B5710,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B5711,YYAMYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B5712,YYAMYGENMASTYESNLYIVYNYYTWAVRAYLWY HLA-B5713,YYAMYGENMASTYENIAYIVYDSYTWAERAYEWY HLA-B57:01,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:02,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B57:03,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:04,YYAMYGENMASTYENIAYIVYDDYTWAVRAYLWY HLA-B57:05,YYAMYGENMASTYENIAYIRYNYYTWAVRAYLWY HLA-B57:06,YYAMYGENMASTYENIAYIVYDSYIWAVLAYLWY HLA-B57:07,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLSY HLA-B57:08,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:09,YYAMYGENMASTYENIAYIVYNYYTWAEDAYLWY HLA-B57:10,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:100,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:101,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:102,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:103,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:104,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:105,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:106,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:107,YYAMYGENMASTYENIAYIVYNSYTWAVLAYLWY HLA-B57:108,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:109,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:11,YYAMYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B57:110,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:111,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:112,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:113,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:114,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:12,YYAMYGENMASTYESNLYIVYNYYTWAVRAYLWY HLA-B57:13,YYAMYGENMASTYENIAYIVYDSYTWAERAYEWY HLA-B57:14,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWH HLA-B57:15,YYAMYGENVASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:16,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:17,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:18,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:19,YYAMYGENMASTYENIAYIVYDSYTWAVRAYLWY HLA-B57:20,YYAMYGKNMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:21,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:22,YYAMYGENMASTYENIAYIVYDSYTWAELAYLWY HLA-B57:23,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:24,YYAMYGENMASTYENIAYIVYDSYTWAVDAYLWY HLA-B57:25,YYAMYGENMASTYENIAYIVYDSYTWAVLAYEWY HLA-B57:26,YYAMYGENMASTYENIAYIVYDSYTWAVLAYTWY HLA-B57:27,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:29,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:30,YYAMYGENMASTYENIAYIVYDSYTWAARAYLWY HLA-B57:31,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:32,YYAMYGENMASTYENIAYIVYHDYTWAVLAYLWY HLA-B57:33,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:34,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:35,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:36,YYAMYGEHMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:37,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:38,YYAMYGENMASTYETIAYIVYDSYTWAVLAYLWY HLA-B57:39,YHAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:40,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:41,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:42,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B57:43,YYAMYGENMASTYENIAYIVYDSYTWAVLAYPWY HLA-B57:44,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:45,YYAKYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:46,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:47,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:48,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:49,YDAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:50,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:51,YHTKYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:52,YYAMYGENMASTYENIAYIVYDSYTWAVLASLWY HLA-B57:53,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:54,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:55,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:56,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:57,YYAMYGENMASTYENIAYIVYNYYTWAELAYLWY HLA-B57:58,YYSMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:59,YYAMYGENMASTYENIAYIVYDSYSLAVLAYLWY HLA-B57:60,YYAMYGENMASTYESIAYIVYDSYTWAVLAYLWY HLA-B57:61,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:62,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:63,YYAMYGENMASTYENIAYIVYNYYTWAERAYLWY HLA-B57:64,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:65,YYAMYGENMASTYENIAYIVYDSYTWVVLAYLWY HLA-B57:66,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:67,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:68,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:69,YYTKYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:70,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLCY HLA-B57:71,YYTMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:72,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:73,YHAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:74,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:75,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:76,YYAMYGENMASTYENIAYIVYDFYTWAVLAYLWY HLA-B57:77,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:78,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:80,YYSMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:81,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:82,YYAMYGENMASTYENIAYLRYNYYTWAVLAYLWY HLA-B57:83,YYAMYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B57:84,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:85,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:86,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:87,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:88,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:89,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:90,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:91,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:92,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:93,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLSY HLA-B57:94,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:95,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:96,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B57:97,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B57:99,YYAMYGENMASTYENIAYTVYDSYTWAVLAYLWY HLA-B5801,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5802,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B5804,YYATYEENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5805,YYATYGENMASTYENIAYIRYDSYTLAALAYTWY HLA-B5806,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B5807,YYATYGENMASTYENIAYLWYDSYTWAVLAYLSY HLA-B5808,YYATYGENMASTYENIAYWTYNYYTWAELAYLWH HLA-B5809,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWH HLA-B5811,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5812,YYSTYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5813,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5814,YYATYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B5815,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:01,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:02,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B58:04,YYATYEENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:05,YYATYGENMASTYENIAYIRYDSYTLAALAYTWY HLA-B58:06,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B58:07,YYATYGENMASTYENIAYLWYDSYTWAVLAYLSY HLA-B58:08,YYATYGENMASTYENIAYWTYNYYTWAELAYLWH HLA-B58:09,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWH HLA-B58:100,YYATYRENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:11,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:12,YYSTYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:13,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:14,YYATYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B58:15,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:16,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B58:18,YYATYGENMASTYENIAYLSYDSYTWAVLAYLWY HLA-B58:19,YYATYGENMASTYENIAYIRYDSYTWAELAYLWY HLA-B58:20,YYATYGENMASTYENIAYLRYNFYTWAVLTYTWY HLA-B58:21,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:22,YYATYGENMASTYENIAYIRYDSYTWAVRAYLWY HLA-B58:23,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:24,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:25,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B58:26,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B58:27,YYATYGENMASTYENIAYLSYNYYTWAVLAYEWY HLA-B58:28,YYATYGENMASTYENIAYIRYNYYTWAVLAYLWY HLA-B58:29,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:30,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:32,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:33,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:34,YYATYGENMASTYENIAYIRYDFYTWAVLAYLWY HLA-B58:35,YYATYGENMASTYENIAYIRYDSYTWAVLAYTWY HLA-B58:36,YYAMYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:37,YYATYGENMASTYENIAYIRYDSYTWAVLAYEWY HLA-B58:38,YYATYGENMASTYENIAYLWYDSYTWGVLAYLWY HLA-B58:40,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:41,YHATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:42,YYATYGENMASTYENIAFIRYDSYTWAVLAYLWY HLA-B58:43,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B58:44,YYAEYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:45,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:46,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B58:47,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:48,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:49,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:50,YYATYGESMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:51,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:52,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:53,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:54,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:55,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:56,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:57,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:58,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:59,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:60,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B58:61,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:62,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:63,YYATFGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:64,YYATYGENMASTYESNLYIRYDSYTWAVLAYLWY HLA-B58:65,YYATYGENMASTYENIAYIRYNYYTWAVLAYLWY HLA-B58:66,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:67,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:68,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:69,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:70,YYATYGENMASTYENIACIRYDSYTWAVLAYLWY HLA-B58:71,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:73,YYATYGENMASTYENIAYIRYNLYTWAVLAYLWY HLA-B58:74,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:75,YYATYGENMASTYEKIAYIRYDSYTWAVLAYLWY HLA-B58:76,YYATYGENMASTYENIAYIRYDSYTWAVLAYTWH HLA-B58:77,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:78,YYATYGENMASTYENIAYIRYDSYTWAEWAYLWY HLA-B58:79,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:80,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:81,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:82,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:83,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:84,YYATYGENMASTYENIAYIRYDSYTWAVLTYTWY HLA-B58:85,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:86,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:87,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:88,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:89,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:90,YYATCGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:91,YYATYGENMASTYENIAYIRYDSYTWAELAYLWY HLA-B58:92,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:95,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:96,YYATYGENMASTYDNIAYIRYDSYTWAVLAYLWY HLA-B58:97,YYATYGENLASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:98,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B58:99,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B5901,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B5902,YYAEYRNIFTNTYENIAYWTYNYYTWAVLAYTWY HLA-B59:01,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B59:02,YYAEYRNIFTNTYENIAYWTYNYYTWAVLAYTWY HLA-B59:03,YYAEYRNIFTNTYENIAYWTYNFYTWAVLAYTWY HLA-B59:04,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B59:05,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B59:06,YYAGYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B59:07,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B59:08,YYAEYRNICTNTYENTAYWTYNLYTWAVLAYTWY HLA-B59:09,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYEWY HLA-B6701,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B6702,YYSGYREKYRQADVSNLYLRYNFYTWAVLTYTWY HLA-B67:01,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B67:02,YYSGYREKYRQADVSNLYLRYNFYTWAVLTYTWY HLA-B67:03,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B67:04,YYSEYWNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B67:05,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B67:06,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWH HLA-B67:07,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B7301,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B73:01,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B73:02,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B7801,YYATYRNIFTNTDESNLYWTYNYYTWAELAYLWH HLA-B7802,YYATYRNIFTNTYESNLYWTYNYYTWAELAYLWH HLA-B7803,YYATYRNICTNTDESNLYWTYNYYTWAELAYLWH HLA-B7804,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B7805,YYATYREISTNTYESNLYWTYNYYTWAELAYLWH HLA-B78:01,YYATYRNIFTNTDESNLYWTYNYYTWAELAYLWH HLA-B78:02,YYATYRNIFTNTYESNLYWTYNYYTWAELAYLWH HLA-B78:03,YYATYRNICTNTDESNLYWTYNYYTWAELAYLWH HLA-B78:04,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B78:05,YYATYREISTNTYESNLYWTYNYYTWAELAYLWH HLA-B78:06,YYATYREISTNTYENNLYWTYNYYTWAELAYLWH HLA-B78:07,YYATYRNIFTNTDESNLYWTYNYYTWAELAYTWH HLA-B78:08,YYATYRNIFTNTDESNLYWTYNYYTWAVLAYEWH HLA-B78:09,YYATYRNIFTNTYENNLYWTYNYYTWAELAYLWH HLA-B78:10,YYATYRNIFTNTYENNLYWTYNYYTWAVLAYLWH HLA-B8101,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B8102,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:01,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:02,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:03,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:05,YYSEYRNIFAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:06,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:07,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B81:08,YYSEYRNIYAQTYESNLYLSYNYYSLAVLAYEWY HLA-B8201,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B8202,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B82:01,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B82:02,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B82:03,YYSEYRNIYAQTDESNLYLRYNLYTWAVDAYLSY HLA-B8301,YYSEYRNIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B83:01,YYSEYRNIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B9501,YYAMYREIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B9502,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9503,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B9504,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9505,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9506,YYAKYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B9507,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B9508,YYSEYRNICTNTYESNLYLRYDSYTWAELTYLWY HLA-B9509,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B9510,YYAMYREISTNTYESNLYLRCDSYTWAEWAYLWY HLA-B9512,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B9513,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9514,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B9515,YYSEYRNICTNTYESTAYLRYDSYTWAELAYLWY HLA-B9516,YYAMYREISTNTYESNLYLRYDSYSLAEWAYLWY HLA-B9517,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B9518,YYAMYREISTNTYESNLYLMYDSYTWAEWAYLWY HLA-B9519,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B9520,YYAMYRDISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9521,YYAMYRNISTNTYESNLYIRYDSYTWAELAYTWY HLA-B9522,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9523,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B9524,YYSEYRNICTNTYESNLYLRYDSYSLAVLAYEWY HLA-B9525,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9526,YYAMYREISTNTYESNLYLSYDSCTWAEWAYLWY HLA-B9527,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B9528,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B9529,YYAMYREISTNTYESNLYLNYDSYTWAEWAYLWY HLA-B9530,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B9532,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-C0102,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0103,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C0104,YFSGYREKYRQTDVSNLYLWCDSYTWAEWAYTWY HLA-C0105,YFSGYREKYRQTDVSNLYLRSDYYTWAERAYTWY HLA-C0106,YFSGYREKYRQTDVSNLYLWCDYYTWAVRAYTWY HLA-C0107,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0108,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0109,YFSGYREKYRQTDVSNLYLWCDYYTWAEWAYTWY HLA-C0110,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYEWY HLA-C0111,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0112,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C0113,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:02,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:03,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C01:04,YFSGYREKYRQTDVSNLYLWCDSYTWAEWAYTWY HLA-C01:05,YFSGYREKYRQTDVSNLYLRSDYYTWAERAYTWY HLA-C01:06,YFSGYREKYRQTDVSNLYLWCDYYTWAVRAYTWY HLA-C01:07,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:08,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:09,YFSGYREKYRQTDVSNLYLWCDYYTWAEWAYTWY HLA-C01:10,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYEWY HLA-C01:100,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:101,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C01:102,YFSGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C01:103,YFSGYREKYRQTDVSNLYLWCDHYTWAERAYTWY HLA-C01:104,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:105,YFSGYREKYRQTDVSNLYLWCDYYTGAERAYTWY HLA-C01:106,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:107,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYLWY HLA-C01:108,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:11,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:110,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:112,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:113,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:114,YFSGYREKYRQTDVSNLYLWFDYYTWAERAYTWY HLA-C01:115,YFSGYREKYRQTDVSNLYLWCDDYTWAERAYTWY HLA-C01:116,YFSGYREKYRQTDVSNLYLWCNYYTWAERAYTWY HLA-C01:118,YFSGYRENYRQTDVNNLYLWCDYYTWAERAYTWY HLA-C01:119,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:12,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C01:120,YFSGYREKYRQTDVSNLYLRCDYYTWAERAYTWY HLA-C01:122,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:123,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:124,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:125,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:126,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:127,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:128,YFSGYRENYRQADVSNLYLWCDYYTWAERAYTWY HLA-C01:129,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:13,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:130,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:131,YFSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C01:132,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:133,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:134,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:135,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:136,YFSGYREKYRQTDVSNLYLWCDLYTWAERAYTWY HLA-C01:138,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:139,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:14,YFSGYREKYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C01:140,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYAWY HLA-C01:141,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:142,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:144,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:146,YFSGYREKYRQTDVSNLYLWCDFYTWAERAYTWY HLA-C01:147,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:148,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:149,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:15,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:150,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:151,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:152,YFSGYREKYRQADVSNLYLWCDSYTWAERAYTWY HLA-C01:153,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:154,YFSGYREKYRQTDVSKLYLWCDYYTWAERAYTWY HLA-C01:155,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:156,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:157,YFSGYREKYRQADESNLYLWCDYYTWAERAYTWY HLA-C01:158,YFSGYREKYRQTDVSNLYFWCDYYTWAERAYTWY HLA-C01:159,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:16,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:160,YFSGYREKYRQTDVSNLYLWCDYYTWAALAYTWY HLA-C01:161,YFSGCREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:162,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:163,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:164,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:165,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:166,YFSGYWEKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:167,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:168,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:169,YYSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:17,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C01:170,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:172,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:173,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:174,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:175,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:176,YFSGYREKYRQTDVSNLYIWCDYYTWAERAYTWY HLA-C01:18,YFSGYREKYHQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:19,YFSGYREKYRQTDVCNLYLWCDYYTWAERAYTWY HLA-C01:20,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:21,YFSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C01:22,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYTWY HLA-C01:23,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C01:24,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C01:25,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:26,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:27,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:28,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:29,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTCY HLA-C01:30,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWH HLA-C01:31,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYMWY HLA-C01:32,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:33,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:34,YFSGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C01:35,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYLWY HLA-C01:36,YFSGYREKYRQTDVSNLYLRFDYYTWAERAYTWY HLA-C01:38,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:39,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:40,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:41,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:42,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:43,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:44,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:45,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:46,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:47,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:48,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:49,YFSGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C01:50,YFSGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C01:51,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:52,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:53,YFSGYREKYRQTDVSNLYLWCDYCTWAERAYTWY HLA-C01:54,YFSGYREKYRQTDVSNLYLWCDSYTWAERAYTWY HLA-C01:55,YFSGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C01:57,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:58,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:59,YFSGYREKYRQTDVNNLYLWCDYYTWAERAYTWY HLA-C01:60,YFSGYREKYRQTDVSNLYLWCDYYTLAERAYTWY HLA-C01:61,YFSGYREKYRQTDVRNLYLWCDYYTWAERAYTWY HLA-C01:62,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:63,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:64,YFAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:65,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:66,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:67,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:68,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:70,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:71,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:72,YFSGYREKYRRTDVSNLYLWCDYYTWAERAYTWY HLA-C01:73,YFSMYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:74,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:75,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:76,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:77,YFSGYREKYRQTDVSNLYLWSDYYTWAERAYTWY HLA-C01:78,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C01:79,YFSGYREKYRQTDVSNLYLRYDYYTWAERAYTWY HLA-C01:80,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:81,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:82,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:83,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:84,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:85,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:87,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:88,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:90,YFSGYREKYRQTDVSNLYLWCNLYTWAERAYTWY HLA-C01:91,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:92,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:93,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:94,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:95,YFSGYREKYRQTDESNLYLWCDYYTWAERAYTWY HLA-C01:96,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C01:97,YFSGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C01:99,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0202,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0203,YYAGYREKYRQTDVNKLYLRYDSYTWAVLAYEWY HLA-C0204,CYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0205,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYEWY HLA-C0206,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C0207,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C0208,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0209,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0210,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0211,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0212,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYEWY HLA-C0213,YYAGYREKYRQTDVNKLYLRYDSYTWAAWAYEWY HLA-C0214,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:02,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:03,YYAGYREKYRQTDVNKLYLRYDSYTWAVLAYEWY HLA-C02:04,CYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYEWY HLA-C02:06,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C02:07,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C02:08,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:09,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:10,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:100,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:101,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:102,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:103,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:104,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:106,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:107,YDSGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:108,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:109,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:11,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:110,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:111,YYAGYREKYRQTDVNKLYLRYDFYTWAEWAYEWY HLA-C02:112,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:113,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:114,YYAGYREKYRQTDVNKLCLRYDSYTWAEWAYEWY HLA-C02:115,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYEWY HLA-C02:116,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:117,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:118,YYAGYREKYRQTDVNKLYLRYNSYTWAEWAYEWY HLA-C02:119,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:12,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYEWY HLA-C02:120,YYAGYWEKYRQTDVNKLHLRYDSYTWAEWAYEWY HLA-C02:122,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:123,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:124,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:125,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:126,YYAGYREKYRQTDVSKLYLRYDSYTWAEWAYEWY HLA-C02:127,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:128,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:129,YYAGYREKYRQTDVTKLYLRYDSYTWAEWAYEWY HLA-C02:13,YYAGYREKYRQTDVNKLYLRYDSYTWAAWAYEWY HLA-C02:130,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:131,YYAGYREKYRQTDESNLYLRYDSYTWAEWAYEWY HLA-C02:132,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:133,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:134,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:136,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:137,YYAGYREKYRQTDVNKLYLRYDSYTWAELAYEWY HLA-C02:138,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:139,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:14,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:140,YYAGYREKYRQTDVNKLYLKYDSYTWAEWAYEWY HLA-C02:141,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWC HLA-C02:142,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWH HLA-C02:143,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:144,YYAGYPEKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:145,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:146,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:147,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:148,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:149,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:15,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:151,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:152,YYSGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:153,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:154,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:155,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:156,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:157,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:158,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C02:159,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:16,YYAGYREKYRQTDVNKLYLRYDSYTWAELAYEWY HLA-C02:160,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:161,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:162,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:163,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:164,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:166,YYAGYREKYHQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:17,YYAGYREKYRQTDVNKLYLWFDSYTWAEWAYEWY HLA-C02:18,YYAGYREKYRQTDVNKLYLRYDSYTWAALAYEWY HLA-C02:19,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C02:20,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:22,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYEWY HLA-C02:23,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C02:24,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:26,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:27,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-C02:28,YYAGYREKYRQTDVNKLYLRYDSYTWAVWAYEWY HLA-C02:29,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:30,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:31,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:32,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYEWY HLA-C02:33,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:34,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:35,YYAGYREKYRQTDVNKLHLRYDSYTWAEWAYEWY HLA-C02:36,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:37,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:39,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:40,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:42,YYSGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:43,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYTWY HLA-C02:44,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:45,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:46,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:47,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C02:48,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:49,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYEWY HLA-C02:50,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:51,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:53,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:54,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:55,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYEWY HLA-C02:56,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:57,YYAGYREKYRQTDVNKLYFRYDSYTWAEWAYEWY HLA-C02:58,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYLWY HLA-C02:59,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:60,YYAGYREKYRQTDVNKLYLSYDSYTWAEWAYEWY HLA-C02:61,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:62,YYAGYREKYRQTDVNKLYIRYDSYTWAEWAYEWY HLA-C02:63,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:64,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:65,YYAGYREKYRQTDVNNLYLRYDSYTWAEWAYEWY HLA-C02:66,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:68,YYAGYREKYRQTDVNKLYLRYNSYTWAEWAYEWY HLA-C02:69,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:70,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:71,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:72,YYAGYREKYRQTDVNKLYLRYDSYTWAEWVYEWY HLA-C02:73,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:74,YYAGYREKYRQTDVNKLYVRYDSYTWAEWAYEWY HLA-C02:75,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:76,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:77,YYAGYREKYRQTDVNKLYLRSDSYTWAEWAYEWY HLA-C02:78,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:79,YYAGYGEKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:80,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:81,YYAGYREKYRQTDVNKLYRRYDSYTWAEWAYEWY HLA-C02:82,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYESY HLA-C02:83,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:84,YYAGYREKYRRTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:85,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:86,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:87,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-C02:88,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:89,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:90,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:91,YYAGYREKYRQTDVNKLYLRYGSYTWAEWAYEWY HLA-C02:93,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:94,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:95,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:96,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:97,YYAGYREKYRQTDVNKLYLRYDDYTWAEWAYEWY HLA-C02:98,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C02:99,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C0301,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C0302,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C0303,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0304,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0305,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C0306,YYAGYREKYRQTDVSNLYIRYVYYTWAELAYLWY HLA-C0307,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C0308,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0309,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0310,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C0311,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0312,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C0313,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C0314,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C0315,YYAGYREKYRQADVNKLYLRYDSYTWAELAYLWY HLA-C0316,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C0317,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C0318,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0319,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C0321,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C0322,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0323,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0324,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C0325,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:01,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:02,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:03,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:04,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:05,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:06,YYAGYREKYRQTDVSNLYIRYVYYTWAELAYLWY HLA-C03:07,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C03:08,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:09,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:10,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C03:100,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:101,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:102,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C03:103,YYAGYREKYRQTDVSNLYIRSDYYTWAELAYLWY HLA-C03:104,YYAGYPEKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:105,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:106,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:107,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:108,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:109,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:11,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:110,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:111,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:112,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:113,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C03:114,YYAGYREKYRQTDVSNLYIRYGYYTWAELAYLWY HLA-C03:115,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:116,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:117,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C03:118,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:119,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:12,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C03:120,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:122,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:123,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:124,YYAGYWEKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:125,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:126,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:127,YYAGYREKYRQTDESNLYIRYDYYTWAELAYLWY HLA-C03:128,YYAGYREKYRQTDVSNLYIRCDYYTWAELAYLWY HLA-C03:129,YYAGYREKYRQTDVSNLYIRYDYYSWAELAYLWY HLA-C03:13,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:130,YYAGYREKYRQADVNNLYIRYDYYTWAELAYLWY HLA-C03:131,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:132,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:133,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:134,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:135,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:136,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C03:137,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:138,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:139,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:14,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C03:140,YYAGYREKYRQTDVNNLYIRYDYYTWAELAYLWY HLA-C03:141,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:142,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYEWY HLA-C03:143,YYAGYREKYRQTDVSNLYISYDYYTWAELAYLWY HLA-C03:144,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:145,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:146,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:147,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:148,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:149,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:15,YYAGYREKYRQADVNKLYLRYDSYTWAELAYLWY HLA-C03:150,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:151,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:152,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:153,YYAGYREKYRQTDVSNLYIRHDYYTWAELAYLWY HLA-C03:154,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:155,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:156,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:157,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:158,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:159,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:16,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C03:160,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:161,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWH HLA-C03:162,YYAGYREKYRQTDVSNLYIRYDYYTLAALAYLWY HLA-C03:163,YYAGYREKYRQADVNKLYIRYDYYTWAELAYLWY HLA-C03:164,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:165,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:166,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:167,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:168,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:17,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C03:170,YCAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:171,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:172,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:173,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:174,YYAGYQEKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:175,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:176,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:177,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:178,YYAGYREKYRQTDVSNLYLRSDYYTWAELAYLWY HLA-C03:179,YYAGYREKYRQTYESNLYIRYDYYTWAELAYLWY HLA-C03:18,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:180,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:181,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:182,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:183,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:184,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:185,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:186,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:187,YYAGYREKYRQTDVSNLYIRYDYYTWAVLAYLWY HLA-C03:188,YYAGYREKYLQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:19,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C03:190,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:191,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:192,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:193,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:194,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:195,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:196,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:197,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:198,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:199,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:200,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:202,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:203,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:204,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:205,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:206,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:207,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:209,YYAGYREKYRQTDVSNLYIWCDYYTWAELAYLWY HLA-C03:21,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C03:210,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:211,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:212,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:213,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:214,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:215,YYAGYREKYRQTDVSNLYIRYDYYTWAELTYLWY HLA-C03:216,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:217,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:218,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:219,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:220,YYAGYREKYRQTDVSNLYIRYDYYTLAELAYLWY HLA-C03:221,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:222,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:223,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:225,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:226,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:227,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:228,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:23,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:230,YYAGYREKYRQTDVSNLYIRYDYYTWATLAYLWY HLA-C03:231,YSAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:232,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:233,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:234,YYAGYREKYRQTDVSNLYIRYDYYSWATLAYLWY HLA-C03:235,YYAGYREKYRQTDVSNLYIRYDYYTWTELAYLWY HLA-C03:236,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:237,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:238,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:239,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:24,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:240,YYAGYREKYRQTDVSNLYIRCDSYTWAELAYLWY HLA-C03:241,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:242,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:243,YYAGYREKYRQTDVNNLYIRYDYYTWAELAYLWY HLA-C03:245,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:246,YYAGYRENYRQADVSNLYIRYDYYTWAELAYLWY HLA-C03:247,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:248,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:249,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C03:25,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:250,YYAGYREKYRQTDVSNLYIRYNFYTWAELAYLWY HLA-C03:251,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C03:252,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:253,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:254,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:255,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:256,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:257,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:258,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:259,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:26,YYAGYREKYRQTDVSNLYIRYDFYTWAELAYLWY HLA-C03:260,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:261,YYAGYREKYRQTDVSNLYIRYDYYTLAALAYEWY HLA-C03:262,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:263,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:264,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:266,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:267,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYLWY HLA-C03:268,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C03:269,YYAGYREKYRQTDVSNLYIRYDYYTCAELAYLWY HLA-C03:27,YYAGYREKYRQADVSNLYLSYDYYTWAELAYLWY HLA-C03:270,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:271,YYAGYREKYRQTDVSNLYLWFDSYTWAELAYLWY HLA-C03:272,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWY HLA-C03:273,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:274,YYAGYREKYRQADESNLYIRYDYYTWAELAYLWY HLA-C03:275,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:276,YYAGYREKYRQTDVSNLYIRFDYYTWAELAYLWY HLA-C03:278,YHAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:279,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:28,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C03:280,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:281,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:282,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:283,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:284,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:285,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:286,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:287,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYLWY HLA-C03:288,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:289,YYAGYREKNRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:29,YYAGYRENYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C03:290,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:291,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:292,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:293,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C03:294,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:295,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:296,YYAGYREKYRQTDVSNLYLSYDYYTWAVLAYLWY HLA-C03:297,YYAGYREKYRQADVNKLYIRYDYYTWAELAYLWY HLA-C03:298,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:299,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:30,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:300,YYAGYREKYRQTDVSNLYLRSDSYTWAELAYLWY HLA-C03:301,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:302,YYAGYREKYRQTDVSNLYLWCDYYTWAELAYLWY HLA-C03:303,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:304,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:305,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:306,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:307,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C03:308,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:309,YYAGYREKYRQTDVSNLYIRYDYYTWAALAYLWY HLA-C03:31,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:310,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:311,YYAGYREKYRQTDGSNLYIRYDYYTWAELAYLWY HLA-C03:312,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:313,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:314,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:315,YYAGYREKYRQTDVSNLYLRYDSYTWAELDYLWY HLA-C03:317,YYAGYREKYRQTDVSNLYIRYNYYTWAELAYLWY HLA-C03:319,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:32,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:320,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:321,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:322,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:324,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:325,YYAGYREKYRQTDVSNLYIRYDYYTWAALAYLWY HLA-C03:326,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:327,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:328,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:329,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:33,YYAGYREKYRQTDVSNLCLRYDSYTWAELAYLWY HLA-C03:330,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:331,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:332,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:333,YYAGYREKYRRTDVSNLYIRYDYYTWAELAYLWY HLA-C03:334,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:335,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:336,YYAGYREKYRQTDVSNLYIRYEYYTWAELAYLWY HLA-C03:337,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:338,YYAGYREKYRQTDVSNLYLRFDSYTWAELAYLWY HLA-C03:339,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:34,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWY HLA-C03:340,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:341,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:342,YYAEYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:343,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:344,YDSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:345,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:346,YYAGYREKYRQTDVSNLYISYDYYTWAELAYLWY HLA-C03:347,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:348,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:349,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:35,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C03:350,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:351,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:352,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:353,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:354,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:355,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:356,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:357,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:358,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:359,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:36,YYAGYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-C03:360,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:361,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C03:362,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:364,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:365,YYAGYQEKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:367,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:368,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:369,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:37,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:370,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:371,YYAGYREKYRQTEVSNLYLRYDSYTWAELAYLWY HLA-C03:372,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:373,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:374,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:375,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:376,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:378,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:379,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:38,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C03:381,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:382,YYAGYREKYRQTDVSNLYIRYNYYTWAELAYLWY HLA-C03:383,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:384,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWH HLA-C03:385,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:386,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYEWY HLA-C03:387,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:388,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:389,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:39,YDSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:390,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:393,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:394,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:395,YYAGYREKYRQTDVSNLHIRYDYYTWAELAYLWY HLA-C03:397,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:398,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:399,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:40,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:400,YYAGYREKYRETDVSNLYIRYDYYTWAELAYLWY HLA-C03:401,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:402,YYAGYREKYRQTDVSNLYLRCDSYTWAELAYLWY HLA-C03:403,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:404,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:405,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:406,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:407,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C03:408,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:409,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:41,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:410,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:411,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:412,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:413,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYLWY HLA-C03:414,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:415,YYAGYREKYRQTDVSNLHIRYDYYTWAELAYLWY HLA-C03:416,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:417,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:418,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:419,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:42,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:420,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:422,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:423,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:425,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:426,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:427,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:428,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:429,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:43,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C03:430,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:431,YYAGYREKYRQADVSNLYLRYDSYTWAELAYLWY HLA-C03:433,YYAGYREKYRQTDVSNLYIRYDDYTWAELAYLWY HLA-C03:434,YYAGYREKYRQTDVSNLYIRYDYYTLAELAYLWY HLA-C03:435,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:436,YYVGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:437,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:438,YYAGYREKYRQTDVSNLCIRYDYYTWAELAYLWY HLA-C03:439,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:44,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:440,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:441,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:443,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:45,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C03:450,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C03:451,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:452,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:453,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:454,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:455,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:456,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:457,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:458,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:459,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:46,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:460,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:47,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:48,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:49,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C03:50,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:51,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWH HLA-C03:52,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:53,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:54,YYAGYREKYRQTDVSNLYIRYDYYTWAELPYLWY HLA-C03:55,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C03:56,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:57,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:58,YYAGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C03:59,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:60,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:61,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:62,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:63,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:64,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:65,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:66,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:67,YDAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:68,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:69,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C03:70,YYAGYREKYRQTDESNLYIRYDYYTWAELAYLWY HLA-C03:71,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYLWY HLA-C03:72,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:73,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:74,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:75,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:76,HYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:77,YYAGYREKYRQTDVSNLYIRYDYYTWAVLAYLWY HLA-C03:78,YYAGYREKYRQTDVSNLYIRYDYYTWAEMAYLWY HLA-C03:79,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:80,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C03:81,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:82,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:83,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:84,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:85,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:86,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C03:87,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:88,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:89,YYAGYREKYRQTDVSNLYLRFDSYTWAELAYLWY HLA-C03:90,YYAGYREKYRQTDVSNLYIRSDYYTWAELAYLWY HLA-C03:91,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:92,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C03:93,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:94,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C03:95,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C03:96,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C03:97,YYAGYREKYRQTDVSNLYFRYDYYTWAELAYLWY HLA-C03:98,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYPWY HLA-C03:99,YYSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C0401,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0403,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0404,YSAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C0405,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0406,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C0407,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0408,YSAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C0409,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0410,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C0411,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C0412,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0413,YSAGYREKYRQADVNKLYLRFNFYTWAALAYTWY HLA-C0414,YSAGYREKYRQADVNKLYLRFNFYTWAEQAYTWY HLA-C0415,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C0416,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0417,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C0418,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:01,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:03,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:04,YSAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C04:05,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:06,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C04:07,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:08,YSAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C04:10,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C04:100,YSAGYREKYRQADVNKLYIRYDFYTWAERAYTWY HLA-C04:101,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:102,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:103,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:104,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:106,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:107,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:108,YSAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C04:109,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:11,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C04:110,YSAGYREKYRQADVNKLYIRFNFYTWAERAYTWY HLA-C04:111,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:112,YSAGYRENYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:113,YSAGYREKYRQADVNKLYLRFNFYTWAVRAYTWY HLA-C04:114,YSAGYREKYRQADVNNLYLRFNFYTWAERAYTWY HLA-C04:116,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:117,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:118,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:119,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:12,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:120,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:121,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:122,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYTWY HLA-C04:124,YSAGYRQKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:125,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:126,YSAGYREKYRQADVNKLYLRFNFYIWAERAYTWY HLA-C04:127,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:128,YSAGCREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:129,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:13,YSAGYREKYRQADVNKLYLRFNFYTWAALAYTWY HLA-C04:130,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:131,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:132,YSAGYREKYLQADVNKLYLRFNFYTWAERAYTWY HLA-C04:133,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:134,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:135,YSAGYREKYRQADVNKLYLRFNYYTWAERAYTWY HLA-C04:136,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:137,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:138,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:139,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:14,YSAGYREKYRQADVNKLYLRFNFYTWAEQAYTWY HLA-C04:140,YSSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:141,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:142,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:143,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:144,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:145,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:146,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:147,YYAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C04:148,YSAGYREKYRHADVNKLYLRFNFYTWAERAYTWY HLA-C04:149,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:15,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C04:150,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:151,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:152,YSAGYREKYRQADVNKLYLRFNFYNWAERAYTWY HLA-C04:153,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C04:154,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:155,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:156,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:157,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:158,YSAGYREKYRQADVNKLYLRFNFYTCAERAYTWY HLA-C04:159,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:16,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:160,YYAGYREKYRQADVNKLYLRFNFYTLAALAYTWY HLA-C04:161,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:162,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:163,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:164,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:165,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:166,YSSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:167,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:168,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTCY HLA-C04:169,YSAGYRENYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C04:17,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C04:171,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:172,YSAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C04:174,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:175,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:176,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:177,YSAGYREKYRQADVNKLYLRFNFYTWAERAYKWY HLA-C04:178,YSAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C04:179,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:18,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:180,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:181,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:182,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:183,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:184,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:185,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:186,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:187,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:188,YSAGYREKYRQADVNKLYLRFNFYTWAERTYTWY HLA-C04:189,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:19,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:190,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:192,YSAGYREKYRQDDVNKLYLRFNFYTWAERAYTWY HLA-C04:193,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:194,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:195,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:196,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:197,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:198,CSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:199,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:20,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:200,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:201,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:202,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:204,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:206,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:207,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:208,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:209,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:210,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C04:211,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:212,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYLWY HLA-C04:213,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:214,YSAGYREKYRQTDVSKLYLRFNFYTWAERAYTWY HLA-C04:216,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:218,YSAGYREKYRQADVNKLYLRFNLYTWAERAYTWY HLA-C04:219,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:220,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:221,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:222,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:223,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:224,YSAGYREKYRQADVNKLYIRYNFYTWAERAYTWY HLA-C04:226,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:227,YSAGYREKYRQADGNKLYLRFNFYTWAERAYTWY HLA-C04:228,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:229,YSAGYREKYRQADVNKLYLRFKFYTWAERAYTWY HLA-C04:23,YSAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C04:230,YSAGYREKYRQADVNKLYLWYNFYTWAERAYTWY HLA-C04:231,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:232,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:235,YSAGYREKYRQADVNKLYLRFNFYTWSERAYTWY HLA-C04:237,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:238,YSAGYREKYRQADVNKLHLRFNFYTWAERAYTWY HLA-C04:239,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:24,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:240,YSAGYREKYRQADVNKLYLRSNFYTWAERAYTWY HLA-C04:241,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:242,YSAGYREKYRQADVNKLYFRYNFYTWAERAYTWY HLA-C04:243,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:244,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:245,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:246,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:247,YSAGYREKYRQADVNKLYLRFNFYTRAERAYTWY HLA-C04:248,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:249,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:25,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:250,YSAGYREKYRQADVNKQYLRFNFYTWAERAYTWY HLA-C04:251,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:252,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTRY HLA-C04:254,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:256,YYSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:257,YSAGYREKYRQADVNKLYLRFNFYTWAERACTWY HLA-C04:258,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:259,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:26,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:260,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:261,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:262,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:263,YSAGYREKYRQADVNKLYLWFNFYTWAERAYTWY HLA-C04:264,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:265,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYEWY HLA-C04:266,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:267,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:268,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:269,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:27,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:270,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:271,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:272,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:273,YSAGYQEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:274,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:275,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:276,YSAGYREKYRQADVNKLYLSFNFYTWAERAYTWY HLA-C04:277,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:278,YSAGYREKYRQANVNKLYLRFNFYTWAERAYTWY HLA-C04:28,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:280,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:281,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:282,YSAGYREKYRQADVNKLYLRFNFYTWAERVYTWY HLA-C04:283,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:284,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:285,YSAGYREKYCQADVNKLYLRFNFYTWAERAYTWY HLA-C04:286,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:287,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:288,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:289,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:29,YSAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C04:290,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:291,YSAGYREKYRQADVNKLYLRFNFYTWATLAYTWY HLA-C04:292,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:293,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:294,YYAGYREKYRQADVNKLYLRYNFYTWAELAYTWY HLA-C04:295,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:296,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:297,YSAGYREKYRQADVNKLYLRFNFYTWADRAYTWY HLA-C04:298,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:299,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:30,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:301,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:302,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:303,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:304,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:306,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:307,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:308,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:31,YSAGYREKYRQADVNKLYLRFNFYTWVERAYTWY HLA-C04:310,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:311,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:312,YSAGYREKYRQADVNKLYLRFNIYTWAERAYTWY HLA-C04:313,YSAGYREKYRQADVNKLYLRFNSYTWAERAYTWY HLA-C04:314,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:315,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:316,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:317,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:318,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:319,YSAGYREKYRQADVNKLSLRFNFYTWAERAYTWY HLA-C04:32,YSAGYREKYRQADVNKLYLRFNFYTWAERAYEWY HLA-C04:320,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:321,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:322,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:323,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:324,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:325,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:326,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:327,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:328,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:329,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:33,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:330,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:331,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:332,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:333,YSAGYREKYHQADVNKLYLRFNFYTWAERAYTWY HLA-C04:334,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:335,YYAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C04:336,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:337,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:338,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:339,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:34,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYLWY HLA-C04:340,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:341,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:342,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:343,YSAGFREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:344,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:345,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTSY HLA-C04:346,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:347,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C04:348,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:35,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:351,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:352,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:353,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:354,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:355,HSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:356,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:357,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C04:358,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:359,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:36,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C04:37,YSAGYREKYRQADVNKLYLWCNFYTWAERAYTWY HLA-C04:38,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:39,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:40,YSAGYREKYRQADVNKLYFRFNFYTWAERAYTWY HLA-C04:41,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:42,YDAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:43,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:44,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:45,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:46,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:47,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:48,YSAGYREKYRQADVNKLYLRFNFYTWAERPYTWY HLA-C04:49,YSAGYWEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:50,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:51,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:52,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:53,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:54,YSAGYREKYRQADVNKLYLRFDSYTWAERAYTWY HLA-C04:55,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C04:56,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:57,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:58,YSAGYREKYRQADVNKLYLRFNFYTLAALAYTWY HLA-C04:60,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:61,YSAGYREKYRQADVNKLYLRFNFYTWAARAYTWY HLA-C04:62,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:63,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:64,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:65,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:66,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:67,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:68,YSAGYREKYRQADVNKLYLRFNFYTWAAQAYTWY HLA-C04:69,YSAGYGEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:70,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:71,YFAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:72,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:73,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:74,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:75,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:76,YSAGNREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:77,YSAGYREKYRQADVNKLYLRFNFYTWAERAYEWY HLA-C04:78,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:79,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:80,YYAGYREKYRQADVNKLYIRYNFYTWAERAYTWY HLA-C04:81,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:82,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:83,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:84,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:85,YSAGYREKYRQADVNKLYLRFNFYTWAERAYMWY HLA-C04:86,YSAGYREKYSQADVNKLYLRFNFYTWAERAYTWY HLA-C04:87,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:89,YSAGYREKYRQADVNKLYLRFNYYTWAERAYTWY HLA-C04:90,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:91,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:92,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:94,YSAGYREKYRQADVNKLYLRFNFYTWAEWAYTWY HLA-C04:96,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:97,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:98,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C04:99,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C0501,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0502,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYMWY HLA-C0503,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0504,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C0505,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0506,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0508,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C0509,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0510,YYAGYREKYRQTDVNKLYIRYNFYTWAERAYTWY HLA-C0511,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYTWY HLA-C0512,YYAGYREKYRQTDVNKLYLRYNFYTWAVRAYTWY HLA-C0513,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:01,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:03,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:04,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C05:05,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:06,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:08,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C05:09,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:10,YYAGYREKYRQTDVNKLYIRYNFYTWAERAYTWY HLA-C05:100,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:101,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:102,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTSY HLA-C05:103,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C05:104,YYAGYREKYRQTDVNKLYFRYNFYTWAERAYTWY HLA-C05:105,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYEWY HLA-C05:106,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C05:107,YYAGYREKYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C05:108,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:109,YYAGYREKYRQTDMNKLYLRYNFYTWAERAYTWY HLA-C05:11,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYTWY HLA-C05:110,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:111,YYAGYREKYRQTDVNKLYLRSNFYTWAERAYTWY HLA-C05:112,YYAGYREKYRQTDVNKLYLRYNFYTWAEQAYTWY HLA-C05:114,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:115,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C05:116,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:117,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:118,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:119,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:12,YYAGYREKYRQTDVNKLYLRYNFYTWAVRAYTWY HLA-C05:120,YYAGYREKYRRTDVNKLYLRYNFYTWAERAYTWY HLA-C05:121,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:122,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:123,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:124,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:125,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:126,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:127,YYGGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:129,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:13,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:130,YYAGYREKYRQTDVNKLYLRYNFYTWAERAFTWY HLA-C05:131,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:132,YYAGYREKYRQTDVNKLYLRYDLYTWAERAYTWY HLA-C05:133,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:134,YYAGYREKYRQTDVNKLYLRYNFYTLAALAYTWY HLA-C05:135,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C05:136,YYAGYREKYRQTDVNKLYLRYNFYSWAERAYTWY HLA-C05:137,YYAGYREKYRQSDVNKLYLRYNFYTWAERAYTWY HLA-C05:138,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:139,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:14,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:140,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:141,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:142,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:143,YYAGYREKYRQTDVNKLYLRYNFYTLAARAYTWY HLA-C05:144,YYAGYRGKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:145,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:146,YYAGYREKYRQTDVNKLYLRYNFYTWAEDAYTWY HLA-C05:147,YYAGYREKYRQTDVNKLYLRYDYYTWAERAYTWY HLA-C05:148,YYAGYREKYRQTDVNKLYIRYDYYTWAERAYTWY HLA-C05:149,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:15,YYAGYWEKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:150,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:151,YYAGYREKYRQTDVNKLYLRYNFYTLAVLAYLWY HLA-C05:152,YYAGYREKYRQTDVNKLYWRYNFYTWAERAYTWY HLA-C05:155,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:156,YSAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:157,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:158,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:159,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:16,YYAGYREKYRQTDVNKLYLWYNFYTWAERAYTWY HLA-C05:160,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:161,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:162,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:163,YYAGYREKYRQTDVNKLYLRYNFYTWAADAYTWY HLA-C05:164,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:165,YYAGYRKKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:166,YYAGYREKYRQTDVNKLYLRYNLYTWAERAYTWY HLA-C05:167,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:168,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:17,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C05:170,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:171,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:172,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:173,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:174,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:176,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:177,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:178,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:179,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:18,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:181,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:182,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:183,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:184,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYLSY HLA-C05:185,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:186,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:187,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:188,YYAGYREKYRQTDVNKLYLRYNSYTWAERAYTWY HLA-C05:189,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:19,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:190,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:191,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:192,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:193,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:194,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:195,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:196,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:197,YYSGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:198,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:199,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:20,YYAGYREKYRQTDVNNLYLRYNFYTWAERAYTWY HLA-C05:200,YFAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:201,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:203,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:21,YYAGYREKYRQTDVNKLHLRYNFYTWAERAYTWY HLA-C05:22,YYAGYREKYRQTDVNKLYLRYDFYTWAERAYTWY HLA-C05:23,YYAGYREKYRQTDVNKLYLRYNFYTLAERAYTWY HLA-C05:24,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:25,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:26,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:27,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYLWY HLA-C05:28,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:29,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:30,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:31,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:32,YYAGYREKYRQTDVNRLYLRYNFYTWAERAYTWY HLA-C05:33,YYAGCREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:34,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:35,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:36,YYAGYRENYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:37,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:38,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:39,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYLWY HLA-C05:40,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:41,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:42,YYAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C05:43,YDAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:44,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:45,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:46,YYAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C05:47,YYAGYREKYRQTDVNKLYLRYNYYTWAERAYTWY HLA-C05:49,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:50,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:52,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C05:53,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:54,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:55,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:56,YYAGYQEKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:57,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:58,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:59,YYAGYREKYRQTDVNKLYLRCNFYTWAERAYTWY HLA-C05:60,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:61,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:62,YYAGYREKYRQTDVNKLYLRYNFYTLAADAYTWY HLA-C05:63,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:64,YYAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C05:65,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:66,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:67,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:68,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C05:69,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:70,YYAGYREKYRQTDVNKLYLRYNFYTWAELTYTWY HLA-C05:71,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:72,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:73,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:74,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:75,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:76,YYAGYREKYRQTDVNKLYLRYNFYTWAARAYTWY HLA-C05:77,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:78,YSAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:79,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C05:80,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:81,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:82,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:83,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:84,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:85,YYAGYREKYRQTDVNKLYLWCNFYTWAERAYTWY HLA-C05:86,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:87,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:88,YYAGYREKYRQTDVNKLYLRYNFYTWAQRAYTWY HLA-C05:89,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C05:90,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:93,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:94,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:95,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:96,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:97,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C05:98,YYSGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C0602,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0603,YYSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0604,YDSGYREKYRQADVNKLYLWYDSYTWAELAYTWY HLA-C0605,YDSGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C0606,YDSGYREKYRQADVNKLYLWYDSYTWAERAYTWY HLA-C0607,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0608,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYEWY HLA-C0609,YDSGYREKYRQADVNKLYLWYNFYTWAEWAYTWY HLA-C0610,YDPGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0611,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C0612,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0613,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:02,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:03,YYSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:04,YDSGYREKYRQADVNKLYLWYDSYTWAELAYTWY HLA-C06:05,YDSGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C06:06,YDSGYREKYRQADVNKLYLWYDSYTWAERAYTWY HLA-C06:07,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:08,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYEWY HLA-C06:09,YDSGYREKYRQADVNKLYLWYNFYTWAEWAYTWY HLA-C06:10,YDPGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:100,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:101,YDSGYREKYRQADVNKLYLRFDSYTWAEWAYTWY HLA-C06:102,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:103,YDSGYREKYRQADVNKLYLWYEYYTWAEWAYTWY HLA-C06:104,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:105,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:106,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:107,YDSGYREKYRQADVNKLYLWYDYYTWAEWAYTWY HLA-C06:108,YDSGYREKYRQADVNKLYLWYDSYTWPEWAYTWY HLA-C06:109,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:11,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C06:110,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:111,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:112,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:113,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:114,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:115,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:117,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:118,YDSGYREKYRQADVNKLYLWYDSYTLAALAYTWY HLA-C06:119,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:12,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:120,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:121,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:122,YDSGYREKYRQADVSKLYLWYDSYTWAEWAYTWY HLA-C06:123,YDSGYREKYRQADVNKLYFWYDSYTWAEWAYTWY HLA-C06:124,YDSGYREKYRQTDVSKLYLWYDSYTWAEWAYTWY HLA-C06:125,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:126,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:127,YDSGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C06:129,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:13,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:130,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:131,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:132,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:133,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:135,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:136,YDSGYREKYRQADVNKLYLRSDSYTWAEWAYTWY HLA-C06:137,YDSGYREKYRQADVNKLYLWYDSYTWVEWAYTWY HLA-C06:138,YDSGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C06:139,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:14,YDSGYREKYRQADVNKLYIWYDSYTWAEWAYTWY HLA-C06:140,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:141,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:142,YDSGYREKYRQADVNKLYLWFDSYTWAEWAYTWY HLA-C06:143,YDSGYREKYRQADVNKLYIRYDSYTWAEWAYTWY HLA-C06:144,YDSGYREKYRQADVNKLYLRYNFYTWAEWAYTWY HLA-C06:145,YDSGYREKYRQADVNKLYLWHDSYTWAEWAYTWY HLA-C06:146,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:147,YDSGYRNIFTNTYESNLYLWYDSYTWAEWAYTWY HLA-C06:148,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:149,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:15,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:150,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:151,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:153,YDSGYREKYRQADVNKLYLWYDSYTWAVLAYTWY HLA-C06:154,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:155,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:156,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:157,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:158,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:159,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:160,YDSGYREKYRQADVNQLYLWYDSYTWAEWAYTWY HLA-C06:161,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYAWY HLA-C06:162,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:163,YDSGYREKYRQADVNKLCLWYDSYTWAEWAYTWY HLA-C06:164,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:165,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTSY HLA-C06:166,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:167,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:168,YDSGYREKYRQADVNKLYLWYDLYTWAEWAYTWY HLA-C06:169,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:17,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:170,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:172,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:173,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:174,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:176,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:177,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:178,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:179,YDSGYREKYRQADVNKLYLWCDYYTWAEWAYTWY HLA-C06:18,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:180,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:181,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:182,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:183,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:184,YDSGYREKYRQADVNRLYLWYDSYTWAEWAYTWY HLA-C06:185,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:186,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:187,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:188,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:189,YDSGYREKYRQADVNKLYLWYDSCTWAEWAYTWY HLA-C06:19,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:190,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:191,YDSGYREKYRQADVNKLYLWYDSHTWAEWAYTWY HLA-C06:192,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:193,YDSGYREKYREADVNKLYLWYDSYTWAEWAYTWY HLA-C06:194,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:195,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:196,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:197,YDSGYREKYRQADVNKLYLWYDSYTWAELAYLWY HLA-C06:198,YDSGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C06:199,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:20,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:201,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:202,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:203,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:204,YDSGYREKYRQADVNKLYLWCDYYTWAERAYTWY HLA-C06:205,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:206,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:207,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWH HLA-C06:209,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:21,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:210,YDSGYREKYRQADVNNLYLWYDSYTWAEWAYTWY HLA-C06:212,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:213,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:214,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:216,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:217,YDSGYREKYRQTDVSNLYLWYDSYTWAEWAYTWY HLA-C06:218,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:219,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:22,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:221,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:222,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:223,YDSGYREKYRQADVNKLHLWYDSYTWAEWAYTWY HLA-C06:224,YDSGYREKYRQADVNKLYLWYDLYTWAEWAYTWY HLA-C06:225,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:226,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:227,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:228,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:229,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:23,YDSGYREKYRQADVNKLYLWCDSYTWAEWAYTWY HLA-C06:230,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:231,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:232,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:233,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:234,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:235,YDSGYREKYRQVDVNKLYLWYDSYTWAEWAYTWY HLA-C06:236,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:237,YDSGYREKYRQADVNKLYLWYDSYTWAEWASTWY HLA-C06:238,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:239,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:24,YDSGYREKYRQADVNKLYLWYDSYTWAEWAHTWY HLA-C06:240,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:241,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:242,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:243,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:244,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:245,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:246,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:247,YDSGYREKYRQAHVNKLYLWYDSYTWAEWAYTWY HLA-C06:248,YDSGYREKYRQTDVSNLYLWYDSYTWAEWAYTWY HLA-C06:249,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:25,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:250,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:251,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:26,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:27,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:28,YDAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:29,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:30,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:31,YDSGYREKYRQADVNKLYLWYDSYTWAAWAYTWY HLA-C06:32,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:33,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:34,YDSGYREKYRQADVNKLYLWYDFYTWAEWAYTWY HLA-C06:35,YDSGYREKYRQADVNKLYIRSDSYTWAEWAYTWY HLA-C06:36,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:37,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:38,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:39,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:40,YDSGYREKYRQADVNKLYLWYDSYTWAEWTYTWY HLA-C06:41,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:42,YDSGYREKYRQADVNKLYLWYDSYTRAEWAYTWY HLA-C06:43,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:44,YDSGYRENYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C06:45,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:47,YDSGYREKYRQADVNKLYLWSDSYTWAEWAYTWY HLA-C06:48,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:50,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:51,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:52,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:53,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:54,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:55,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:56,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:57,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:58,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:59,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:60,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:61,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:62,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:63,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:64,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:65,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:66,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:67,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:68,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:69,YDSGYREKYRQADENKLYLWYDSYTWAEWAYTWY HLA-C06:70,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:71,YDSGYPEKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:72,YDSGYREKYRQADVNKLYIVYDSYTWAEWAYTWY HLA-C06:73,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:75,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:76,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:77,YHSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:78,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:80,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:81,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:82,YDSGYREKYRQADVNNLYLWYDSYTWAEWAYTWY HLA-C06:83,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:84,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:85,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:86,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:87,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:88,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:89,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:90,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:91,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:92,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:93,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:94,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:95,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:96,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYLWY HLA-C06:97,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:98,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C06:99,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C0701,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0702,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C0703,YDSGYREKYRQADVSNLYLRSDSYTWAALAYLWY HLA-C0704,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C0705,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C0706,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0707,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C0708,YDSGYREKYRQADVSNLYLRFDSYTLAALAYTWY HLA-C0709,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C0710,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C0711,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C0712,YDSGYREKYRQADVSNLYFRYDFYTWAADAYTWY HLA-C0713,YDSGYREKYRQADVSNLYLRSDFYTLAALAYTWY HLA-C0714,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0715,YDSGYREKYRQADVSNLYLRSDSYTLAALAYEWY HLA-C0716,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0717,YDSGYREKYRQADVSNLYLRSDSYTWAALAYTWY HLA-C0718,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0719,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C0720,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0721,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0722,YDSGYRENYRQADVSNLYLRYDSYTLAAWAYTWY HLA-C0723,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C0724,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0725,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C0726,YYSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0727,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0728,YDSGYRENYRQADVSNLYLRYNFYTLAALAYTWY HLA-C0729,YDSGYREKYRQADVSNLYLRSDYYTLAALAYTWY HLA-C0730,YDSGYRENYRQADVSNLYLRYDSYTLAGLAYTWY HLA-C0731,YDSGYREKYRQADVSNLYLWYDSYTLAALAYTWY HLA-C0732,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTAP HLA-C0734,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0735,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0736,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C0737,YDSGYREKYRQADVSNLYLRSDSYTLAARAYTWY HLA-C0738,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:01,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:02,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:03,YDSGYREKYRQADVSNLYLRSDSYTWAALAYLWY HLA-C07:04,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:05,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C07:06,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:07,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C07:08,YDSGYREKYRQADVSNLYLRFDSYTLAALAYTWY HLA-C07:09,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C07:10,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C07:100,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:101,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:102,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:103,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:105,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:106,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:107,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:108,YDSGYRENYRQADVSNLYLRFDSYTLAALAYTWY HLA-C07:109,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:11,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:110,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:111,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:112,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:113,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:114,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:115,YDSGYRENYRQADVSDLYLRYDSYTLAALAYTWY HLA-C07:116,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:117,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:118,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:119,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:12,YDSGYREKYRQADVSNLYFRYDFYTWAADAYTWY HLA-C07:120,YDSGYRENYRQADVSNLYLRYDSYTLAALAYPWY HLA-C07:122,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:123,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:124,YDSGYRENYRQADESNLYLRYDSYTLAALAYTWY HLA-C07:125,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:126,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:127,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:128,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:129,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:13,YDSGYREKYRQADVSNLYLRSDFYTLAALAYTWY HLA-C07:130,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:131,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:132,DDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:133,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:134,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:135,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:136,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:137,YDSGYREKYRQADVSNLYLRSDSYTLAALTYTWY HLA-C07:138,YDSGYREKYRQADVSNLYLRSDSYTLAAWAYTWY HLA-C07:139,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:14,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:140,YDSGYRENYRQADVSNLYLRYDSYTWAVDAYTWY HLA-C07:141,YDSGYRENYRQADVSNLYLRYDSYTWAALAYTWY HLA-C07:142,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:143,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:144,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:145,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:146,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:147,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:148,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:149,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:15,YDSGYREKYRQADVSNLYLRSDSYTLAALAYEWY HLA-C07:151,YDSGYRENYRQADVSNLYLRYDSYTLAADAYTWY HLA-C07:153,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:154,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:155,YDSGYREKYRQADESNLYLRSDSYTLAALAYTWY HLA-C07:156,YDSGYRENYRQAHVSNLYLRYDSYTLAALAYTWY HLA-C07:157,YDSGYREKYRQADVSNLYLKSDSYTLAALAYTWY HLA-C07:158,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:159,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:16,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:160,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:161,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:162,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:163,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:165,YDSGYRENYRQADVSNLYLRYDSYTLAELAYTWY HLA-C07:166,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:167,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:168,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:169,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:17,YDSGYREKYRQADVSNLYLRSDSYTWAALAYTWY HLA-C07:170,YDSGYRENYRQADVSNLYLRYDSYTYAALAYTWY HLA-C07:171,YDSGYREKYRQADVSNLYLRSDSYTYAALAYTWY HLA-C07:172,YDAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:173,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:174,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:175,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:176,YDSGYRENYRQADVSNLYLRYDSYTLAARAYTWY HLA-C07:177,YDSGYREKYRQTDVSNLYLWCDYYTLAALAYTWY HLA-C07:178,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:179,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:18,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:180,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:181,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:182,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:183,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:184,YDSGYREKYRQADVSNLYIRYDYYTLAALAYTWY HLA-C07:185,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:186,YDSGYREKYRQADVSNLYLRSDSYTLAALAYLWY HLA-C07:187,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:188,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:189,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:19,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:190,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:192,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:193,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:194,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:195,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:196,YDSGYRENYRQADVSNLYIRYDSYTLAALAYTWY HLA-C07:197,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:199,YDSGYREKYRQADVSNLYLRYDFYTLAADAYTWY HLA-C07:20,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:200,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:201,YDSGYRENYRQADVSNLCLRYDSYTLAALAYTWY HLA-C07:202,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:203,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:204,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:205,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:206,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:207,YDSGYRENYRQADVSNLYLRYDSYTLAALAYEWY HLA-C07:208,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:209,YDSAYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:21,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:210,YDSGYRENYRQTDVNNLYLRYDSYTLAALAYTWY HLA-C07:211,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:212,YDSGYRENYRQADVSNLYLRYDSYTLAALAYLWY HLA-C07:213,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:214,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:215,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:216,YDSGYREKYRQADVSNLYLRSDSYTLAAQAYTWY HLA-C07:217,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:218,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:219,YDSGYRENYRQADVSNLYLRYESYTLAALAYTWY HLA-C07:22,YDSGYRENYRQADVSNLYLRYDSYTLAAWAYTWY HLA-C07:220,YDSGYREKYRQADVSNLYLRSDSYTLAALAYKWY HLA-C07:221,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:222,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:223,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:224,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:225,YDSGYRENYCQADVSNLYLRYDSYTLAALAYTWY HLA-C07:226,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:228,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:229,YDSGYQEKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:23,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:230,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:231,YDSGYRENYRQADVSNLYLRYDDYTLAALAYTWY HLA-C07:232,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:233,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:234,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:236,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:237,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:238,YDSGYREKYRQTDVNNLYLRSDSYTLAALAYTWY HLA-C07:239,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:24,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:240,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:241,YDSGYREKYRQADVSNLYLRSDSYTLAELAYTWY HLA-C07:242,YDSGYREKYRQADVSNLYLRSDSYTWAELAYLWY HLA-C07:243,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:244,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:245,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:246,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:247,YDSGYRENYRQADVNNLYLRYDSYTLAALAYTWY HLA-C07:248,YDSGYRENYRQADVSNLYLRYDYYTLAALAYTWY HLA-C07:249,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:25,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:250,YDSGYRENYRQADVSNLYLRCDSYTLAALAYTWY HLA-C07:251,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:252,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:253,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:254,YDSGYRENYRQADVSNLHLRYDSYTLAALAYTWY HLA-C07:255,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:256,YDSGYRENYRQADVSNLYLRYDSCTLAALAYTWY HLA-C07:257,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:258,YDSGYREKYRQADVSNLYLRADSYTLAALAYTWY HLA-C07:259,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:26,YYSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:260,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:261,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:262,YDSGYWEKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:263,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:265,YDSGYREKYRQADVSNLYLRSDSYTLAELAYLWY HLA-C07:266,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:267,CDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:268,YDSGYRENYRQADVSNLNLRYDSYTLAALAYTWY HLA-C07:269,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:27,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:270,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:271,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:272,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:273,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:274,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:275,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:276,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:277,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:278,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:279,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:28,YDSGYRENYRQADVSNLYLRYNFYTLAALAYTWY HLA-C07:280,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:281,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:282,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:283,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:284,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:285,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:286,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:287,YDSGYREKYRQADVSNLYLRSDSYILAALAYTWY HLA-C07:288,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:289,YDSGYREKYRQADVSNLYLRSDLYTLAALAYTWY HLA-C07:29,YDSGYREKYRQADVSNLYLRSDYYTLAALAYTWY HLA-C07:290,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:291,YDSGYREKYCQADVSNLYLRSDSYTLAALAYTWY HLA-C07:292,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:293,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:294,YDSGYREKYRQADVSNLYLSYDSYTLAALAYTWY HLA-C07:296,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:297,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:298,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:299,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:30,YDSGYRENYRQADVSNLYLRYDSYTLAGLAYTWY HLA-C07:300,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:301,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:302,YDSGYREKYRQADVSNLYFRSDSYTLAADAYTWY HLA-C07:303,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:304,YDSGYRENYRQADVSNLYLRYDSYTWAELAYTWY HLA-C07:305,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:306,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:307,YDSGYREKYRQADVSNLYLRSDSYTWAERAYTWY HLA-C07:308,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:309,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:31,YDSGYREKYRQADVSNLYLWYDSYTLAALAYTWY HLA-C07:310,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:311,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:312,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:313,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:314,YYSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:315,YDSGYREKYRQADVNKLYLRYDSYTLAALAYTWY HLA-C07:316,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:317,YYSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:318,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:319,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:320,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:321,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:322,CDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:323,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:324,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:325,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:326,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:327,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:328,YDSGYREKYRQTDVNKLYFRYDFYTLAADAYTWY HLA-C07:330,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:331,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:332,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:333,YDSGYREKYRQADVSNLYLRSDSYTLAALAYRWY HLA-C07:334,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:335,YDSGYREKYAQTDVSNLYLRSDSYTLAALAYTWY HLA-C07:336,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:337,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:338,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:339,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:340,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:341,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:342,YDSGYREKYRQADVSNLYLRSDSYTLAVLAYTWY HLA-C07:343,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:344,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:345,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:346,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:348,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:349,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:35,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:351,YYSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:352,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:353,YDSGYRENYRQADVSNLYLKYDSYTLAALAYTWY HLA-C07:354,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:355,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:356,YDSEYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:357,YDSGYREKYRQADVTNLYFRYDFYTLAADAYTWY HLA-C07:358,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:359,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:36,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:360,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:361,YDSGYREKYRQADVSHLYFRYDFYTLAADAYTWY HLA-C07:362,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:363,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:364,YDSGYREKYRQADVSNLYLWCDFYTLAADAYTWY HLA-C07:365,YDSGYREKYRQADVSNLYFRYDFYTLAADAYRWY HLA-C07:366,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:367,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C07:368,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:369,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:37,YDSGYREKYRQADVSNLYLRSDSYTLAARAYTWY HLA-C07:370,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:371,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:372,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:373,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:374,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:375,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:376,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:377,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:378,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:379,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:38,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:380,YDSGYRENHRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:381,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:382,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:383,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:384,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:385,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:386,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:387,YDSGYQENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:388,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:389,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:39,YDSGYREKYRQTDVSNLYLRSDSYTLAALAYTWY HLA-C07:390,YDAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:391,YDSGYREKHRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:392,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:394,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:395,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:396,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:397,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:398,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:399,YDSGYREKYRQADVSNLYLRSDSYPLAALAYTWY HLA-C07:40,YDSGYRENYRQTDVSNLYLRYDSYTLAALAYTWY HLA-C07:400,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:401,YDSVYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:402,YSSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:403,YDSGYREKYRQADVNNLYFRYDFYTLAADAYTWY HLA-C07:404,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:405,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:406,YDSGYREKYRQADVNKLYFRYDFYTLAADAYTWY HLA-C07:407,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:408,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:409,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:41,YDSGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C07:410,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:411,YDSGYRENYHQADVSNLYLRYDSYTLAALAYTWY HLA-C07:412,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:413,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:414,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:415,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:416,YDSGYREKYRQADLSNLYLRSDSYTLAALAYTWY HLA-C07:417,YDSGYLENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:418,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:419,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:42,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:420,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:421,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:422,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:423,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:424,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:425,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:426,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:427,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:428,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:429,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:43,YDSGYREKYRQADVSNLYIRYDSYTLAALAYTWY HLA-C07:430,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:431,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:432,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:433,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:434,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:435,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:436,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:438,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:439,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:44,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:440,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:441,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:442,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:443,YDSGYRENYRQADVSNLYLRYDSYTLAALASTWY HLA-C07:444,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:445,YDSGYRENYSQADVSNLYLRYDSYTLAALAYTWY HLA-C07:446,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:447,YDSGYREKYRQADVSNLYFRYDFYTWAEWAYTWY HLA-C07:448,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:449,YNSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:45,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:450,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:453,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:454,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:455,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:456,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:457,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:458,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:459,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:46,YDSEYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:460,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:461,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:462,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:463,YDSGYRENYRQADVSNLYWRYDSYTLAALAYTWY HLA-C07:464,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:465,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:466,YDSGYREKYRQADVSNLYFRYDFYTLAADAYKWY HLA-C07:467,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:468,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:469,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWF HLA-C07:47,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:470,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:471,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:472,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:473,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:474,YDSGYREKYRQADVSNLYLRSDSYTLTALAYTWY HLA-C07:475,YDSGYWENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:477,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:478,YDSGYREKYRQADVSNQYLRSDSYTLAALAYTWY HLA-C07:479,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:48,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:480,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:481,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:482,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:485,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:486,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:487,YDSGYREKYRQADVSNLYFRYDFYTLAVDAYTWY HLA-C07:488,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:489,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:49,YDSGYREKYRQADVNNLYLRSDSYTLAALAYTWY HLA-C07:490,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:492,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:493,YDSGYRENYRQGDVSNLYLRYDSYTLAALAYTWY HLA-C07:495,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:496,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:497,YDSGYREKYRQADVSNLYLRSDSCTLAALAYTWY HLA-C07:498,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:499,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:50,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:500,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:501,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:502,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:503,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:504,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:505,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:506,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:508,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:509,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:51,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:510,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:511,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:512,YDSGYRENYRQADVSNLYLRYDSYTWAERAYTWY HLA-C07:514,YDSGYRENYRQADVSNLYLWYDSYTLAALAYTWY HLA-C07:515,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:516,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWH HLA-C07:517,FDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:518,YDSGYREKDRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:519,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:52,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:520,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:521,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWH HLA-C07:522,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:523,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:524,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:525,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:526,YDSGYRENYRQADVSNLYLSYDSYTLAALAYTWY HLA-C07:527,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:528,YDSGYRENYRRADVSNLYLRYDSYTLAALAYTWY HLA-C07:529,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:53,YDSGYRENYRQADVSNLYLRYDSYTLAAQAYTWY HLA-C07:530,YDSGYREKYRQADVSNLYLSSDSYTLAALAYTWY HLA-C07:531,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:532,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:533,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:534,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:535,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:536,YDSGYRENYRQADVSNLYLRYNLYTLAALAYTWY HLA-C07:537,YDSGYRENYRQADVSNLYLRYDSYTLAALAYRWY HLA-C07:538,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C07:539,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:54,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:540,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:541,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:542,YDSGYREKYRQADVSNLYLRSDSYTLSALAYTWY HLA-C07:543,YDSGYREKYRQADVSNLYLRSDSYTLAALAYMWY HLA-C07:544,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:545,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:546,YDSEYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:547,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:548,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:549,YDSGYRENYRQADVSNLYLRYVSYTLAALAYTWY HLA-C07:550,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:552,YDSGYREKYRQADVSNLYFRYDFYTLAALAYTWY HLA-C07:553,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:554,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:555,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:556,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:557,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:558,YDSGYREKYRQADVSNLYLRCDSYTLAALAYTWY HLA-C07:559,YDSGYRENYRQADVSKLYLRYDSYTLAALAYTWY HLA-C07:56,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:560,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:561,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:562,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:563,YDSGYREKYRQTDVSNLYFRYDFYTLAADAYTWY HLA-C07:564,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:565,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:566,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:567,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:568,YDSGYRENYRQADVSNLYIRFDSYTLAALAYTWY HLA-C07:569,YDSGYREKYRQADVSNLYFRYDFYTLVADAYTWY HLA-C07:57,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:570,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:571,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:572,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:573,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:574,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:575,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:576,YDSGYREKYRQADVSNVYLRSDSYTLAALAYTWY HLA-C07:577,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:578,YYAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:579,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:58,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:580,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:581,YDSGYPENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:583,YYAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:584,YDSGNREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:585,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:586,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:587,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:588,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:589,YDSGYRENYRQADVSNLYFRYDSYTLAALAYTWY HLA-C07:59,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:590,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:591,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:592,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:594,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:595,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:596,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:597,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:598,YDSGYREKYRQADVNKLYLRSDSYTLAALAYTWY HLA-C07:599,YDSGYREKYRQADVSNLYLRSDSYTWAVLAYTWY HLA-C07:60,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:601,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:602,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:604,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:605,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:606,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:607,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:608,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:609,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:610,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:611,YDSGYREKYRQADVSNLYFRSDSYTLAALAYTWY HLA-C07:612,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:613,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:614,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:615,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:616,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:617,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:618,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:619,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:62,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:620,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:621,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:622,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:623,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:624,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:625,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:626,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:627,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:628,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:629,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:63,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:630,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWC HLA-C07:631,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:634,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:635,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:636,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:637,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:638,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:639,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:64,YSAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:640,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:641,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:642,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:643,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:644,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:645,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:646,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:647,YDSGYRENYRQADVSNLYLRYDSYNLAALAYTWY HLA-C07:648,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:649,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:65,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:650,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:651,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:652,YDSGYRENYRQADVSNLYLRYDSYTLAAPAYTWY HLA-C07:653,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:654,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:655,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:656,YDSGYREKYRQADVSKLYFRYDFYTLAADAYTWY HLA-C07:657,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:658,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:659,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:66,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:660,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:661,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:662,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:664,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:665,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:666,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:667,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:668,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:669,YDSGYRENYRQADMSNLYLRYDSYTLAALAYTWY HLA-C07:67,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:670,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:671,YDSGYRENYRQADVSNLYLRYDSYTWAELAYLWY HLA-C07:673,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:674,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:676,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:677,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:678,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:679,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:68,YDSGYREKYRQADVSNLYLRSDSYTLAADAYTWY HLA-C07:680,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:681,YDSGYREKYRQADVSNLYLSYDSYTLAALAYTWY HLA-C07:682,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:683,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:684,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:685,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:687,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:688,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:689,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:69,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:691,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:692,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:693,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:694,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:695,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:696,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:698,YDSVYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C07:699,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:70,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:700,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:701,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:703,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:704,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:705,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:706,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:707,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:708,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:709,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:71,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:710,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:711,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:712,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:713,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:714,YHSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:715,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:716,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:717,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:718,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:719,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:72,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:720,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:721,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:722,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:723,YYAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:724,YHSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:73,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:74,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:75,YDSGYREKYRQADVSNLHLRSDSYTLAALAYTWY HLA-C07:76,YDSGYREKYRQADVNKLYLRSDSYTLAALAYTWY HLA-C07:77,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:78,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:79,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:80,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:81,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:82,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:83,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:84,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:85,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:86,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:87,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:88,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:89,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:90,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:91,YDSGYRENYRQADVSNLYLRYDSYTLTALAYTWY HLA-C07:92,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:93,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:94,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:95,YDSGYRENYRQADVSNLYLRYDSYTLAVLAYTWY HLA-C07:96,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C07:97,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C07:99,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C0801,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C0802,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C0803,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C0804,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C0805,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C0806,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYAWY HLA-C0807,YYAGYREKYRQTDVSNLYLRYNFYTLAERAYTWY HLA-C0808,YYAGYREKYRQTDVSNLYLSYNFYTWATLAYTWY HLA-C0809,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C0810,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C0811,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C0812,YYAGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C0813,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C0814,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:01,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:02,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:03,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:04,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:05,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C08:06,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYAWY HLA-C08:07,YYAGYREKYRQTDVSNLYLRYNFYTLAERAYTWY HLA-C08:08,YYAGYREKYRQTDVSNLYLSYNFYTWATLAYTWY HLA-C08:09,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C08:10,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C08:100,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYKWY HLA-C08:101,YYAGYREKYRQTDVSNLYLRFNFYTWATLAYTWY HLA-C08:102,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:103,YYSGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:104,YYAGYREKYRQTDVSNLYLRYNFYTLAELAYTWY HLA-C08:105,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:106,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:107,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:108,YYAGYREKYRQTDVSNLYLRYDFYTWAERAYTWY HLA-C08:109,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:11,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C08:110,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:111,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:112,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:113,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C08:114,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWH HLA-C08:115,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYLWY HLA-C08:116,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:117,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:118,YYAGYREKYRQTDVSNLYLRYNFYTWATRAYTWY HLA-C08:119,CYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:12,YYAGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C08:120,YYAGYREKYRQTDVSNLHLRYNFYTWAERAYTWY HLA-C08:122,YYAGYPEKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:123,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:124,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:125,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:126,YYAGYREKYRQTDVSNLYIWYNFYTWAERAYTWY HLA-C08:128,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:13,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:131,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:132,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:133,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:134,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:135,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:136,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:137,YYAGYREKYRQADVSNLYLRYNFYTWATLAYTWY HLA-C08:138,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYLWY HLA-C08:139,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:14,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:140,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:142,YYAGYREKYRQTDVSNLYLRYNFYTWAEDAYTWY HLA-C08:143,YYAGYREKYRQTDVSNLYLRFNFYTWATLAYTWY HLA-C08:144,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:145,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:146,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:147,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:148,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:149,YYAGYREKYRQTDVSNLYLRYNFYTWAARAYTWY HLA-C08:15,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:150,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:151,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:152,YYAGYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-C08:153,YYAGYWEKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:154,YYAGYREKYRQTDVSNLYLRCNFYTWATLAYTWY HLA-C08:155,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:156,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:157,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:158,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:159,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:16,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:160,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C08:162,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:163,YSAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:164,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:165,YYAGYREKYRQTDVSNLYLRYNFYTWAVLAYTWY HLA-C08:166,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:167,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:168,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:169,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:17,YYAGYREKYCQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:170,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:171,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:172,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:174,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:175,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:176,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:177,YYAGYREKYRQTDVSNLYLRYNFYTWAMLAYTWY HLA-C08:178,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:18,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:19,YYAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C08:20,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:21,YYAGYREKYRQADVSNLYLRYNFYTWATLAYTWY HLA-C08:22,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:23,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:24,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:25,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C08:27,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C08:28,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:29,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C08:30,YYAGYREKYRQTDVSNLYLRYNFYTWPERAYTWY HLA-C08:31,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYEWY HLA-C08:32,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:33,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:34,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:35,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:37,YDAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:38,YYAGYREKYRQTDVSNLYLRSNFYTWATLAYTWY HLA-C08:39,YYAGYREKYRQTDVSNLYLRYNFYTWAVLAYTWY HLA-C08:40,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:41,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYLWY HLA-C08:42,YYAGYREKYRQTDVSNLYLRYKFYTWATLAYTWY HLA-C08:43,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWC HLA-C08:44,YYAGYREKYRQTDVSNLYIRYNFYTWATLAYTWY HLA-C08:45,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:46,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:47,YYAGYREKYRQTDVSNLYLRYNFYTLAARAYTWY HLA-C08:48,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:49,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:50,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:51,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWH HLA-C08:53,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:54,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:56,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:57,YYAGYREKYRQTDVSNLYLRYNFYTWAALAYTWY HLA-C08:58,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:59,YYAGYREKYRQTDVSNLYLRYNSYTWATLAYTWY HLA-C08:60,YYAGYREKYRQTDVSNLYLKYNFYTWATLAYTWY HLA-C08:61,YYAGYREKYRQTDVSNLYIRYNFYTWATLAYTWY HLA-C08:62,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:63,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:65,YYAGYREKYRQTDVSNLYLRYNFYTWASLAYTWY HLA-C08:66,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C08:67,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:68,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:69,YYAGYQEKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:71,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:72,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:73,YYAGYREKYRQTDESNLYLRYNFYTWAERAYTWY HLA-C08:74,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:75,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:76,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:77,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:78,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:79,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:80,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:81,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:82,YYAGYREKYRQTDVSNLYIRYNFYTWATLAYTWY HLA-C08:83,YYAGYREKYRQTDVSNLYLRYDFYTWATLAYTWY HLA-C08:84,YYAGYREKYRQTDVSNLYLRYNFYTSATLAYTWY HLA-C08:85,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:86,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:87,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:90,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:91,YYAGYRQKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:92,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:93,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTSY HLA-C08:94,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C08:95,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:96,YYARYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:97,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C08:98,YYAGYREKYRQTDVSNLYLRYNFYTWATLGYTWY HLA-C08:99,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C1202,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C1203,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C1204,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C1205,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C1206,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C1207,YYAGYREKYRQADVGNLYLWYDSYTWAEWAYTWY HLA-C1208,YYAGYRENYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C1209,YYAGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C1210,YYAGYREKYRQADVSNLYLRFDSYTWAEWAYTWY HLA-C1211,YYAGYREKYRQADVSNLYLWSDSYTWAEWAYTWY HLA-C1212,YYAGYREKYRQADESNLYLWYDSYTWAEWAYTWY HLA-C1213,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C1214,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C1215,YYAGYREKYRQADVSNLYLWYDLYTWAEWAYTWY HLA-C1216,YDSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C1217,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:02,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:03,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:04,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C12:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C12:06,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:07,YYAGYREKYRQADVGNLYLWYDSYTWAEWAYTWY HLA-C12:08,YYAGYRENYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:09,YYAGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C12:10,YYAGYREKYRQADVSNLYLRFDSYTWAEWAYTWY HLA-C12:100,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:101,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:102,YYAGYREKYRQADVSNLYLWYDSYAWAEWAYTWY HLA-C12:103,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:106,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYLWY HLA-C12:107,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:108,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:109,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:11,YYAGYREKYRQADVSNLYLWSDSYTWAEWAYTWY HLA-C12:110,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:111,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:112,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:113,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:114,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:115,CYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:116,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:117,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:118,YYAGYREKYRQADVSNLYLRSDSYTWAEWAYTWY HLA-C12:119,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYEWY HLA-C12:12,YYAGYREKYRQADESNLYLWYDSYTWAEWAYTWY HLA-C12:120,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:121,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:122,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYLWY HLA-C12:123,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:124,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:125,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:126,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:127,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:128,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:129,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:13,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:130,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:131,YYAGYQEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:132,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:133,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:134,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:135,YYAGYREKYRQADVSKLYLWYDSYTWAEWAYTWY HLA-C12:136,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:137,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:138,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:139,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:14,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C12:140,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:141,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:142,FYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:143,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:144,YYAGYREKYRQADVSNLYLWYNFYTWAEWAYTWY HLA-C12:145,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:146,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C12:147,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:149,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:15,YYAGYREKYRQADVSNLYLWYDLYTWAEWAYTWY HLA-C12:150,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:151,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:152,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:153,YYAGYREKYRQADVSNLYLWYDSYTWAEWVYTWY HLA-C12:154,YYAGYREKYRQADVSKLYLWYDSYTWAEWAYTWY HLA-C12:156,YYAGYREKYRQADVSNLYLWFDSYTWAEWAYTWY HLA-C12:157,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:158,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYMWY HLA-C12:159,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:16,YDSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:160,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:161,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:162,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:163,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:164,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:165,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:166,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:167,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:168,YYAGYREKYRQADVSNLYLTYDSYTWAEWAYTWY HLA-C12:169,YYAGYREKYRQADVSNLYLRYDSYTWATLAYTWY HLA-C12:17,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:170,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:171,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:172,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:173,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:174,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:175,YYAGYREKYRQADVSNLYLWYDSYTWAVLAYTWY HLA-C12:176,YYAGYREKYRQADVSNLYLWYDSYTLAAWAYTWY HLA-C12:177,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:178,YYAGYREKYRQADVSNLYLWCDSYTWAEWAYTWY HLA-C12:179,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:18,YYAGYREKYRQADVSNLYLRYDSYTWAELAYTWY HLA-C12:180,YYAGYREKYRQADVSNLYLWYDSYTWAVWAYTWY HLA-C12:181,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C12:182,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:183,YYAGYREKYRQADVSNLYWTYDSYTWAEWAYTWY HLA-C12:184,YYAEYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:185,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:186,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:187,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:188,YYAGYRENYRQTDVNNLYLRYDSYTWAEWAYTWY HLA-C12:189,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:19,YYAGYREKYRQADVSNLYLWYDSYTWAECAYTWY HLA-C12:190,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:191,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:192,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:193,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:194,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:195,YDAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:196,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:197,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:198,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYEWY HLA-C12:199,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:20,YYAGYREKYRQADVSNLYLWYDSYTWAELAYTWY HLA-C12:200,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:201,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:202,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:203,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:204,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:205,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:206,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:207,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:208,YYAGYREKYRQADVSNLYLRYDLYTWAEWAYTWY HLA-C12:209,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYTWY HLA-C12:210,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:211,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:212,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:213,YYAGYREKYRQADVSNLYLWYDSYIWAEWAYTWY HLA-C12:214,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:215,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:216,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:217,YDAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:218,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:22,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:220,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:221,YYAGYREKYRQADVSNLYLRHDSYTWAEWAYTWY HLA-C12:222,YYAGYREKYRQADVSNLYLRYDYYTWAEWAYTWY HLA-C12:223,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:224,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:225,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:226,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:227,YYSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:228,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:229,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:23,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:230,YYAGYREKYRQADVSNLCLWYDSYTWAEWAYTWY HLA-C12:231,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:233,YYAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C12:234,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:235,YYAGYREKYRQADVSNLYLWYDYYTWAEWAYTWY HLA-C12:237,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:238,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:239,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:24,YYAGYREKYRQADVSNLYLWYDSYTWAERAYTWY HLA-C12:240,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:241,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:242,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:243,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:244,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:245,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:246,YYAGYREKYRQADLSNLYLWYDSYTWAEWAYTWY HLA-C12:247,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:248,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:249,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:25,YYAGYPEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:250,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:251,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:252,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:253,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:254,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:255,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:256,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:257,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:258,YYAGYREKYRQADVSNLYLGYDSYTWAEWAYTWY HLA-C12:259,YYAGYREKYRQADVSNLYLWYDSDTWAEWAYTWY HLA-C12:26,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:260,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:261,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:262,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:263,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:264,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:265,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:266,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:267,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:27,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:28,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:29,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:30,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:31,YYAGYREKYRQADVSNLYLWYNFYTWAEWAYTWY HLA-C12:32,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:33,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C12:34,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:35,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:36,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:37,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:38,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:40,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:41,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C12:43,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:44,YYAGYREKYRQADVSNLYIRYDSYTWAEWAYTWY HLA-C12:45,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:47,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:48,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:49,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYTWY HLA-C12:50,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:51,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:52,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:53,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:54,YYAGYREKYRQADVNNLYLWYDSYTWAEWAYTWY HLA-C12:55,YSAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:56,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:57,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:58,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:59,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:60,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C12:61,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:62,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:63,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:64,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:65,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:66,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:67,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:68,YYAGYLEKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:69,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:70,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:71,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:72,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYTWY HLA-C12:73,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:74,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:75,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:76,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:77,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:78,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:79,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:81,YYAGYRENYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:82,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:83,YYAGYREKYRQADVSNLYLRYDSYTWAELAYLWY HLA-C12:85,YYAGYREKYRQADVSNLYLRYDSYTWAERAYTWY HLA-C12:86,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:87,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWH HLA-C12:88,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:89,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:90,YYAGYREKYGQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:91,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:92,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:93,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:94,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:95,YYAGYWEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:96,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C12:97,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C12:98,YYAGYREKYRQTDVSNLYLWYDSYTWAEWAYTWY HLA-C12:99,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C1402,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C1403,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C1404,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C1405,YSAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C1406,YSAGYREKYRQTDVSNLYLWFDSYTWAELAYTWY HLA-C1407,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:02,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:03,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:04,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C14:05,YSAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C14:06,YSAGYREKYRQTDVSNLYLWFDSYTWAELAYTWY HLA-C14:08,YSAGYREKYRQTDVSNLYPWFDSYTWAERAYTWY HLA-C14:09,YSAGYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-C14:10,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:100,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:101,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:102,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:103,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:104,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:11,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:12,YSAGYREKYRQTDVNKLYLWFDSYTWAERAYTWY HLA-C14:13,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:14,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:15,YSAGYREKYRQTDVSNLYLWFDSYTWAALAYTWY HLA-C14:16,YSAGYREKYRQTDVSNLYLWFDSYTWAEWAYTWY HLA-C14:17,YSAGYREKYRQTDVSNLYLWFDSYTLAARAYTWY HLA-C14:18,YSSGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:19,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:20,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYLWY HLA-C14:22,YSARYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:23,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:24,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:25,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYEWY HLA-C14:26,YSAGYREKYRQTDVSNLYLWFDFYTWAERAYTWY HLA-C14:27,YSARYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:28,YSAGYREKYRQTDVSNLYLRFDSYTWAERAYTWY HLA-C14:29,YSAGYREKYRQTDVSNLYLWFDSYTRAERAYTWY HLA-C14:30,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:31,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:32,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:33,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:34,CSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:36,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:37,YSAGYRKKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:38,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYMWY HLA-C14:39,YSAGYQEKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:40,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:41,CSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:42,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:43,YSAGYREKYRQTDVSNLYLWFDSYPWAERAYTWY HLA-C14:44,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:45,YSAGYREKYRQTDVSNLYLWCDSYTWAERAYTWY HLA-C14:46,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:48,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:49,YSAGYREKYRQADVNKLYLWFDSYTWAERAYTWY HLA-C14:50,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:51,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:52,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:53,YSAGYREKYRQTDVSNLYLWFDSYTWAVLAYTWY HLA-C14:54,YSAGYREKYRQTDVSNLYIRYDYYTWAERAYTWY HLA-C14:55,YSAGYREKYRQTDVSNLYLWFDYYTWAERAYTWY HLA-C14:56,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:57,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:58,YFAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:59,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:60,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:61,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTSY HLA-C14:62,YSAGYREKYGQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:63,YSAGYREKYRQTDVSNLYLWFDSYTWAERTYTWY HLA-C14:64,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C14:65,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:66,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:67,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:68,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:69,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:70,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:71,YSAGYREKYRQTDVSNLYLWFDSYTWAVRAYTWY HLA-C14:72,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:73,YSAGYRENYRQADVSNLYLWFDSYTWAERAYTWY HLA-C14:74,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:75,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:76,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWH HLA-C14:77,YSAGYREKYRQADVNNLYLWFDSYTWAELAYTWY HLA-C14:78,YTAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:79,YSAGYREKYRQTDVSNLYLWFDDYTWAERAYTWY HLA-C14:80,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:81,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:82,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:83,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:84,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:85,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:86,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:87,YSAGYREKYRQTDVSNLYLWFDSYTWATLAYTWY HLA-C14:88,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:89,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:90,YSAGYREKYRQTDVSNLYLWFDSYTWAEQAYTWY HLA-C14:91,YSAGYREKYRQTDVSNLYLWFDSYTWAERAHTWY HLA-C14:92,YSAGYREKYRQTDVSNLYWTYNYYTWAERAYTWY HLA-C14:94,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:95,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:96,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C14:98,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C1502,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1503,YYAGYRENYRQADVNKLYIRYDLYTWAELAYTWY HLA-C1504,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C1505,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C1506,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C1507,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C1508,YYAGYRENYRQTDVNKLYIRYDLYTWAERAYTWY HLA-C1509,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C1510,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1511,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1512,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1513,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1514,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1515,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYLWY HLA-C1516,YYAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C1517,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:02,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:03,YYAGYRENYRQADVNKLYIRYDLYTWAELAYTWY HLA-C15:04,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:05,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:06,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C15:07,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C15:08,YYAGYRENYRQTDVNKLYIRYDLYTWAERAYTWY HLA-C15:09,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:10,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:100,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:101,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:102,YYAGYRENYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C15:103,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:104,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:106,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:107,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:108,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:109,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:11,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:110,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:111,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYEWY HLA-C15:112,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:113,YYSGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:114,YYARYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:116,YYAGYRENYRQTDVSKLYIRYDFYTWAELAYTWY HLA-C15:117,YYAGYRENYRQTDVNKLYIRYDFYTWAVLAYTWY HLA-C15:118,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:119,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:12,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:120,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:121,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:123,YYAGYRENYRQTDVNKLYISYDLYTWAELAYTWY HLA-C15:124,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:125,YYAGYRENYRQTDVNKLYLWYDFYTWAELAYTWY HLA-C15:126,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:127,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:128,YYAGYRENYRQTDVNKLYIRYNLYTWAELAYTWY HLA-C15:129,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:13,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:130,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWH HLA-C15:131,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:132,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:133,YYAGYRENYRQTDVNKLYIWYDLYTWAELAYTWY HLA-C15:134,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:135,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:136,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:137,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:138,YDAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:139,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:140,YYAGYRENYRQTDVNKLYISYDFYTWAELAYTWY HLA-C15:141,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:142,YYAGYRENYRQTDVNKLYIRYELYTWAELAYTWY HLA-C15:143,YYAGYRENYRQTDVNKLYIRYDSYTWAERAYTWY HLA-C15:144,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C15:146,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:147,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:148,YYAGYRENYRQTDVNKLYIRYDFYTWAERAYTWY HLA-C15:149,YYAGYRENYRQTDVNKLYFRYDLYTWAELAYTWY HLA-C15:15,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYLWY HLA-C15:150,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:151,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:152,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:153,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:154,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:155,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:157,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:158,YDAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C15:159,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYMWY HLA-C15:16,YYAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C15:161,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:162,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:163,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:165,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:166,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:167,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:168,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:169,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:17,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:170,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:171,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:172,YYAGYRENYRQTDVNKLYIRSDLYTWAELAYTWY HLA-C15:173,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:174,YYAGYRENYRQTDVNKLYIRHDLYTWAELAYTWY HLA-C15:175,YYAGYWENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:176,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:178,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:179,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:18,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:180,YYAGYRENYRQTDVNKLYIRYDYYTWADLAYTWY HLA-C15:181,YYAGYRENYRQTDVNNLYIRYDFYTWAELAYTWY HLA-C15:182,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:183,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:19,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:20,YYAGYREKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:21,YYAGYRENYRQTDVSKLYIRYDLYTWAELAYTWY HLA-C15:22,YYAGYRENYRQTDVNKLYLRYDFYTWAELAYTWY HLA-C15:23,YDAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:24,YYAGYRENYRQTDVNKLYIRYNYYTWAELAYTWY HLA-C15:25,YYAGYREKYRQADVSNLYIRYNFYTWAEDAYTSY HLA-C15:26,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:27,YYAGYRNKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:28,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:29,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:30,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:31,YYAGYRENYRQTDVNKLYIRYDLYTWAALAYTWY HLA-C15:33,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:34,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:35,YYAGYRENYRQTDVNKLHIRYDLYTWAELAYTWY HLA-C15:36,YSAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:37,YYAGYRENYRQTDVNKLYLWCDLYTWAELAYTWY HLA-C15:38,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:39,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWH HLA-C15:40,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C15:41,YYAGYRENYRQTDVNKLYNRYDLYTWAELAYTWY HLA-C15:42,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYEWY HLA-C15:43,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C15:44,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:45,YYAGYRENYRQTDENKLYIRYDLYTWAELAYTWY HLA-C15:46,YYAGYRENYRQTDVNKLYIRSDFYTWAELAYTWY HLA-C15:47,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:48,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:49,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:50,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:51,YYAGYRENYRQTDVNKLYIRYDLYTWAELTYTWY HLA-C15:52,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:53,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:54,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:55,YYAGYRENYRQTDVNKLYLWYDYYTWAELAYTWY HLA-C15:56,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:57,YYAGYRENYRQTDVNKLYIRYDLYTWAVLAYTWY HLA-C15:58,YYAGYRENYRQTDVNKLYLWYDLYTWAELAYTWY HLA-C15:59,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:60,YYAGYRENYRQTDVNQLYIRYDLYTWAELAYTWY HLA-C15:61,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:62,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:63,YDSGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:64,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:65,YYAGYRENYRQTDVNKLYLRYDSYTLAALAYTWY HLA-C15:66,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C15:67,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:68,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:69,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:70,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:71,YYAGYRENYRQTDVNILYIRYDLYTWAELAYTWY HLA-C15:72,YYAGYRENYRQTDVNKLYLRYDLYTWAELAYTWY HLA-C15:73,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:74,YYAGYRENYRQTDVNKLYIRYDLYTWAEWAYTWY HLA-C15:75,YYAGYRENYRQTDVNKLYIRYDLYTWAAQAYTWY HLA-C15:76,YYAGYRENYRQTDVNKLYIRYNFYTWAELAYTWY HLA-C15:77,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYLWY HLA-C15:78,YYAGYRENYRQTDVNKLYIRFDLYTWAELAYTWY HLA-C15:79,YYAGYRENYRQTDVNKLYIRYDLYIWAELAYTWY HLA-C15:80,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:81,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:82,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:83,YYAGYRENYRQTNVNKLYIRYDLYTWAELAYTWY HLA-C15:85,YYAGYRENYRQTDVNNLYIRYDLYTWAELAYTWY HLA-C15:86,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:87,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:88,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:89,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:90,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C15:91,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:93,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:94,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:97,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:98,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C15:99,YYAEYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C1601,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C1602,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C1604,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C1606,YYAGYREKYRQTDVSNLYLRSDSYTWAAQAYTWY HLA-C1607,YYAGYREKYRQTDVSNLYLRYDSYTWAAQAYTWY HLA-C1608,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:01,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:02,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:04,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:06,YYAGYREKYRQTDVSNLYLRSDSYTWAAQAYTWY HLA-C16:07,YYAGYREKYRQTDVSNLYLRYDSYTWAAQAYTWY HLA-C16:08,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:09,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:10,YYAGYREKYRQTDVSNLYLWYDDYTWAAQAYTWY HLA-C16:100,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:101,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:102,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:103,YYAGYREKYRQTDVNKLYLWYDSYTWAAQVYTWY HLA-C16:104,YYAGYREKYRQTDVNKLYLWFDSYTWAAQAYTWY HLA-C16:105,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:106,YYAGYREKYRQTDVRNLYLWYDSYTWAAQAYTWY HLA-C16:107,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:108,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:109,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:11,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:110,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYTWY HLA-C16:111,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:112,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:113,YYAGYREKYRQTDVSNLYLWYDSYTWAEQAYTWY HLA-C16:114,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:115,YYAGYREKYRQTDVNKLYLWSDSYTWAAQAYTWY HLA-C16:116,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:117,YYAGYREKYRQTDVSNLYLRFDSYTWAAQAYTWY HLA-C16:118,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:119,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:12,YYAGYGEKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:120,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:121,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:122,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:124,YYAGYREKYRQTDVSNLYLWHDSYTWAAWAYTWY HLA-C16:125,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:126,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:127,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:128,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:129,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:13,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:130,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:131,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:133,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:134,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:135,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:136,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:137,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:138,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:139,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:14,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:140,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:141,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:142,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:143,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:144,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:145,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:146,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:15,YYAGYREKYRQADVSNLYLWYDSYTWAAQAYTWY HLA-C16:17,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:18,YYAGYREKYRQTDVSNLYLWCDSYTWAAQAYTWY HLA-C16:19,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:20,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:21,YDAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:22,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:23,YYAGYREKYRQTDVSNLYLWFDSYTWAAQAYTWY HLA-C16:24,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:25,YYAGYREKYRQADVNKLYLWYDSYTWAAQAYTWY HLA-C16:26,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:27,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:28,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:29,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYEWY HLA-C16:31,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:32,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:33,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYAWY HLA-C16:34,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:35,YYAGYREKYRQTDVSNLYLWYDSYTWAALAYTWY HLA-C16:36,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:37,YYAGYREKYRQTDVSKLYLWYDSYTWAAQAYTWY HLA-C16:38,YYARYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:39,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:40,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYTWY HLA-C16:41,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWC HLA-C16:42,YYAGYQEKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:43,YYAGYREKYRQTDVSNLYLWYDSYTWAVQAYTWY HLA-C16:44,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:45,YYAGYREKYRQTDVSNLYLWYNFYTWAAQAYTWY HLA-C16:46,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:47,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:48,YYAGYREKYRQTDVNKLYLWYDSYTWAALAYTWY HLA-C16:49,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:50,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYEWY HLA-C16:51,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:52,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:53,YYAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C16:54,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:55,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:56,YYAGYQEKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:57,YYAGYREKYRQTDVNNLYLWYDSYTWAAQAYTWY HLA-C16:58,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:59,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:60,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:61,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:62,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:63,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:64,YYAGYRENYRQADVSNLYLWYDSYTWAAQAYTWY HLA-C16:65,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:66,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:67,YYAGYREKYRQTDVSNLYLWYRDYTWAAQAYTWY HLA-C16:68,YYAGYREKYRQTDVSNLYLWYDSYTWAARAYTWY HLA-C16:69,YYAGYREKYRQTGVNKLYLWYDSYTWAAQAYTWY HLA-C16:70,YYAGYRENYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:71,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:72,YYAGYREKYRQTDVSNLYLWYDSYTWAPQAYTWY HLA-C16:73,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:74,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:75,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:76,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:78,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:79,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:80,YDSGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:81,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:82,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C16:83,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:84,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:85,YYTKYREISTNTYENTAYLWYDSYTWAAQAYTWY HLA-C16:86,YHAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:87,YYAGYRENYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:88,YYAGYREKYRQTDVNKLYLWYDSYTWAARAYTWY HLA-C16:90,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C16:91,YYAGYREKYRQTDVNKLYLWYDSYTWAAWAYTWY HLA-C16:92,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:93,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAHTWY HLA-C16:94,YYAGYREKYRQTDVSNMYLWYDSYTWAAQAYTWY HLA-C16:95,YYAGYREKCRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:96,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:97,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:98,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C16:99,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C1701,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C1702,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C1703,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C1704,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:01,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:02,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:03,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:04,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:05,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:06,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:07,YYAGYREKYRQADVNKLYIRYNFYSLAELAYLWY HLA-C17:08,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:09,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:10,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:11,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:12,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:13,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:14,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:15,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:16,YYAGYREKYRQADVNKLYLRYNFYSLAELAYEWY HLA-C17:17,YYAGYREKYRQADVNKLYIRYNFYSLAERAYTWY HLA-C17:18,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:19,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:20,YDAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:21,YYAGYREKYRQADVNKLYLWYNFYSLAELAYEWY HLA-C17:22,YYAGYREKYRQADVSNLYIRYNFYSLAELAYEWY HLA-C17:23,YYAGYREKYRQADVNKLYIRYNFYSLAELAYTWY HLA-C17:24,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:25,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:26,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:28,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:29,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:30,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:31,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:32,YYAGYREKYRQADVNKLYIRYNFYSWAELAYEWY HLA-C17:33,YYAGYREKYRQADVNKLYIRYNFYSLAELAYTWY HLA-C17:34,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:35,YYAGYREKYRQADVNKLYIRYNFYTWAELAYEWY HLA-C17:36,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:37,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:38,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:39,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C17:40,YYAGYREKYRQTDVNKLYIRYNFYSLAELAYEWY HLA-C17:41,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C1801,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C1802,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:01,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:02,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:03,YDSGYREKYRQADVNKLYLRFNFYTWAEWAYEWY HLA-C18:04,YDAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:05,YDSGYRENYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:06,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:08,YDSGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C18:09,YYSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:10,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:11,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C18:12,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-E0101,YHSMYRESADTIFVNTLYLWHEFYSSAEQAYTWY HLA-E0103,YHSMYRESADTIFVNTLYLWHEFYSSAEQAYTWY HLA-E01:01,YHSMYRESADTIFVNTLYLWHEFYSSAEQAYTWY HLA-E01:03,YHSMYRESADTIFVNTLYLWHEFYSSAEQAYTWY HLA-G0101,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0102,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0103,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0104,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0106,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0107,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0108,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G0109,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAHTWY HLA-G01:01,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:02,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:03,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:04,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:06,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:07,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:08,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAYTWY HLA-G01:09,YSAMYEENTAHTDMNTLYLWIEYYSCAVRAHTWY Mamu-A01,YYAMYRENMTENAVNTLYLRVEYYTWAVMAYQWY Mamu-A02,YYAMYRENMAENAVNNLYIRYHSYTWAEHTYEWY Mamu-A03,YYSEYRNIYAENAVANLYFRVEYYTWAEIAYEWY Mamu-A04,YYAMYREIMTENAVANLYYVYEFYTWAVHTYEWY Mamu-A0505,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWY Mamu-A0506,YYSEYREICADTLENTLYITYDSYTWAVWAYEWH Mamu-A0507,YYSEYQNICADTLENTLYLTYDSYTWAAWAYQSY Mamu-A0509,YYSEYQNICADTLENTLYLTYDSYTWAVWAYQSY Mamu-A0510,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A0511,YYSEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A06,YYSEYQNICADTYESNLYLRYEYYTWAEIAYEWY Mamu-A0602,YYSEYRNIYANTYESNLYLRYEYYTWAEIAYEWY Mamu-A07,YYSEYRNICANTYESNLYIRYEFYTWAAMAYEWH Mamu-A07,YYSEYRNICANTYESNLYIRYEFYTWAAMAYEWH Mamu-A0703,YYSEYRNICANTYESNLYIRYDSYTWAAMAYEWH Mamu-A1001:01,YYSMYREKMTETYGNTLYITYEYYTWAVWAYEWY Mamu-A1002:01,YYAMYRENMAENAVNNLYIRYHSYTWAEHTYEWY Mamu-A1011:01,YHTKYREISANTYENTAYFTYDYYTWAVHTYEWY Mamu-A11,YHTKYREISANTYENTAYFTYDYYTWAVHTYEWY Mamu-A11,YHTKYREISANTYENTAYFTYDYYTWAVHTYEWY Mamu-A1305,YYAMYRENMTANAVANLYFRVEYYTWAVMAYEWY Mamu-A1306,YYAMYRENMTANAVANLYFRYEYYTWAVMAYEWY Mamu-A1602,YYAMYRNYIAENAVNTLYIRYEFYTWAVLAYEWH Mamu-A19,YSSEYRNICAETYESNLYFNYEFYTWAAHTYRSY Mamu-A1:00101,YYAMYRENMTENAVNTLYLRVEYYTWAVMAYQWY Mamu-A1:00102,YYAMYRENMTENAVNTLYVRVEYYTWAVMAYQWY Mamu-A1:00103,YYAMYRENMTENAVNTLYLRVEYYTWAVMAYEWY Mamu-A1:00104,YYAMYRENMTENAVNTLYLRVEYYTWAVMAYEWY Mamu-A1:00105,YYAMYRENMAENAVNNLYLRVESYTWAVMAYKSY Mamu-A1:00201,YYAMYRENMAENAVNNLYIRYHSYTWAEHTYEWY Mamu-A1:00301,YYSEYRNIYAENAVANLYFRVEYYTWAEIAYEWY Mamu-A1:00302,YYSEYRNIYAENAVNNLYFRYEYYTWAEMAYEWY Mamu-A1:00303,YSSEYRNICAANAVANLYYRYDFYTWAAMAYLWY Mamu-A1:00304,YYSEYRNICAENAVANLYFRVEYYTWAEIAYEWY Mamu-A1:00305,YYSEYRNIYAENAVANLYYRYYSYTWAVIAYEWY Mamu-A1:00306,YYSEYRNIYAENAVANLYFRVEYYTWAVMAYRSY Mamu-A1:00307,YYSEYRNIYAENAVANLYFRYEYYTWAVMAYRSY Mamu-A1:00308,YYSEYRNIYAENAVANLYYRYYDYTWAWIAYEWY Mamu-A1:00310,YYAEYRNIYAENAVANLYYRYYDYTWAWIAYEWY Mamu-A1:00401,YYAMYREIMTENAVANLYYVYEFYTWAVHTYEWY Mamu-A1:00402,YYAMYREIMTENAVANLYYVYEFYTWAAHTYEWY Mamu-A1:00403,YYAMYRENMTERAVATLYYVYEFYTWAVWAYQWY Mamu-A1:00601,YYSEYQNICADTYESNLYLRYEYYTWAEIAYEWY Mamu-A1:00602,YYSEYRNIYANTYESNLYLRYEYYTWAEIAYEWY Mamu-A1:00701,YYSEYRNICANTYESNLYIRYEFYTWAAMAYEWH Mamu-A1:00702,YYSEYRNICADTYESNLYIRYEFYTWAAMAYEWH Mamu-A1:00703,YYSEYRNICANTYESNLYIRYDSYTWAAMAYEWH Mamu-A1:00704,YYSEYRNIAADTYENTLYIRYEYYTWAAMAYEWH Mamu-A1:00705,YYSEYRNICADTYENTLYIRYESYTWAAMAYEWH Mamu-A1:00801,YYSEYRNIYAANYEGNLYYTYDSYTWAEFTYEWY Mamu-A1:01001,YYSMYREKMTETYGNTLYITYEYYTWAVWAYEWY Mamu-A1:01002,YYSMYREKMTEIYGNNLYITYEFYTWAAWAYEWY Mamu-A1:01101,YHTKYREISANTYENTAYFTYDYYTWAVHTYEWY Mamu-A1:01102,YYTKYREISANTYENTAYFKYEFYTWAAMAYQSY Mamu-A1:01103,YHTKYREISANTYENTAYFTYDYYTWAVHAYEWY Mamu-A1:01104,YHTKYREISANTYENTAYFTYDYYTWAVHTYEWY Mamu-A1:01201,YYAMYRENMTATYESNLYFRYSYYTWAEFTYRWY Mamu-A1:01601,YYAMYRNYIAENAVNTLYIRYEFYTWAVLAYEWH Mamu-A1:01801,YYAMYEEISANTYESNLYFRFSHYTWAWIAYEWY Mamu-A1:01802,YYSEYEEISANTYESNLYFRYSHYTWAWFAYEWY Mamu-A1:01803,YYATYEEISANTYESNLYFRYSYYTWAAYIYQWY Mamu-A1:01804,YYATYEQIAANTYESNLYFRYSYYTWAAYIYQWY Mamu-A1:01805,YYAMYEEISANTYESNLYFRFSHYTWAWIAYEWY Mamu-A1:01806,YYATYEEISANTYESNLYFRYSYYTWAAYIYQWY Mamu-A1:01807,YYSEYEEISANTYESNLYFRYSHYTWAWFAYEWY Mamu-A1:01808,YYSMYEEISANTYESNLYFRYSHYTWAWIAYEWY Mamu-A1:01901,YSSEYRNICAETYESNLYFNYEFYTWAAHTYRSY Mamu-A1:01902,YSSEYRNICAETYESNLYFNYSYYTWAAHTYEWY Mamu-A1:01903,YSSEYQNICADTLESNLYVKYSYYTWAVWAYEWY Mamu-A1:01904,YSSEYRNICAENAVANLYFNYEFYTWAAHTYEWY Mamu-A1:01905,YSSEYRNICAETYESNLYFNYDYYTWAAHTYEWY Mamu-A1:01906,YSSEYRNICAENAVANLYFNYEFYTWAAHTYEWY Mamu-A1:01907,YSSEYRNICAETYESNLYFNYSYYTWAAHTYEWY Mamu-A1:02201,YYSEYRNIYAETYESNLYLRYDSYTWAARAYEWY Mamu-A1:02202,YYSEYRNIYAETYESNLYLRYDSYTWAARAYEWY Mamu-A1:02203,YYSEYRNIYANTYESNLYLTYDSYTWAARAYEWY Mamu-A1:02301,YYSMYREIMAENAVANLYFRYNFYTWAERAYRWY Mamu-A1:02302,YYSMYREIMAENAVANLYFRYNFYTWAERAYRWY Mamu-A1:02501,YYAMYRENMTETYGNTLYIKYEYYTWAVHTYRWY Mamu-A1:02502,YYAMYRENMTENAVDNLYIKYEYYTWAVHTYRWY Mamu-A1:02601,YYAMYSQIMADSYESNLYIRLHHYTWAAWAYEWY Mamu-A1:02602,YYAMYSQIMADSYESNLYIRLHHYTWAAWAYPWY Mamu-A1:02603,YYAMYSQIMADSYESNLYLKYHHYTWAAWAYPWY Mamu-A1:02801,YYAMYRENMTATYENTLYFRYEYYTWAVDAYEWY Mamu-A1:02802,YYAMYRENMTATYENTAYVKYEYYTWAAMAYEWY Mamu-A1:02803,YYAMYRENMTATYENTAYFRYEYYTWAVDAYEWY Mamu-A1:02804,YYAMYREIMTATYENTAYVKYEYYTWAAMAYEWY Mamu-A1:02805,YYAMYREIMTATYENTAYFKYEFYTWAADVYRSY Mamu-A1:02806,YYAMYRNIMTATYENTAYFRVEYYTWAAMAYEWY Mamu-A1:03201,YHTKYEEISANTYESNLYYRYSYYTWAVFTYRWY Mamu-A1:03202,YHTKYEEISANTYESNLYYRYSYYTWAVFTYRWY Mamu-A1:03203,YHTKYEEISANTYESNLYFRFSYYTWAEFTYRWY Mamu-A1:03301,YYAMYSQIMADTYESNLYIWYHHYTWAVWAYRWY Mamu-A1:04001,YYAMYRSIMAENAVANLYITYDSYTWAVDVYKWH Mamu-A1:04002,YYAMYRSIMAGNAVANLYITYDSYTWAVDVYKWH Mamu-A1:04003,YYAMYRSIMAENAVANLYITYDSYTWAVDVYKWH Mamu-A1:04101,YYAMYSQIMTATYESNLYVTYESYTWAWMAYEWY Mamu-A1:04102,YYAMYSQNMTATYESNLYVTYVYYTWAVMAYEWY Mamu-A1:04201,YYAMYRNIMAENAVANLYYMYEFYTWEWDTYEWY Mamu-A1:04301,YYAMYRNIMTANAVANLYFRYSYYTWAVFTYRSY Mamu-A1:04501,YYAMYSQIMADTYVNTLYVRYEFYTWAADVYEWY Mamu-A1:04801,YYAMYRNIMAEDAADTLYLKYYYYTWEWDTYLSY Mamu-A1:04901,YYAMYRSYMTAMAVDNLYLTYFDYTWAVLAYTWH Mamu-A1:04902,YYAMYRSYMTAMAVDNLYLTYFDYTWAVLAYTWH Mamu-A1:04903,YYAMYRSYMTAMAVDNLYLTYFDYTWAVLAYTWH Mamu-A1:04904,YYAMYRSYMTAMAVDNLYLTYFDYTWAVLAYTWH Mamu-A1:05001,YYAEYREISANTYESNLYITYEFYTWAEQAYRSY Mamu-A1:05101,YYAEYRNIYAENYEGILYIKYEFYTWAAHTYEWY Mamu-A1:05201,YYAEYQNSYADNYEGTLYLTYDFYTWAELTYRSY Mamu-A1:05301,YYSEYQNIYAENYEGNLYLTYESYTWAEWTYRSY Mamu-A1:05302,YYSEYQNIYAENYEGNLYLTYESYTWAEWTYRSY Mamu-A1:05401,YYSEYQNICAATYEGILYYRYSYYTWAVFTYLSY Mamu-A1:05402,YYSEYQNIYAATYEGILYYRYSYYTWAVFTYLSY Mamu-A1:05501,YHTKYREISANTYESILYYRYEFYTWAVIAYEWY Mamu-A1:05601,YHTKYREISTNTYEGILYFRFSYYTWAEFTYRWY Mamu-A1:05602,YHTKYREISTNTYEGILYYRYSYYTWAVFTYLWY Mamu-A1:05603,YHTKYREISTNTYENTAYFRFSYYTWAEFTYRWY Mamu-A1:05701,YYAMYSQIMADTYESNLYVRYHHYTWAVDVYRSY Mamu-A1:05702,YYAMYSQIMADTYENTAYVRYHHYTWAVDVYRSY Mamu-A1:05901,YYAMYRENMTATYVNTLYIWHNHYTWAVFAYEWH Mamu-A1:06001,YYAMYRSYMTANAVNNLYIRVDHYTWAVMAYTWH Mamu-A1:06101,YYAMYRENMTANAVNNLYIRYESYTWAWMVYEWY Mamu-A1:06301,YYAEYQNIYAENYEGILYLTYEFYTWAEQAYRSY Mamu-A1:06501,YYAMYQEKADTNYVNTAYIKYDSYTWAWMAYEWY Mamu-A1:06601,YHTKYEEISANNYENTLYIKYDDYTWAVHAYESY Mamu-A1:07301,YYAMYEEIMADTYENTAYFTYDSYTWAVDVYEWY Mamu-A1:07401,YYALYRNICAENYENTLYIKYEFYTWAVQTYTWH Mamu-A1:07402,YYALYRNICAETYENTAYIKYEFYTWAVHTYTWH Mamu-A1:07403,YYALYRNICAETYENTAYIKYEFYTWAVHTYTWH Mamu-A1:08101,YYAEYREKMTATYVNNLYVTYEYYTWAVDTYEWY Mamu-A1:08501,YYAEYRNIYAENYESNLYVTYEYYTWAVDTYEWY Mamu-A1:09101,YYSEYREISAETLENTLYIKYDSYTWAAMAYEWY Mamu-A1:09201,YYAMYRNICADTYESNLYIRYHHYTWAVWAYRSY Mamu-A1:10501,YYSEYRNIYAANYEGNLYFRYEYYTWAAMAYTWY Mamu-A1:10502,YYSEYRNICAANYEGNLYFRYEYYTWAAMAYTWY Mamu-A1:10503,YYSEYRNICAANYEGNLYFRYEFYTWAAMAYTWY Mamu-A1:10504,YHSEYRNICAANYEGNLYFRYEYYTWAAMAYTWY Mamu-A1:10601,YYSMYREIMAENAVANLYLTYDFYTWAELTYRSY Mamu-A1:10701,YYSMYEEISANTYGNTLYITYEFYTWAVDVYRSY Mamu-A1:10801,YYAMYRENMTATYENTLYIWYDSYTWAWIAYEWY Mamu-A1:10901,YYSEYREISAETYEGILYYTYDYYTWAVMAYRWY Mamu-A1:11001,YTAMYREKMTETSGNTLYIRVEFYTWAVMAYTWY Mamu-A1:11101,YYSMYREKMTETSGNTLYIRVEFYTWAVMAYTWY Mamu-A1:11201,YYSMYRNIMTANAVANLYIRYSHYTWAWFAYEWY Mamu-A1:11301,YYSMYREICADTLENTLYITYDSYTWAVDVYRSY Mamu-A20101,YYSEYEQRVGHTFVSNLYIRYESYTWAVHTYESY Mamu-A20102,YYSEYEQRVGHTFVSNLYIRYESYTWAVHTYESY Mamu-A21,YYSEYRNIYAENAVANLYFRVEYYTWAVMAYRSY Mamu-A2201,YYSEYRNIYAETYESNLYLRYDSYTWAARAYEWY Mamu-A23,YYSMYREIMAENAVANLYFRYNFYTWAERAYRWY Mamu-A24,YYSEYRNISADTLADTLYITYYYYTWAEFAYEWY Mamu-A25,YYAMYRENMTETYGNTLYIKYEYYTWAVHTYRWY Mamu-A26,YYAMYSQIMADSYESNLYIRLHHYTWAAWAYEWY Mamu-A2601,YYAMYSQIMADSYESNLYIRLHHYTWAAWAYEWY Mamu-A28,YYAMYRENMTATYENTLYFRYEYYTWAVDAYEWY Mamu-A2:0101,YYSEYEQRVGHTFVSNLYIRYESYTWAVHTYESY Mamu-A2:0102,YYSEYEQRVGHTFVSNLYIRYESYTWAVHTYESY Mamu-A2:0103,YYSEYEQRVGHTFVSNLYIRYESYTWAVHTYEWY Mamu-A2:0501,YYSEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A2:05020,YYSEYQNICADTLENTLYLTYDSYTWAVWAYQSY Mamu-A2:05030,YYSEYQNICADTLENTLYLTYDSYTWAVWAYQSY Mamu-A2:05040,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0505,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWY Mamu-A2:0506,YYSEYREICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0507,YYSEYQNICADTLENTLYLTYDSYTWAAWAYQSY Mamu-A2:0509,YYSEYQNICADTLENTLYLTYDSYTWAVWAYQSY Mamu-A2:0510,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0511,YYSEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A2:0512,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0513,YYSEYREICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0514,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:05150,YYSEYREICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:05160,YYSEYQNICADTLENTLYLTYDSYTWAVHTYQSY Mamu-A2:0517,YYSEYQNICADTLENTLYLTYDSYTWAVHAYQSY Mamu-A2:0518,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0519,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0520,YYSEYQNICADTLENTLYLTYDSYTWAVWAYESY Mamu-A2:0521,YYSEYQNICADTLENTLYLTYDSYTWAVWAYESY Mamu-A2:0522,YYSEYQNICADTLENTLYLTYDSYTWAVWAYESY Mamu-A2:0523,YYSEYREICADTLENTLYITYDSYTWAVRAYEWH Mamu-A2:0524,YYSEYQNICADTLENTLYITYDSYTWAVWTYEWH Mamu-A2:0525,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0526,YYSEYQNIAANTFENTAYITYDSYTWAAHTYEWY Mamu-A2:0527,YYSEYQNICADTLENTLYLTYDSYTWAVWVYQSY Mamu-A2:0528,YYSEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A2:0529,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0531,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:05320,YYSEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A2:0533,YYSEYQNICADTLENTLYLTYDSYTWAAHTYQSY Mamu-A2:0534,YYSEYQNICADTLENTLYITYDSYTWAAHTYEWH Mamu-A2:0535,YYSEYQNICADTLENTLYITYDSYTWAVMAYEWH Mamu-A2:0536,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0537,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0538,YYSEYQNICADTLENTLYLTYDSYTWAVWAYESY Mamu-A2:0539,YYSEYQNICADTLENTLYLTYDSYTWAVHAYQSY Mamu-A2:0540,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0541,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWY Mamu-A2:0542,YYSEYREICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0543,YYSEYQNICADTLENTLYITYDSYTWAVWAYEWH Mamu-A2:0544,YYSEYREICADTLEDTLYITYDSYTWAVWAYESY Mamu-A2:0545,YYAEYQNICADTLENTLYITYDSYTWAVWAYESH Mamu-A2:0546,YYSEYREICADTLENTLYITYDSYTWAVWAYESY Mamu-A2:0547,YYSEYREICADTLENTLYITYEFYTWAVDVYRSY Mamu-A2:2401,YYSEYRNISADTLADTLYITYYYYTWAEFAYEWY Mamu-A2:2402,YYSEYREISAETYEDTLYITYYDYTWAEFAYEWH Mamu-A2:2403,YYSEYRNISADTYENTLYITYYYYTWAEFAYEWY Mamu-A3:1301,YYAMYRENMTANAVANLYFRYEFYTWAVMAYEWY Mamu-A3:1302,YYAMYRENMTANAVANLYFRVEYYTWAVMAYRSY Mamu-A3:1303,YYAMYRENMTENAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1304,YYAMYRENMTANAVANLYFRVEYYTWAVMAYRSY Mamu-A3:1305,YYAMYRENMTANAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1306,YYAMYRENMTANAVANLYFRYEYYTWAVMAYEWY Mamu-A3:1307,YYAMYRENMTANAVANLYFRVEFYTWAVMTYRSY Mamu-A3:1308,YYAMYRENMTANAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1309,YYAMYRENMTANAVANLYVKYEYYTWAVMAYEWY Mamu-A3:1310,YYAMYRENMTANAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1311,YYAMYRENMTENAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1312,YYAMYRENMTANAVANLYFRVEYYTWAVMAYEWY Mamu-A3:1313,YYSMYRENMTANAVANLYFRVEFYTWAVMAYRSY Mamu-A4:0101,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:01020,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:0103,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:0202,YYTMYRENMTANAVANLYIRVEYYTWAVMAYTWH Mamu-A4:0203,YYTMYRENMTANAVANLYFRVEFYTWAVMAYTWH Mamu-A4:0205,YYTMYRENMTANAVANLYFRVEYYTWAVMAYTWH Mamu-A4:0301,YYAMYRENMTANAVANLYFTYEYYTWAAMAYTWH Mamu-A4:0302,YYAMYRENMTANAVANLYFRVEYYTWAAMAYTWH Mamu-A4:1402,YYAMYRENMTENAVANLYFRVEFYTWAVDVYRWY Mamu-A4:14030,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:1404,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRSY Mamu-A4:1405,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:1406,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:1407,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:1408,YYAMYLENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A4:1409,YYAMYRENMTANAVANLYFRVEFYTWAVDVYRWY Mamu-A5:30010,YYAMYEEIMAEDAVDTLYFVYGFYTWSRHAYEWY Mamu-A5:3002,YYAMYEEIMAEDAVDTLYFVYEFYTWSRHTYEWY Mamu-A5:3003,YYAMYEEIMAEDAVDTLYFVYGFYTWSRHAYEWY Mamu-A5:3004,YYAMYEEIMAEDAVDTLYFVYGFYTWSRHAYEWY Mamu-A5:3005,YYAMYEEIMAEDAVDTLYFVYGYYTWSRHAYEWY Mamu-A5:3006,YYAMYEEIMAEDAVDTLYFVYGFYTWSRHAYEWY Mamu-A6:0101,YHAMYREKMTEMAVANLYIVYSYYTLAAHAYLSY Mamu-A6:0102,YHAMYREKMTEMAVANLYIVYSYYTLAAHAYLSY Mamu-A6:0103,YHAMYREKMTEMAVANLYIVYSYYTLAAHAYLSY Mamu-A6:0104,YHAMYREKMTEMAVANLYIVYSYYTLAAMAYLSY Mamu-A6:0105,YHAMYREKMTEMAVANLYIVYSYYTLAAMAYLSY Mamu-A70103,YYAMYREIMTATYGNTAYFKYEFYTWAAHTYEWY Mamu-A7:0101,YYAMYRENMTATYGNTAYFTYEFYTWAAWAYEWY Mamu-A7:0102,YYAMYRENMTATYENTAYFTYEFYTWAAWAYEWY Mamu-A7:0103,YYAMYREIMTATYGNTAYFKYEFYTWAAHTYEWY Mamu-A7:0201,YTSEYRNICAATYENTLYLKYEFYTWAAHTYEWY Mamu-AG:01,YYAMYRENMTPTYVNTLYIKYEFYTWAAHTYEWY Mamu-AG:02011,YYAMYRENMTATYENTLYIKYEFYTWAAHTYEWY Mamu-AG:02012,YYAMYRENMTATYENTLYIKYEFYTWAAHTYEWY Mamu-AG:0202,YYAMYRENMTATYENTLYIKYEFYTWAAHTYEWY Mamu-AG:03011,YYAMYRENMTATYANTLYFKYEFYTWAAHTYEWY Mamu-AG:0302,YYAMYRENMTATYANTLYFKYEFYTWAAHTYEWY Mamu-B001:01,YHSMYREKAGNTDENIAYLMHYRYTWAVRAYRWY Mamu-B003:01,YSSEYEENAGHTDADNLYLTYHYYTWAEVAYTWY Mamu-B004:01,YSEMYEERAGNTFVGNLYYWYDFYTWAEQAYTWY Mamu-B008:01,YSSEYEERAGHTDADTLYLTYHYYTWAEVAYTWY Mamu-B01,YHSMYREKAGNTDENIAYLMHYRYTWAVRAYRWY Mamu-B01,YHSMYREKAGNTDENIAYLMHYRYTWAVRAYRWY Mamu-B017:04,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B02,YSEMYRNNSVTTFVGNLYLWYHFYTWAEMAYTWH Mamu-B03,YSSEYEENAGHTDADNLYLTYHYYTWAEVAYTWY Mamu-B03,YSSEYEENAGHTDADNLYLTYHYYTWAEVAYTWY Mamu-B03901,YTELYEERAETTFVSTAYIWYDYYTWAEMAYRWY Mamu-B04,YSEMYEERAGNTFVGNLYYWYDFYTWAEQAYTWY Mamu-B04,YSEMYEERAGNTFVGNLYYWYDFYTWAEQAYTWY Mamu-B05,YYAMYEQRVGHTFVSNLYLRSDYYTWAVLAYEWY Mamu-B065:02,YSEMYEQRAGHTEGNTAYLWYDLYTWAEWAYEWY Mamu-B07,YSEMYEARAGNTHGNTAYLWYEFYTWAALAYKWY Mamu-B08,YSSEYEERAGHTDADTLYLTYHYYTWAEVAYTWY Mamu-B08,YSSEYEERAGHTDADTLYLTYHYYTWAEVAYTWY Mamu-B1001,YTEMYEQNSANTHVDTAYLTYHYYTWAERAYRWY Mamu-B12,YSEMYEQNAANTDVSNLYVIYHFYTWDYFAYRWY Mamu-B17,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B17,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B19,YTEMYRNRAGNTEGNTLYVRYHSYTWAEMAYEWH Mamu-B20,YSEMYRNRAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B21,YHSMYRNISAHTHGNTLYITYNHYTWDYFADASY Mamu-B22,YTEMYRNRAANTDGNTAYIWYHFYTWAEQAYEWH Mamu-B24,YSSMYRERAGNTFVSNLYLWYDSYTWAVQAYTWH Mamu-B27,YHSEYEQNAAHSHVSNLYLKYDYYTWAALAYTWY Mamu-B28,YGYMYDVRAARTDVDTLYIIYRDYTWAVMAYEWY Mamu-B3002,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B36,YYAMYQENMTATDADTLYITYEFYTWAEWAYEWY Mamu-B37,YYAMYEQRVARTDVDTLYIIYRDYTWAVRAYTWY Mamu-B38,YHEMYRNRAANTDGNTAYIWYYDYTWAALAYTWY Mamu-B39,YTELYEERAETTFVSTAYIWYDYYTWAEMAYRWY Mamu-B3901,YTELYEERAETTFVSTAYIWYDYYTWAEMAYRWY Mamu-B40,YTEMYEQNSGHTHVNTAYIRYDFYTWAVMAYRWY Mamu-B41,YSEMYEQIAGHTEGNTAYIWYHLYTWAEWAYEWY Mamu-B43,YSEMYRNRAGNTEGSTLYFRYDSYTWAERAYTWH Mamu-B44,YHAEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B45,YHSEYEEIAANTHGNTLYIKYDYYTWAAQAYEWY Mamu-B46,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B47,YHSEYREKAAQTDVDTLYIWSRDYTWDYLAYTWY Mamu-B48,YSAMYEEIADATFVGILYYWYHFYTWVEFAYRWY Mamu-B48,YSAMYEEIADATFVGILYYWYHFYTWVEFAYRWY Mamu-B49,YGVMYEEKADNTHVSNLYFRYYFYTWAVLAHPWY Mamu-B5002,YSAMYRENAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B52,YSEMYEERAGNTFVNTAYIGYHHYTWAVLAYRWY Mamu-B53,YGAMYEQLAARTDVGTLYYWLHSYTWDYFAYEWY Mamu-B55,YSAMYEEKADISFVSNLYYWVHYYTWVGFAYRSY Mamu-B57,YHAEYEQIAGNTHVDTLYLTYHSYTWAAQAYRWY Mamu-B5802,YSEMYRNNAGHTFGNTAYLWYHFYTWAEQAYEWY Mamu-B6002,YSSMYEQLADFSFVGNLYLWYHFYTWAEVAHTWH Mamu-B61,YSAMYRESAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B63,YSAMYEQLADISFVGNLYLWYHFYTWAEMAYTWH Mamu-B64,YGYVYEQIAARTDADTLYIWFHSYTWDYQAYEWY Mamu-B65,YSEMYEERAGHTEGNTAYLWYDLYTWAEWAYEWY Mamu-B66,YSYMYEEKAARTDVDTLYIIYRDYTWAVWAYTWY Mamu-B6601,YSYMYEEKAARTDVDTLYIIYRDYTWAVWAYTWY Mamu-B67,YSEMYEEIAANTDGNTLYVISHHYTWAERAYGWY Mamu-B69,YTSMYEERAGHTDGGILYYRSHRYTWAVKAYEWY Mamu-B70,YGYVYEQLAARTDADTLYIWFHSYTWDYMAYEWY Mamu-B71,YSSMYRNKAAHTDVDTLYIMYRDYTWAVRAYLSY Mamu-B8301,YSEMYEQNSARTDVDTLYITYRDYTWAAQAYRSY Mamu-B8701,YSAMYEEKAGHTDENTLYLRSYRYTWAARAYRWY Mamu-B:00101,YHSMYREKAGNTDENIAYLMHYRYTWAVRAYRWY Mamu-B:00102,YHSMYREKAGNTDENIAYLMHYRYTWAVRAYRWY Mamu-B:00201,YSEMYRNNSVTTFVGNLYLWYHFYTWAEMAYTWH Mamu-B:00202,YSEMYRNNSVTTFVGNLYLWYHFYTWAEMAYTWH Mamu-B:00301,YSSEYEENAGHTDADNLYLTYHYYTWAEVAYTWY Mamu-B:00302,YSSEYEENAGHTDADNLYLTYHYYTWAEVAYTWY Mamu-B:00401,YSEMYEERAGNTFVGNLYYWYDFYTWAEQAYTWY Mamu-B:00501,YYAMYEQRVGHTFVSNLYLRSDYYTWAVLAYEWY Mamu-B:00502,YYAMYEQRVGHTFVSNLYLRSDYYTWAVLAYEWY Mamu-B:00601,YHAMYEEIAGHTEGNTLYVWHYFYTWAERAYQWY Mamu-B:00602,YHAMYEEIAGHTEGNTLYVWHHLYTWAERAYQWY Mamu-B:00701,YSEMYEARAGNTHGNTAYLWYEFYTWAALAYKWY Mamu-B:00702,YSEMYEARAGNTHGNTAYLWYEFYTWAALAYKWY Mamu-B:00703,YSEMYEARAGNTHGNTAYLWYEFYTWAALAYKWY Mamu-B:00704,YSEMYEARAANTHGNTAYLWYEFYTWAALAYKWY Mamu-B:00801,YSSEYEERAGHTDADTLYLTYHYYTWAEVAYTWY Mamu-B:01001,YTEMYEQNSANTHVDTAYLTYHYYTWAERAYRWY Mamu-B:01101,YHAEYEQIAGNAHGNNLYVTYEFYTWAADAYPWY Mamu-B:01201,YSEMYEQNAANTDVSNLYVIYHFYTWDYFAYRWY Mamu-B:01301,YGSEYEQIAANTDVDTLYIWYRDYTWDYFAYTWY Mamu-B:01401,YYAMYEQRVGHTFVSNLYFRSDYYTWASLAYEWY Mamu-B:01501,YTEMYEQNSGHTEENTLYIWYDSYTWAVLAYRWY Mamu-B:01502,YTEMYEQNSGHTEENTLYIWYDSYTWAVLAYRWY Mamu-B:01601,YTAMYEERAAHTDGGILYYKSYRYTWAALAYEWY Mamu-B:01701,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B:01702,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B:01703,YYAEYEQRAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B:01704,YYSEYEARAEATHENTAYIKYHSYTWNYFAYEWY Mamu-B:01801,YHEMYRNNAAHTDVDTLYIWYRDYTWDYFAYTWY Mamu-B:01901,YTEMYRNRAGNTEGNTLYVRYHSYTWAEMAYEWH Mamu-B:01902,YTEMYRNSAGNTEGNTLYVRYHSYTWAEMAYEWH Mamu-B:01903,YTEMYRNRAGNTEGNTLYVRYHSYTWAEMAYEWY Mamu-B:02001,YSEMYRNRAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B:02101,YHSMYRNISAHTHGNTLYITYNHYTWDYFADASY Mamu-B:02102,YHSMYRNISAHTHGNTLYITYNHYTWDYFADASY Mamu-B:02103,YHSMYRNISAHTHGNTLYITYNHYTWDYFADASY Mamu-B:02201,YTEMYRNRAANTDGNTAYIWYHFYTWAEQAYEWH Mamu-B:02301,YTEMYRNNSGHTHADTLYLKYHYYTWAERAYTWY Mamu-B:02401,YSSMYRERAGNTFVSNLYLWYDSYTWAVQAYTWH Mamu-B:02501,YYSEYEQRVETADMCTVYFRFYSYTWAYFAYESY Mamu-B:02601,YHAEYEQIAGNTHVDTLYLTYHSYTWAAQAYRWY Mamu-B:02602,YHAEYEQIAGNTHVDTLYLTYHSYTWAAQAYRWY Mamu-B:02701,YHSEYEQNAAHSHVSNLYLKYDYYTWAALAYTWY Mamu-B:02702,YHSEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B:02703,YHSEYEQNAAHSHVSNLYLKYDYYTWAALAYTWY Mamu-B:02801,YGYMYDVRAARTDVDTLYIIYRDYTWAVMAYEWY Mamu-B:02802,YGYMYDVIAAQTDVDTLYIIYRDYTWAVMAYEWY Mamu-B:02803,YGYMYDVIAAQTDVDTLYIIYRDYTWAVMAYEWY Mamu-B:02901,YSEMYEERAANTDVDTLYIWYHSYTWDYFAYTWY Mamu-B:02902,YSEMYEERAANTDVDTLYIWYHSYTWDYFAYTSH Mamu-B:03001,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B:03002,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B:03003,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B:03004,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B:03005,YSSEYEQNTAHNHVCTVYLRFNYYTWTYFAYTSH Mamu-B:03101,YSSMYEQIADLTFVDTAYFWFHFYTWAEWADTWY Mamu-B:03102,YSSMYEQIADLTFVDTAYFWFHFHTWAEWAHTWY Mamu-B:03103,YSSVYEQIADLTFVDTAYFWFHFHTWAEWAHTWY Mamu-B:03201,YSEMYEERAGTTFVCTAYIWYNHYTWAEFAYKSY Mamu-B:03301,YSEMYRNRAGNTFGNTAYIWYHFYTWAEQAYEWY Mamu-B:03401,YSEMYEQIAANTEGNTAYLRYHLYTWAEWAYRWY Mamu-B:03501,YHVMYEEKADNTHVSNLYLRYYFYTWAVLAHPWY Mamu-B:03601,YYAMYQENMTATDADTLYITYEFYTWAEWAYEWY Mamu-B:03602,YYAMYQENMTATDADTLYITYEFYTWAEWAYEWY Mamu-B:03701,YYAMYEQRVARTDVDTLYIIYRDYTWAVRAYTWY Mamu-B:03801,YHEMYRNRAANTDGNTAYIWYYDYTWAALAYTWY Mamu-B:03802,YSEMYRNRAANTHGNTAYIKYYDYTWAALAYTWY Mamu-B:03901,YTELYEERAETTFVSTAYIWYDYYTWAEMAYRWY Mamu-B:04001,YTEMYEQNSGHTHVNTAYIRYDFYTWAVMAYRWY Mamu-B:04002,YTEMYEQNSGHTHVNTAYIRYDFYTWAVLAYRWY Mamu-B:04101,YSEMYEQIAGHTEGNTAYIWYHLYTWAEWAYEWY Mamu-B:04201,YYAMYEQIADTTFVSNLYLEYDFYTWAVLAYEWY Mamu-B:04301,YSEMYRNRAGNTEGSTLYFRYDSYTWAERAYTWH Mamu-B:04401,YHAEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B:04402,YHAEYEQNAAHTHVSNLYIKYDYYTWAALAYTWY Mamu-B:04403,YHAEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B:04404,YHSEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B:04405,YHAEYEQNAAHTHVSNLYLKYDYYTWAALAYTWY Mamu-B:04501,YHSEYEEIAANTHGNTLYIKYDYYTWAAQAYEWY Mamu-B:04502,YHSEYEHIAANTHGNTLYIKYDYYTWAAQAYEWY Mamu-B:04503,YHSEYEQIAANTHGNTLYIKYDYYTWAAQAYEWY Mamu-B:04504,YHSEYEQIAANTHGNTLYIKYDYYTWAAQAYEWY Mamu-B:04601,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04602,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04603,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04604,YSSMYEQLADVTFVGNLYLWSHFYTWAEWAHTWH Mamu-B:04605,YSAMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04607,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04608,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04609,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04610,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04611,YSSMYEQLAEAIFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04612,YSSMYEQIAEATFVSNLYLWYHFYTWAEWAHTWH Mamu-B:04613,YSSMYEQLADVTFVGNLYLWSHFYTWAEWAHTWH Mamu-B:04614,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04615,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04616,YSSMYEQLADVTFVGNLYLWSHFYTWAEWAHTWH Mamu-B:04617,YSSMYEQLAEATFVGNLYLWYHFYTWAEWAHTWH Mamu-B:04701,YHSEYREKAAQTDVDTLYIWSRDYTWDYLAYTWY Mamu-B:04702,YHSMYRNKAAHTDVDTLYIWSRDYTWDYLAYTWY Mamu-B:04703,YHSMYRNKAAQTDVDTLYIWSRDYTWDYLAYTWY Mamu-B:04704,YHSMYRNKAAHTDVDTLYIWSRDYTWDYLAYTWY Mamu-B:04705,YHSEYREKAAQTDVDTLYIWSRDYTWAERAYTWY Mamu-B:04801,YSAMYEEIADATFVGILYYWYHFYTWVEFAYRWY Mamu-B:04802,YSSMYEQIADATFVGILYYWVHFYTWVEFAYRWY Mamu-B:04901,YGVMYEEKADNTHVSNLYFRYYFYTWAVLAHPWY Mamu-B:05002,YSAMYRENAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B:05101,YGYTYEERAARTDADILYLWAHSYTWTYFAYPWY Mamu-B:05102,YGYTYEERAARTDADTLYLWAHSYTWTYFAYPWY Mamu-B:05103,YGYTYEERAARTDADILYLWAHSYTWTYFAYPWY Mamu-B:05104,YGYTYEERAARTDADTLYLWAHSYTWTYFAYPWY Mamu-B:05105,YGSTYEERAARTDADTLYVWAHSYTWTYFAYPWY Mamu-B:05201,YSEMYEERAGNTFVNTAYIGYHHYTWAVLAYRWY Mamu-B:05301,YGAMYEQLAARTDVGTLYYWLHSYTWDYFAYEWY Mamu-B:05302,YGAMYEQLAARTDVGTLYYWLHSYTWDYFAYEWY Mamu-B:05401,YSSMYEQLADISFVGNLYLWYHFYTWAEMAHTWH Mamu-B:05501,YSAMYEEKADISFVSNLYYWVHYYTWVGFAYRSY Mamu-B:05601,YSAMYEQRVEATFGNTAYFWFEYYTWAEMAYEWY Mamu-B:05602,YSAMYEQRVEATFGNTAYFWFDSYTWAELAYEWY Mamu-B:05701,YHAEYEQIAGNTHVDTLYLTYHSYTWAAQAYRWY Mamu-B:05702,YHAEYEQIAGNTHVDTLYLTYHSYTWAAQAYRWY Mamu-B:05802,YSEMYRNNAGHTFGNTAYLWYHFYTWAEQAYEWY Mamu-B:05901,YGAMYEQIAANTDVDTLYIWYHDYTWDYFAYTWY Mamu-B:06001,YSSMYEQLADFSFVGNLYLWYHFYTWAEVAHTWH Mamu-B:06002,YSSMYEQLADFSFVGNLYLWYHFYTWAEVAHTWH Mamu-B:06003,YSSMYEQLADISFVGNLYIWYHFYTWAEMAHTWH Mamu-B:06101,YSAMYRESAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B:06102,YSAMYRENAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B:06103,YSAMYRENAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B:06301,YSAMYEQLADISFVGNLYLWYHFYTWAEMAYTWH Mamu-B:06302,YSAMYEQLADISFVGNLYLWYHFYTWAEMAYTWH Mamu-B:06401,YGYVYEQIAARTDADTLYIWFHSYTWDYQAYEWY Mamu-B:06402,YGYVYEQIAARADADTLYIWFHSYTWDYQAYEWY Mamu-B:06501,YSEMYEERAGHTEGNTAYLWYDLYTWAEWAYEWY Mamu-B:06502,YSEMYEQRAGHTEGNTAYLWYDLYTWAEWAYEWY Mamu-B:06503,YSEMYEQRAGHTEGNTAYLWYDLYTWAEWAYEWY Mamu-B:06601,YSYMYEEKAARTDVDTLYIIYRDYTWAVWAYTWY Mamu-B:06701,YSEMYEEIAANTDGNTLYVISHHYTWAERAYGWY Mamu-B:06702,YSEMYEEIAANTDGNTLYVISHHYTWAERAYGWY Mamu-B:06801,YSEMYRNRAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B:06802,YSEMYRNRAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B:06803,YSEMYRNRAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B:06804,YSEMYRNSAGHTHGNTLYVISHHYTWAEWAYGWY Mamu-B:06805,YSEMYRNRAGHTHGNTLYVICHHYTWAEWAYGWY Mamu-B:06901,YTSMYEERAGHTDGGILYYRSHRYTWAVKAYEWY Mamu-B:06902,YTAMYEQRAGHTDGGNLYYRSYRYTWAVKAYEWY Mamu-B:06903,YTAMYEARVGHTDGGILYYKSHRYTWAVKAYEWH Mamu-B:06904,YTSMYEARAGHTDGGNLYYRSHRYTWAVWAYEWH Mamu-B:07001,YGYVYEQLAARTDADTLYIWFHSYTWDYMAYEWY Mamu-B:07002,YGYVYEQIAARTDADTLYIWFHSYTWDYMAYEWY Mamu-B:07101,YSSMYRNKAAHTDVDTLYIMYRDYTWAVRAYLSY Mamu-B:07201,YIAMYEEKVETTFVSNLYYWYHFYTWAVMAYQCY Mamu-B:07202,YIAMYEEKVETTFVSNLYYWYHFYTWAVMAYQCY Mamu-B:07301,YSEMYEETAANTEVNTAYIRYRDYTWDYMVYRWY Mamu-B:07401,YGYAYEQLAARTDVDTLYIWSRDYTWAEWAYEWH Mamu-B:07402,YGYAYEQLAARTDVDTLYIWSRDYTWAEWAYEWH Mamu-B:07501,YSSMYEEKADVSFVGTLYYWVHYYTWAEFAYPWY Mamu-B:07502,YSSMYEEKADVSFVGTLYYWVHYYTWVEFAYPWY Mamu-B:07601,YHSMYEQIAANTDVDTLYITYRDYTWAEWAYEWY Mamu-B:07602,YHSMYEQIAGNTHVDTLYITYRDYTWAEWAYEWY Mamu-B:07701,YHSEYEQIAGNTDADTLYLWYRDYTWAEWAYEWH Mamu-B:07702,YHSEYEQIADTTDANTLYLWYRDYTWAEWAYEWH Mamu-B:07801,YSAMYRENAANTDVNTLYLMHHQYTWDYFAYEWY Mamu-B:07901,YSSMYEQLANIFFVGNLYLWYHFYTWAEMAHTWY Mamu-B:07902,YSSMYEQLANIFFVGTLYLWYHFYTWAEMAHTWY Mamu-B:07903,YSSMYEQLADISFVGNLYLWYHFYTWAEMAHTWY Mamu-B:08001,YHYMYEEIAANTDADTLYYWSRDYTWAYFAYEWY Mamu-B:08101,YHEMYRNRAGNTEGNTLYIWYDSYTWAEMAYEWH Mamu-B:08102,YHEMYRNRAGNTEGNTLYIWYDSYTWAEMAYEWH Mamu-B:08201,YHSMYEQIAEATEGNTLYLWYDSYTWAAQAYEWY Mamu-B:08202,YHSMYEQIAEATFGNTLYLWYDSYTWAAQAYEWY Mamu-B:08301,YSEMYEQNSARTDVDTLYITYRDYTWAAQAYRSY Mamu-B:08401,YYAMYEQNAAHSHVSNLYLKYDYYTWAALAYTWY Mamu-B:08501,YGAMYEQIAANTFVGTLYLRYESYTWDYLAYTWY Mamu-B:08502,YGAMYEQIAETTFVGTLYLRYESYTWDYLAYTWY Mamu-B:08601,YFAMYEQRAAHTDESNLYIWYRDYTWAEWAYEWY Mamu-B:08602,YFAMYEQRAAHTDESNLYIWYRDYTWAEWAYEWY Mamu-B:08603,YFAMYEQRAAHTDESNLYIWYRDYTWAEWAYEWY Mamu-B:08701,YSAMYEEKAGHTDENTLYLRSYRYTWAARAYRWY Mamu-B:08801,YYAMYEEKVETTFVSILYYWYHSYTWAVMAYQCY Mamu-B:08901,YHSEYEQIAGNTDENTLYIWYDSYTWAAQAYEWY Mamu-B:09001,YHYMYEERAANTDVDTLYIWSRDYTWTYFAYTWY Mamu-B:09101,YGYMYEEKAARTDVNTLYIIYDYYTWAERAYTWY Mamu-B:09102,YGYMYEEKAARTDVNTLYIIYRDYTWAERAYTWY Mamu-B:09201,YGAAYEQIAANTDVGTLYIWFHSYTWDYFAYEWY Mamu-B:09301,YHSMYRNTAGNTDGSNLYLTYEYYTWAEWAYTWY Mamu-B:09401,YHEMYEANAARTDVDTLYIWARDYTWDYLAYTWY Mamu-B:09501,YSSMYEAIAARTDVDTLYITYRDYTWDYFAYRWY Mamu-B:09601,YSSMYEQLADISFVGNLYLWYHFYTWAEMAYTWH Mamu-B:09701,YSAMYEQLADNSFVSNLYLWSHFYTWAEMAYTWH Mamu-B:09801,YSVMYEQRVDATFVSNLYLTSYQYTWAVWAYECY Mamu-B:09901,YSTMYEQLADISFVSNLYITYRDYTWDYFADRWY Mamu-B:10001,YSEMYRNNAGNTFGNTVYLWYHLYTWAEQAYEWH Mamu-B:10101,YSYMYEEKAGHTDVDTLYIIYRDYTWAVDAYPWY Patr-A0101,YFAMYQESAAHTDVDTLYIIYRDYTWAAQAYTWY Patr-A01:01,YFAMYQESAAHTDVDTLYIIYRDYTWAAQAYTWY Patr-A0201,YFAMYEESAAHTDVDTLYIIYRDYTWAARAYTWY Patr-A02:01,YFAMYEESAAHTDVDTLYIIYRDYTWAARAYTWY Patr-A0301,YYAMYQENMASTDVDTLYIIYRDYTWAALAYRWY Patr-A0302,YYAMYQENMASTDVDTLYIIYRDYTWAALAYRGY Patr-A03:01,YYAMYQENMASTDVDTLYIIYRDYTWAALAYRWY Patr-A03:02,YYAMYQENMASTDVDTLYIIYRDYTWAALAYRGY Patr-A0401,YSAMYEESVASTDVDTLYILFRDYTWAALAYTWY Patr-A0402,YSAMYEESVASTDVDTLYILFRDYTWAAWAYTGY Patr-A0404,YSAMYEESVAQTDVDTLYILFRDYTWAAWAYTGY Patr-A04:01,YSAMYEESVASTDVDTLYILFRDYTWAALAYTWY Patr-A04:02,YSAMYEESVASTDVDTLYILFRDYTWAAWAYTGY Patr-A04:04,YSAMYEESVAQTDVDTLYILFRDYTWAAWAYTGY Patr-A0501,YSAMYEESVAFTDVDTLYILFRDYTWAAWAYTGY Patr-A05:01,YSAMYEESVAFTDVDTLYILFRDYTWAAWAYTGY Patr-A0601,YSAMYQESVASTDANTLYIIYRDYTWAAWAYTGY Patr-A0602,YSAMYQESVAFTDANTLYIIYRDYTWAAWAYTGY Patr-A06:01,YSAMYQESVASTDANTLYIIYRDYTWAAWAYTGY Patr-A06:02,YSAMYQESVAFTDANTLYIIYRDYTWAAWAYTGY Patr-A0701,YSAMYRESVAGIYANTLYILFELYTWVAQAYRSY Patr-A07:01,YSAMYRESVAGIYANTLYILFELYTWVAQAYRSY Patr-A0801,YSAMYQESVAGIYANTLYIIFELYTWAARAYTWY Patr-A0802,YSAMYQESVAGIYANTLYILFELYTWAARAYTWY Patr-A0803,YSAMYQESVAGIYANTLYIIFELYTWAARAYTWY Patr-A08:01,YSAMYQESVAGIYANTLYIIFELYTWAARAYTWY Patr-A08:02,YSAMYQESVAGIYANTLYILFELYTWAARAYTWY Patr-A08:03,YSAMYQESVAGIYANTLYIIFELYTWAARAYTWY Patr-A0901,YSAMYEESVASTDVDTLYIIYRYYTWAALAYTWY Patr-A0902,YSAMYEESVASTDVDTLYIIYRDYTWAALAYTWY Patr-A09:01,YSAMYEESVASTDVDTLYIIYRYYTWAALAYTWY Patr-A09:02,YSAMYEESVASTDVDTLYIIYRDYTWAALAYTWY Patr-A1001,YSAMYQENMAFIYANTLYILFEHYTWAAWAYRGY Patr-A10:01,YSAMYQENMAFIYANTLYILFEHYTWAAWAYRGY Patr-A1101,YYAMYQENMASTDANTLYIIYRDYTWAARAYTGY Patr-A11:01,YYAMYQENMASTDANTLYIIYRDYTWAARAYTGY Patr-A1201,YSAMYEESVASTDANTLYILFEHYTWAALAYTWY Patr-A12:01,YSAMYEESVASTDANTLYILFEHYTWAALAYTWY Patr-A1301,YSAMYEESVAFTDANTLYILFRYYTWAAQAYTWY Patr-A13:01,YSAMYEESVAFTDANTLYILFRYYTWAAQAYTWY Patr-A1401,YSAMYEESVAFTDANTLYILFEHYTCAALAYTWY Patr-A14:01,YSAMYEESVAFTDANTLYILFEHYTCAALAYTWY Patr-A1501,YSAMYEESVAFTDANTLYILFEHYTWAAQAYTWY Patr-A1502,YSAMYEESVAFTDANTLYILFEHYTWAADAYTWY Patr-A15:01,YSAMYEESVAFTDANTLYILFEHYTWAAQAYTWY Patr-A15:02,YSAMYEESVAFTDANTLYILFEHYTWAADAYTWY Patr-A1601,YYAMYEESAAHTDVDTLYILYRDYTWAVLAYLGY Patr-A16:01,YYAMYEESAAHTDVDTLYILYRDYTWAVLAYLGY Patr-A1701,YYAMYEESTASTNVDTLYIIYRDYTWAVDAYTWY Patr-A1702,YYAMYEESAASTNVDTLYIIYRDYTWAVDAYTWY Patr-A1703,YYAMYQENMASTDVDTLYIIYRDYTWAVDAYTWY Patr-A17:01,YYAMYEESTASTNVDTLYIIYRDYTWAVDAYTWY Patr-A17:02,YYAMYEESAASTNVDTLYIIYRDYTWAVDAYTWY Patr-A17:03,YYAMYQENMASTDVDTLYIIYRDYTWAVDAYTWY Patr-A1801,YSAMYEESVAFTDVDTLYILFELYTWAEWAYRWY Patr-A18:01,YSAMYEESVAFTDVDTLYILFELYTWAEWAYRWY Patr-A2301,YSAMYRESVASTDANTLYILFRDYTWVAQAYRSY Patr-A23:01,YSAMYRESVASTDANTLYILFRDYTWVAQAYRSY Patr-A2401,YSAMYRESVAGTDANTLYIIYRDYTWAAWAYTGY Patr-A24:01,YSAMYRESVAGTDANTLYIIYRDYTWAAWAYTGY Patr-B0101,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B0102,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B01:01,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B01:02,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B0201,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B0203,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B02:01,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B02:03,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B0301,YDTMYRENVASTDENIAYWTFYYYTWAALAYTWY Patr-B0302,YDTMYRENVASTDENIAYWTFYYYTWAALAYTWY Patr-B03:01,YDTMYRENVASTDENIAYWTFYYYTWAALAYTWY Patr-B03:02,YDTMYRENVASTDENIAYWTFYYYTWAALAYTWY Patr-B0401,YYTKYREISTNTYVGNLYWTFRYYTWAVLAYTWY Patr-B0402,YYTKYREISTNTYVGNLYWTFRYYTWAVLAYTWY Patr-B04:01,YYTKYREISTNTYVGNLYWTFRYYTWAVLAYTWY Patr-B04:02,YYTKYREISTNTYVGNLYWTFRYYTWAVLAYTWY Patr-B0501,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B0502,YYSEYREISTNTYESNLYIRYEYYTWARLAYTWY Patr-B05:01,YYSEYREISTNTYESNLYIRYEYYTWAWLAYTWY Patr-B05:02,YYSEYREISTNTYESNLYIRYEYYTWARLAYTWY Patr-B0601,YYSMYRENVASTDGSNLYWTYDYYTWAVWAYLWY Patr-B06:01,YYSMYRENVASTDGSNLYWTYDYYTWAVWAYLWY Patr-B0701,YLTMYRENVASTYENIAYLTYRFYTWAVHAYLWY Patr-B0702,YLTMYRENVAFTYENIAYITFRYYTWAVHAYLWY Patr-B07:01,YLTMYRENVASTYENIAYLTYRFYTWAVHAYLWY Patr-B07:02,YLTMYRENVAFTYENIAYITFRYYTWAVHAYLWY Patr-B0801,YYAMYREISTNTYVGNLYWTYRFYTWAWLAYTWY Patr-B0802,YYAMYREISTNTYVGNLYWTYRFYTWAWLAYTWY Patr-B08:01,YYAMYREISTNTYVGNLYWTYRFYTWAWLAYTWY Patr-B08:02,YYAMYREISTNTYVGNLYWTYRFYTWAWLAYTWY Patr-B0901,YYTMYRENMASTDENIAYIRYYYYTWAARAYTWY Patr-B09:01,YYTMYRENMASTDENIAYIRYYYYTWAARAYTWY Patr-B1001,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B10:01,YYTMYRENMASTDENIAYWTYGYYTWAERAYTWY Patr-B1101,YYSEYRNIYAQTDVGNLYWTYDYYTWAERAYLWY Patr-B1102,YYSEYRNIYAQTDVGNLYWTYDYYTWAVWAYLWY Patr-B11:01,YYSEYRNIYAQTDVGNLYWTYDYYTWAERAYLWY Patr-B11:02,YYSEYRNIYAQTDVGNLYWTYDYYTWAVWAYLWY Patr-B1202,YYSEYRNICAQTDGSNLYLRYYDYTWAVHAYLWY Patr-B12:02,YYSEYRNICAQTDGSNLYLRYYDYTWAVHAYLWY Patr-B1301,YYSEYRNIYAQTDVSNLYLSYEYYTWAVRAYTWY Patr-B13:01,YYSEYRNIYAQTDVSNLYLSYEYYTWAVRAYTWY Patr-B1401,YYAMYRNGITQTDENTLYLSYDYYTWAVLAYTWY Patr-B14:01,YYAMYRNGITQTDENTLYLSYDYYTWAVLAYTWY Patr-B1601,YYTKYREISTNTDVSNLYWTFRYYTWAVLAYTWY Patr-B1602,YYTKYREISTNTDESNLYWTFRYYTWAVLAYTWY Patr-B16:01,YYTKYREISTNTDVSNLYWTFRYYTWAVLAYTWY Patr-B16:02,YYTKYREISTNTDESNLYWTFRYYTWAVLAYTWY Patr-B1701,YYSVYREIFTNTDVSNLYLTYYYYSFAALAYTWY Patr-B1702,YYSVYREIFTNTDGSNLYLTYYYYSFAALAYTWY Patr-B1703,YFTVYRQISTNTDGSNLYLTYYYYSFAALAYTWY Patr-B17:01,YYSVYREIFTNTDVSNLYLTYYYYSFAALAYTWY Patr-B17:02,YYSVYREIFTNTDGSNLYLTYYYYSFAALAYTWY Patr-B17:03,YFTVYRQISTNTDGSNLYLTYYYYSFAALAYTWY Patr-B1801,YFTMYRENVASTDENIAYIRYYSYTWAERAYTWY Patr-B18:01,YFTMYRENVASTDENIAYIRYYSYTWAERAYTWY Patr-B1901,YYSEYRNIYAQTDENIAYLTYYDYTWAELAYTWY Patr-B19:01,YYSEYRNIYAQTDENIAYLTYYDYTWAELAYTWY Patr-B2001,YYTMYRENVASTDENIAYWTYGFYTWAVLAYTWY Patr-B20:01,YYTMYRENVASTDENIAYWTYGFYTWAVLAYTWY Patr-B2101,YYTMYRQISTNTYESNLYITYRFYTWAWLAYLWY Patr-B21:01,YYTMYRQISTNTYESNLYITYRFYTWAWLAYLWY Patr-B2201,YYTKYREISTNTYESNLYLTFDYYTWAALAYEWY Patr-B2202,YYTKYREISTNTYENIAYLTFDYYTWAALAYEWY Patr-B22:01,YYTKYREISTNTYESNLYLTFDYYTWAALAYEWY Patr-B22:02,YYTKYREISTNTYENIAYLTFDYYTWAALAYEWY Patr-B2301,YYSEYREISTNTYENIAYLTYRFYTWAWWAYTWY Patr-B2302,YYSEYREISTNTYENIAYLTYRFYTWAWLAYLWY Patr-B2303,YYSEYREISTNTYENTLYLTYRYYTWAWLAYLWY Patr-B23:01,YYSEYREISTNTYENIAYLTYRFYTWAWWAYTWY Patr-B23:02,YYSEYREISTNTYENIAYLTYRFYTWAWLAYLWY Patr-B23:03,YYSEYREISTNTYENTLYLTYRYYTWAWLAYLWY Patr-B2401,YYTKYREISTNTDENTLYWTFRFYTWAVRAYTWY Patr-B2402,YYTKYREISTNTDENTLYWTFRYYTWAVRAYTWY Patr-B24:01,YYTKYREISTNTDENTLYWTFRFYTWAVRAYTWY Patr-B24:02,YYTKYREISTNTDENTLYWTFRYYTWAVRAYTWY Patr-B2501,YLAMYRENMAFTYENIAYLTYRFYTWAERAYLWY Patr-B25:01,YLAMYRENMAFTYENIAYLTYRFYTWAERAYLWY Patr-B2601,YYTMYRENVAFTDENTLYLTYEFYTWAEHAYLGY Patr-B26:01,YYTMYRENVAFTDENTLYLTYEFYTWAEHAYLGY Patr-B2701,YYTMYRENVASTDGSNLYLTYYYYTWAVWAYLWY Patr-B27:01,YYTMYRENVASTDGSNLYLTYYYYTWAVWAYLWY Patr-B2801,YYTEYRNIFAQTDVGNLYWTYYHYTWAARAYTWY Patr-B28:01,YYTEYRNIFAQTDVGNLYWTYYHYTWAARAYTWY Patr-B2901,YYAMYGNGVTQTDESNLYWTYGYYTWAVLAYTWY Patr-B29:01,YYAMYGNGVTQTDESNLYWTYGYYTWAVLAYTWY Patr-B3001,YYTKYREISTNTYENIAYIRYDYYTWAWHAYEWY Patr-B30:01,YYTKYREISTNTYENIAYIRYDYYTWAWHAYEWY Patr-B3501,YYAMYRNIYAQTDESNLYIRYEYYTWAWLAYTWY Patr-B35:01,YYAMYRNIYAQTDESNLYIRYEYYTWAWLAYTWY Patr-B3601,YYAMYRNGVAQTDENIAYIRYEYYTWAWLAYTWY Patr-B36:01,YYAMYRNGVAQTDENIAYIRYEYYTWAWLAYTWY Patr-B3701,YYAMYRNGVAQTDENIAYIRYYYYTWAARAYTWY Patr-B37:01,YYAMYRNGVAQTDENIAYIRYYYYTWAARAYTWY Patr-C0201,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKSY Patr-C0202,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKWY Patr-C0203,YDSGYREKYRQADVNKLYLRSGYYTWAELAYKWY Patr-C0204,YDSGYREKYRQADVSNLYLRSGSYTWAELAYKWY Patr-C0205,YDSGYREKYRQADVSNLYLRSGSYTWAELAYKWY Patr-C0206,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKWY Patr-C02:01,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKSY Patr-C02:02,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKWY Patr-C02:03,YDSGYREKYRQADVNKLYLRSGYYTWAELAYKWY Patr-C02:04,YDSGYREKYRQADVSNLYLRSGSYTWAELAYKWY Patr-C02:05,YDSGYREKYRQADVSNLYLRSGSYTWAELAYKWY Patr-C02:06,YDSGYREKYRQADVSNLYLWYGSYTWAELAYKWY Patr-C0301,YYAGYREKYRQADVNKLYLSYGYYTWAERAYLWY Patr-C0302,YYAGYREKYRQADVNKLYLSYELYTWAERAYLWY Patr-C0303,YYAGYREKYRQADVNKLYLSYELYTWAERAYLWY Patr-C0304,YYAGYREKYRQADVSNLYLKYEFYTWAERAYLWY Patr-C03:01,YYAGYREKYRQADVNKLYLSYGYYTWAERAYLWY Patr-C03:02,YYAGYREKYRQADVNKLYLSYELYTWAERAYLWY Patr-C03:03,YYAGYREKYRQADVNKLYLSYELYTWAERAYLWY Patr-C03:04,YYAGYREKYRQADVSNLYLKYEFYTWAERAYLWY Patr-C0401,YYAGYREKYRQADVNKLYLKYEFYTWAALAYLWY Patr-C04:01,YYAGYREKYRQADVNKLYLKYEFYTWAALAYLWY Patr-C0501,YYAGYREKYRQADVSNLYLWYDYYTLAALAYTWY Patr-C0502,YYAGYREKYRQADVSNLYLSYDYYTLAALAYTWY Patr-C05:01,YYAGYREKYRQADVSNLYLWYDYYTLAALAYTWY Patr-C05:02,YYAGYREKYRQADVSNLYLSYDYYTLAALAYTWY Patr-C0601,YYAGYREKYRQADVSNLYLSYDYYTLAALAYLWY Patr-C06:01,YYAGYREKYRQADVSNLYLSYDYYTLAALAYLWY Patr-C0701,YYAGYREKYRQADVSNLYLSYDYYTWAAHAYLWY Patr-C07:01,YYAGYREKYRQADVSNLYLSYDYYTWAAHAYLWY Patr-C0801,YYAGYREKYRQADVSNLYLSYDYYTLAALAYLWY Patr-C08:01,YYAGYREKYRQADVSNLYLSYDYYTLAALAYLWY Patr-C0901,YYAGYREKYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C0902,YYAGYRENYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C0903,YYAGYRENYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C0904,YYAGYREIYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C0905,YYAGYRQIYRQADVNKLYLKYEFYTLAALAYTWY Patr-C09:01,YYAGYREKYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C09:02,YYAGYRENYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C09:03,YYAGYRENYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C09:04,YYAGYREIYRQADVNKLYLKYEFYTLAAWAYLWY Patr-C09:05,YYAGYRQIYRQADVNKLYLKYEFYTLAALAYTWY Patr-C1001,YDSGYRQIYRQADVNKLYIRFSSYTWAALAYTWH Patr-C10:01,YDSGYRQIYRQADVNKLYIRFSSYTWAALAYTWH Patr-C1101,YYAGYREKYRQADVSNLYLSYDYYTLAARAYLWY Patr-C11:01,YYAGYREKYRQADVSNLYLSYDYYTLAARAYLWY Patr-C1201,YYAGYREKYRQADVNKLYLSYDYYTLAALAYLWY Patr-C12:01,YYAGYREKYRQADVNKLYLSYDYYTLAALAYLWY Patr-C1301,YDSGYQEKYRQADVNKLYLRSEFYTWAALAYLWY Patr-C1302,YDSGYQEKYRQADVNKLYLRSEFYTWAALAYLWY Patr-C13:01,YDSGYQEKYRQADVNKLYLRSEFYTWAALAYLWY Patr-C13:02,YDSGYQEKYRQADVNKLYLRSEFYTWAALAYLWY Patr-C1501,YYAGYREKYRQADVSNLYLWYDYYTLAALAYLWY Patr-C15:01,YYAGYREKYRQADVSNLYLWYDYYTLAALAYLWY Patr-C1601,YYAGYREKYRQADVSNLYLWYDYYTWAERAYLWY Patr-C16:01,YYAGYREKYRQADVSNLYLWYDYYTWAERAYLWY SLA-1-CHANGDA,YSAMYRNNVGSINVNTLCLWYDFYPWAAWSYTSY SLA-1-HB01,YYAMYREIQDTTYGNTLYLSYSDYTWAVESYLSY SLA-1-HB02,YYAMYREIQDTTYGTTLYLSYSDYTWAVESYLSY SLA-1-HB03,YYAMYREIQDTTYGTTLYLSYSDYTWAVESYLSY SLA-1-HB04,YYAMYREIQDTTYGNTLYLSYSDYTWAVESYLSY SLA-1-LWH,YYEMYRERVEETFVNTAYLRYRDYSWAEMSYLGY SLA-1-TPK,HYIMYREISETTYVSNLYYNYSYYSWAAWSYRWY SLA-1-YC,YSAMYEEKVDNTYVNTLYLSFRDYTWAAMSYLSY SLA-1-YDL01,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-1-YTH,YSAMYEEKVDTTYVNTLYLSSHYYSWAVRSYLSY SLA-10101,YYAMYREKQDTTYVGNLYYSYRYYTWAVRSYLSY SLA-10201,YYAMYEEKVDNTLVGTLYLSFRDYSWAEMSYRGY SLA-10202,YYAMYEEKVDNTLVGTLYLSFRDYSWAEMSYRGY SLA-10401,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-104:01,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-10501,YSAMYREKQDTTFVNTAYLSYSDYTWAVMSYLSY SLA-10601,YYAMYEEKVDNTYVGTLYLSYRDYSRAAESYLSY SLA-10701,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-10702,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-107:01,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-107:02,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-10801,YYIMYREISETTYVGTLYLRYRDYSWAEMSYLGY SLA-11101,YSEMYRERVGNTFGSNLYLWYSFYSWAARSYTWY SLA-11201,YYEMYEEKVETINVDTLYLSFRDYTWAEWSYLSY SLA-11301,YYAMYEEKVDNTYVGTLYLSFRDYTWAVRSYLSY SLA-1:0101,YYAMYREKQDTTYVGNLYYSYRYYTWAVRSYLSY SLA-1:0201,YYAMYEEKVDNTLVGTLYLSFRDYSWAEMSYRGY SLA-1:0202,YYAMYEEKVDNTLVGTLYLSFRDYSWAEMSYRGY SLA-1:0401,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-1:0501,YSAMYREKQDTTFVNTAYLSYSDYTWAVMSYLSY SLA-1:0601,YYAMYEEKVDNTYVGTLYLSYRDYSRAAESYLSY SLA-1:0701,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-1:0702,YYAEYRNIYETTYVNTLYIIYRDYTWAVLSYRGY SLA-1:0801,YYIMYREISETTYVGTLYLRYRDYSWAEMSYLGY SLA-1:1101,YSEMYRERVGNTFGSNLYLWYSFYSWAARSYTWY SLA-1:1201,YYEMYEEKVETINVDTLYLSFRDYTWAEWSYLSY SLA-1:1301,YYAMYEEKVDNTYVGTLYLSFRDYTWAVRSYLSY SLA-1:es11,YSAMYRNNVGSINVNTLYLWYDFYSWAAWSYTSY SLA-2-YDL02,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-20101,YSAMYRENVGSTDVNTLYISYSDYTWAVMSYLGY SLA-20102,YSAMYRENVGSTDVNTLYISYRDYTWAVESYTWY SLA-20201,YYTEYREISETTYVNTLYLRYSFYSFAVESYLGY SLA-20202,YYTEYREISETTYVNTLYLRYSFYSFAVESYLGY SLA-20301,YYAMYREIQDTTYVDTLYLSYRFYSWAAESYRWY SLA-20302,YYAMYREIQDTTYVDTLYLRYHDYSWAVLSYRSY SLA-20401,YDEMYRNNAGNIYGNTAYIIYSDYTWAERSYTWY SLA-20401,YDEMYRNNAGNIYGNTAYIIYSDYTWAERSYTWY SLA-20402,YDEMYRNNAGNIYGNTAYLIYSDYTWAVWSYTWY SLA-204:01,YDEMYRNNAGNIYGNTAYIIYSDYTWAERSYTWY SLA-20501,YYAMYEENAGSTFVNTAYFWYSYYTWAVRSYLWY SLA-20502,YYAMYRNNARSTFVNTAYFSYRYYTWAVESYLSY SLA-205:02,YYAMYRNNARSTFVNTAYFSYRYYTWAVESYLSY SLA-20601,YHTKYREISDYRYVGTLYYRYDFYTWAAESYTWY SLA-20701,YSAMYRENVGSTDVSNLYLVYRFYSFAVESYLGY SLA-21001,YYIMYREISDNINVNTLYLRYDDYSRAEMSYRWY SLA-21002,YYIMYREISETNYVDTLYLRYRDYTWAVESYRWY SLA-21201,YYAMYRENVGSTDVNTLYFWYSFYSWAVWSYLSY SLA-2:0101,YSAMYRENVGSTDVNTLYISYSDYTWAVMSYLGY SLA-2:0102,YSAMYRENVGSTDVNTLYISYRDYTWAVESYTWY SLA-2:0201,YYTEYREISETTYVNTLYLRYSFYSFAVESYLGY SLA-2:0202,YYTEYREISETTYVNTLYLRYSFYSFAVESYLGY SLA-2:0301,YYAMYREIQDTTYVDTLYLSYRFYSWAAESYRWY SLA-2:0302,YYAMYREIQDTTYVDTLYLRYHDYSWAVLSYRSY SLA-2:0401,YDEMYRNNAGNIYGNTAYIIYSDYTWAERSYTWY SLA-2:0402,YDEMYRNNAGNIYGNTAYLIYSDYTWAVWSYTWY SLA-2:0501,YYAMYEENAGSTFVNTAYFWYSYYTWAVRSYLWY SLA-2:0502,YYAMYRNNARSTFVNTAYFSYRYYTWAVESYLSY SLA-2:0601,YHTKYREISDYRYVGTLYYRYDFYTWAAESYTWY SLA-2:0701,YSAMYRENVGSTDVSNLYLVYRFYSFAVESYLGY SLA-2:1001,YYIMYREISDNINVNTLYLRYDDYSRAEMSYRWY SLA-2:1002,YYIMYREISETNYVDTLYLRYRDYTWAVESYRWY SLA-2:1101,YYAEYRNIYETIYGNTAYFSYSFYTWAARSYLSY SLA-2:1201,YYAMYRENVGSTDVNTLYFWYSFYSWAVWSYLSY SLA-2:CDY.AA,YYAMYREIQDNTFVNTAYFSYSYYTWAEWSYLGY SLA-2:HB01,YYIMYREISETNYVDTLYIRYRDYTWVEESYRWY SLA-2:LWH.AA,YYTMYREKVETTYVGTLYISFHDYTWAAWSYLGY SLA-2:TPK.AA,YYTEYRNIYETIYVGNLYFSYSDYTRAAWSYTGY SLA-2:YC.AA,YYAMYEEKVGSTFVNTAYFWYSYYSWAVESYLSY SLA-2:YDL.AA,YYAMYRENVETTYVGTLYLSYRDYTWAERSYLSY SLA-2:YDY.AA,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-2:YTH.AA,YSSEYEEKAGSTFVGNLCLSYHDYSRAVWSYLSC SLA-2:es22,YYAMYREIQDNTFVNTAYFSYSYYTWAEWSYLGY SLA-3-CDY,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-3-HB01,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3-LWH,YYAMYREIQDTTYGNTLYLSYSDYTWAVESYLSY SLA-3-TPK,YDEMYREIGDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3-YC,YDEMYEENAGSTFVNTLYLSYSDYTKAAMSYAWY SLA-3-YDL,YDEMYREIGDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3-YDY01,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-3-YDY02,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-3-YTH,YDSMYEENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-30101,YDSMYEENAGSTFVNNLYFSYSFYTRAAMSYAWY SLA-30301,YDSMYEENAGSTFVNNLYLSYHDYAWAVWSYAWY SLA-30302,YDSMYRENSDNRYVNNLYIRYHDYSWAAWSYAGY SLA-30303,YDSMYEENAGSTFVNNLYLSYHDYAWAVWSYAWY SLA-30304,YDSMYEENAGSTFVNNLYLSYHDYAWAAWSYAWY SLA-30401,YDEMYKENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-30401,YDEMYKENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-30402,YDEMYEENAGSTFVNKLYLSYSDYTRDAMSYAWY SLA-304:01,YDEMYKENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-30501,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-30502,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-30503,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-30601,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-30602,YDSMYEENAGSTFVNNLYYWYSDYTRAAMSYAWY SLA-3:0101,YDSMYEENAGSTFVNNLYFSYSFYTRAAMSYAWY SLA-3:0301,YDSMYEENAGSTFVNNLYLSYHDYAWAVWSYAWY SLA-3:0302,YDSMYRENSDNRYVNNLYIRYHDYSWAAWSYAGY SLA-3:0303,YDSMYEENAGSTFVNNLYLSYHDYAWAVWSYAWY SLA-3:0304,YDSMYEENAGSTFVNNLYLSYHDYAWAAWSYAWY SLA-3:0401,YDEMYKENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-3:0402,YDEMYEENAGSTFVNKLYLSYSDYTRDAMSYAWY SLA-3:0501,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3:0502,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3:0503,YDEMYREISDNTYVNNLYLSYSFYTRAAMSYAGY SLA-3:0601,YDSMYEENAGSTFVNNLYLSYSDYTWAEMSYAWY SLA-3:0602,YDSMYEENAGSTFVNNLYYWYSDYTRAAMSYAWY SLA-3:0701,YDSMYEENAGSTFVNNLYLSYSDYTRAAMSYAWY SLA-6:0101,YHSVYRQIAEHASSNVINFWSEFYIWEVYAYEWY SLA-6:0102,YHSVYRQIAEHASSNVINFWSEFYIWEVYAYEWY SLA-6:0103,YHSVYRQIAEHASSNVINFWSEFYIWEVYAYEWY SLA-6:0104,YHSVYRQIAEHASSNVINFWSEFYIWEVYAYEWY SLA-6:0105,YHSVYRQIAEHASSNVINFWSEFYIWEVYAYEWY ================================================ FILE: downloads-generation/allele_sequences/filter_sequences.py ================================================ """ Filter and combine class I sequence fastas. """ from __future__ import print_function import sys import argparse import Bio.SeqIO # pylint: disable=import-error from mhcflurry.common import normalize_allele_name parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "fastas", nargs="+", help="Unaligned fastas") parser.add_argument( "--out", required=True, help="Fasta output") def run(): args = parser.parse_args(sys.argv[1:]) print(args) total = 0 order = [] name_to_record = {} for fasta in args.fastas: reader = Bio.SeqIO.parse(fasta, "fasta") for record in reader: total += 1 if len(record.seq) < 50: print("-- Skipping '%s', sequence too short" % ( record.description,)) continue parts = record.description.split() candidate_strings = [ record.description, parts[1], " ".join(parts[1:]) ] if record.description.startswith("sp|"): # From a description like: # sp|P01897|HA1L_MOUSE H-2 class I histocompatibility antigen, L-D alpha chain OS=Mus musculus OX=10090 GN=H2-L PE=1 SV=2 # make a string to parse like: # H-2-L-D candidate_strings.insert(0, parts[1] + "-" + parts[6]) name = None for candidate_string in candidate_strings: name = normalize_allele_name( candidate_string, raise_on_error=False) if name is not None: break if name is None: print("Skipping '%s'" % (record.description,)) continue if '*' not in name: raise ValueError("Normalization gave name without a '*' for '%s': %s" % ( record.description, name)) print("Parsed '%s' as %s" % (record.description, name)) record.description = name + " " + record.description if name in name_to_record: old_record = name_to_record[name] old_sequence = old_record.seq if len(old_sequence) < len(record.seq): print("-- Replacing old record (%d aa) with new (%d aa)" % ( len(old_record.seq), len(record.seq))) name_to_record[name] = record else: print("-- Skipping, already seen") else: order.append(name) name_to_record[name] = record records = [name_to_record[name] for name in order] with open(args.out, "w") as fd: Bio.SeqIO.write(records, fd, "fasta") print("Wrote %d / %d sequences: %s" % (len(records), total, args.out)) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/allele_sequences/make_allele_sequences.py ================================================ """ Generate allele sequences for pan-class I models. Additional dependency: biopython """ from __future__ import print_function import sys import argparse import numpy import pandas import Bio.SeqIO # pylint: disable=import-error from mhcflurry.common import normalize_allele_name parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "aligned_fasta", help="Aligned sequences") parser.add_argument( "--recapitulate-sequences", required=True, help="CSV giving sequences to recapitulate") parser.add_argument( "--differentiate-alleles", help="File listing alleles to differentiate using additional positions") parser.add_argument( "--out-csv", help="Result file") def normalize_allele_name_optional(s): return normalize_allele_name(s, raise_on_error=False) def run(): args = parser.parse_args(sys.argv[1:]) print(args) allele_to_sequence = {} reader = Bio.SeqIO.parse(args.aligned_fasta, "fasta") for record in reader: name = record.description.split()[1] print(record.name, record.description) allele_to_sequence[name] = str(record.seq) print("Read %d aligned sequences" % len(allele_to_sequence)) allele_sequences = pandas.Series(allele_to_sequence).to_frame() allele_sequences.columns = ['aligned'] allele_sequences['aligned'] = allele_sequences['aligned'].str.replace( "-", "X") allele_sequences['normalized_allele'] = allele_sequences.index.map( normalize_allele_name_optional) allele_sequences = allele_sequences.dropna().set_index("normalized_allele", drop=True) selected_positions = [] recapitulate_df = pandas.read_csv(args.recapitulate_sequences) recapitulate_df["normalized_allele"] = recapitulate_df.allele.map(normalize_allele_name_optional) recapitulate_df = ( recapitulate_df .dropna() .drop_duplicates("normalized_allele") .set_index("normalized_allele", drop=True)) allele_sequences["recapitulate_target"] = recapitulate_df.iloc[:,-1] print("Sequences in recapitulate CSV that are not in aligned fasta:") print(recapitulate_df.index[ ~recapitulate_df.index.isin(allele_sequences.index) ].tolist()) allele_sequences_with_target = allele_sequences.loc[ ~allele_sequences.recapitulate_target.isnull() ] position_identities = [] target_length = int( allele_sequences_with_target.recapitulate_target.str.len().max()) for i in range(target_length): series_i = allele_sequences_with_target.recapitulate_target.str.get(i) row = [] full_length_sequence_length = int( allele_sequences_with_target.aligned.str.len().max()) for k in range(full_length_sequence_length): series_k = allele_sequences_with_target.aligned.str.get(k) row.append((series_i == series_k).mean()) position_identities.append(row) position_identities = pandas.DataFrame(numpy.array(position_identities)) selected_positions = position_identities.idxmax(1).tolist() fractions = position_identities.max(1) print("Selected positions: ", *selected_positions) print("Lowest concordance fraction: %0.5f" % fractions.min()) assert fractions.min() > 0.99 allele_sequences["recapitulated"] = allele_sequences.aligned.map( lambda s: "".join(s[p] for p in selected_positions)) allele_sequences_with_target = allele_sequences.loc[ ~allele_sequences.recapitulate_target.isnull() ] agreement = ( allele_sequences_with_target.recapitulated == allele_sequences_with_target.recapitulate_target).mean() print("Overall agreement: %0.5f" % agreement) assert agreement > 0.9 # Add additional positions additional_positions = [] if args.differentiate_alleles: differentiate_alleles = pandas.read_csv( args.differentiate_alleles).iloc[:,0].values print( "Read %d alleles to differentiate:" % len(differentiate_alleles), differentiate_alleles) to_differentiate = allele_sequences.loc[ allele_sequences.index.isin(differentiate_alleles) ].copy() print(to_differentiate.shape) additional_positions = [] # Greedy search, looking ahead 3 positions at a time. possible_additional_positions = set() for (_, sub_df) in to_differentiate.groupby("recapitulated"): if sub_df.aligned.nunique() > 1: differing = pandas.DataFrame( dict([(pos, chars) for (pos, chars) in enumerate(zip(*sub_df.aligned.values)) if any(c != chars[0] for c in chars) and "X" not in chars])).T possible_additional_positions.update(differing.index.values) def disambiguation_score(sequences): counts = pandas.Series(sequences, copy=False).value_counts() score = -1 * (counts[counts > 1] - 1).sum() return score possible_additional_positions = sorted(possible_additional_positions) current_sequences = to_differentiate.recapitulated while current_sequences.value_counts().max() > 1: to_differentiate["equivalence_class_size"] = ( current_sequences.map(current_sequences.value_counts()) ) print("Ambiguous alleles", " ".join( to_differentiate.loc[ to_differentiate.equivalence_class_size > 1 ].index)) position1s = [] position2s = [] position3s = [] negative_position1_distances = [] possible_additional_positions_scores = [] position1_scores = [] for position1 in possible_additional_positions: new_sequence1 = ( current_sequences + to_differentiate.aligned.str.get(position1)) negative_position1_distance = -1 * min( abs(position1 - selected) for selected in selected_positions) position1_score = disambiguation_score(new_sequence1) for (i, position2) in enumerate(possible_additional_positions): new_sequence2 = ( new_sequence1 + to_differentiate.aligned.str.get(position2)) for position3 in possible_additional_positions: new_sequence3 = ( new_sequence2 + to_differentiate.aligned.str.get(position3)) score = disambiguation_score(new_sequence3) position1s.append(position1) position2s.append(position2) position3s.append(position3) possible_additional_positions_scores.append(score) negative_position1_distances.append( negative_position1_distance) position1_scores.append(position1_score) scores_df = pandas.DataFrame({ "position1": position1s, "position2": position2s, "position3": position3s, "negative_position1_distance": negative_position1_distances, "tuple_score": possible_additional_positions_scores, "position1_score": position1_scores, }).sort_values( ["tuple_score", "position1_score", "negative_position1_distance"], ascending=False) print(scores_df) selected_additional_position = scores_df.iloc[0].position1 print("Selected additional position", selected_additional_position) additional_positions.append(selected_additional_position) current_sequences = ( current_sequences + to_differentiate.aligned.str.get( selected_additional_position)) possible_additional_positions.remove(selected_additional_position) additional_positions = sorted(set(additional_positions)) print( "Selected %d additional positions: " % len(additional_positions), additional_positions) extended_selected_positions = sorted( set(selected_positions).union(set(additional_positions))) print( "Extended selected positions (%d)" % len(extended_selected_positions), *extended_selected_positions) allele_sequences["sequence"] = allele_sequences.aligned.map( lambda s: "".join(s[p] for p in extended_selected_positions)) allele_sequences[["sequence"]].to_csv(args.out_csv, index=True) print("Wrote: %s" % args.out_csv) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/allele_sequences/select_alleles_to_disambiguate.py ================================================ """ Select alleles to disambiguate """ from __future__ import print_function import sys import argparse import pandas parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "train_data", help="Path to training data CSV. Must have column: allele") parser.add_argument( "--min-count", type=int, metavar="N", help="Keep only alleles with at least N measurements") parser.add_argument( "--out", help="Result file.") def run(): args = parser.parse_args(sys.argv[1:]) print(args) df = pandas.read_csv(args.train_data) if args.min_count: allele_counts = df.allele.value_counts() df = df.loc[ df.allele.map(allele_counts) > args.min_count ] df.drop_duplicates("allele").allele.to_csv( args.out, header=False, index=False) print("Wrote: ", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/analysis_predictor_info/GENERATE.sh ================================================ #!/bin/bash # # # Usage: GENERATE.sh # # cluster mode uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # set -e set -x DOWNLOAD_NAME=analysis_predictor_info SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") if [ "$1" != "cluster" ] then GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" if [ "$GPUS" -eq "0" ]; then NUM_JOBS=${NUM_JOBS-1} else NUM_JOBS=${NUM_JOBS-$GPUS} fi echo "Num jobs: $NUM_JOBS" PARALLELISM_ARGS+=" --num-jobs $NUM_JOBS --max-tasks-per-worker 1 --gpus $GPUS --max-workers-per-gpu 1" else PARALLELISM_ARGS+=" --cluster-parallelism --cluster-max-retries 3 --cluster-submit-command bsub --cluster-results-workdir $HOME/mhcflurry-scratch --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.lsf" fi mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 ####### GENERATION OF BINDING MOTIFS AND OTHER ARTIFACTS ####### if [ "$2" == "continue-incomplete" ] && [ -f "motifs/artifacts.csv" ] then echo "Reusing existing artifacts" else echo "Using affinity predictor:" cat "$(mhcflurry-downloads path models_class1_pan)/models.combined/info.txt" mkdir motifs cp "$(mhcflurry-downloads path models_class1_pan)/models.combined/info.txt" motifs/ cp $SCRIPT_DIR/generate_artifacts.py . time python generate_artifacts.py \ --affinity-predictor "$(mhcflurry-downloads path models_class1_pan)/models.combined" \ --out "$(pwd)/motifs" \ $PARALLELISM_ARGS fi ####### EVALUATION ON MODEL SELECTION DATA ####### if [ "$2" == "continue-incomplete" ] && [ -f "model_selection_with_decoys.csv.bz2" ] then echo "Reusing existing model_selection_with_decoys data" else echo "Using affinity predictor:" cat "$(mhcflurry-downloads path models_class1_pan)/models.combined/info.txt" cp $SCRIPT_DIR/generate_model_selection_with_decoys.py . time python generate_model_selection_with_decoys.py \ "$(mhcflurry-downloads path models_class1_pan)/models.combined/model_selection_data.csv.bz2" \ --proteome-peptides "$(mhcflurry-downloads path data_references)/uniprot_proteins.csv.bz2" \ --out "$(pwd)/model_selection_with_decoys.csv" bzip2 -f model_selection_with_decoys.csv fi if [ "$2" == "continue-incomplete" ] && [ -f "model_selection_with_decoys.predictions.selected.csv.bz2" ] then echo "Reusing existing model_selection_with_decoys.predictions.selected.data" else echo "Using affinity predictor:" cat "$(mhcflurry-downloads path models_class1_pan)/models.combined/info.txt" cp $SCRIPT_DIR/predict_on_model_selection_data.py . time python predict_on_model_selection_data.py \ "$(mhcflurry-downloads path models_class1_pan)/models.combined" \ --data "$(pwd)/model_selection_with_decoys.csv.bz2" \ --out "$(pwd)/model_selection_with_decoys.predictions.selected.csv" \ $PARALLELISM_ARGS bzip2 -f model_selection_with_decoys.predictions.selected.csv fi if [ "$2" == "continue-incomplete" ] && [ -f "model_selection_with_decoys.predictions.unselected.csv.bz2" ] then echo "Reusing existing model_selection_with_decoys.predictions.unselected data" else echo "Using affinity predictor:" cat "$(mhcflurry-downloads path models_class1_pan_unselected)/models.unselected.combined/info.txt" cp $SCRIPT_DIR/predict_on_model_selection_data.py . time python predict_on_model_selection_data.py \ "$(mhcflurry-downloads path models_class1_pan_unselected)/models.unselected.combined" \ --data "$(pwd)/model_selection_with_decoys.csv.bz2" \ --out "$(pwd)/model_selection_with_decoys.predictions.unselected.csv" \ $PARALLELISM_ARGS bzip2 -f model_selection_with_decoys.predictions.unselected.csv fi cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000M "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* ================================================ FILE: downloads-generation/analysis_predictor_info/cluster_submit_script_header.mssm_hpc.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q gpu # queue #BSUB -R rusage[ngpus_excl_p=1] # 1 exclusive GPU #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 10:00 # walltime in HH:MM #BSUB -R rusage[mem=20000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/.conda/envs/py36b/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 free -m module add cuda/10.0.130 module list export CUDNN_HOME=/hpc/users/odonnt02/oss/cudnn/cuda export LD_LIBRARY_PATH=$CUDNN_HOME/lib64:$LD_LIBRARY_PATH export CMAKE_LIBRARY_PATH=$CUDNN_HOME/lib64:$CMAKE_LIBRARY_PATH export INCLUDE_PATH=$CUDNN_HOME/include:$INCLUDE_PATH export C_INCLUDE_PATH=$CUDNN_HOME/include:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=$CUDNN_HOME/include:$CPLUS_INCLUDE_PATH export CMAKE_INCLUDE_PATH=$CUDNN_HOME/include:$CMAKE_INCLUDE_PATH python -c 'import tensorflow as tf ; print("GPU AVAILABLE" if tf.test.is_gpu_available() else "GPU NOT AVAILABLE")' env cd {work_dir} ================================================ FILE: downloads-generation/analysis_predictor_info/generate_artifacts.py ================================================ """ Generate images for MHC binding motifs. Note: a shared filesystem is assumed even when running on an HPC cluster. The --out directory should be on an NFS filesystem and available to the workers. """ import sys import argparse import os import numpy import time import collections from functools import partial import pandas import tqdm tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 from mhcflurry.common import configure_logging from mhcflurry.downloads import get_path from mhcflurry.local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from mhcflurry.cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--affinity-predictor", metavar="DIR", help="Pan-allele class I affinity predictor") parser.add_argument( "--frequency-matrices", metavar="CSV", help="Frequency matrices") parser.add_argument( "--length-distributions", metavar="CSV", help="Length distributions") parser.add_argument( "--train-data", metavar="CSV", help="Training data") parser.add_argument( "--alleles", nargs="+", help="Alleles to process. If not specified all alleles are used") parser.add_argument( "--max-alleles", type=int, help="Max number of allelels to process. For debugging.") parser.add_argument( "--chunk-size", type=int, default=100, help="Number of alleles per job") parser.add_argument( "--logo-lengths", type=int, nargs="+", default=[8, 9, 10, 11], help="Peptide lengths for motif logos") parser.add_argument( "--length-distribution-lengths", nargs="+", default=[8, 9, 10, 11, 12, 13, 14, 15], type=int, help="Peptide lengths for length distribution plots", ) parser.add_argument( "--logo-cutoff", default=0.01, type=float, help="Fraction of top to use for motifs", ) parser.add_argument( "--length-cutoff", default=0.01, type=float, help="Fraction of top to use for length distribution", ) parser.add_argument( "--out", metavar="DIR", required=True, help="Directory to write results to") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def run(): from mhcflurry.amino_acid import COMMON_AMINO_ACIDS args = parser.parse_args(sys.argv[1:]) configure_logging() serial_run = not args.cluster_parallelism and args.num_jobs == 0 if not args.affinity_predictor: args.affinity_predictor = get_path( "models_class1_pan", "models.combined") print("Using downloaded affinity predictor: ", args.affinity_predictor) if not args.frequency_matrices: args.frequency_matrices = os.path.join( args.affinity_predictor, "frequency_matrices.csv.bz2") if not args.length_distributions: args.length_distributions = os.path.join(args.affinity_predictor, "length_distributions.csv.bz2") if not args.train_data: args.train_data = os.path.join(args.affinity_predictor, "train_data.csv.bz2") frequency_matrices_df = pandas.read_csv(args.frequency_matrices) length_distributions = pandas.read_csv(args.length_distributions) train_data = pandas.read_csv(args.train_data) alleles = args.alleles if alleles: print("Using specified alleles, ", *alleles) else: alleles = frequency_matrices_df.allele.unique() if args.max_alleles: alleles = alleles[:args.max_alleles] print("Using %d alleles" % len(alleles), alleles) amino_acids = sorted(COMMON_AMINO_ACIDS) distribution = frequency_matrices_df.loc[ (frequency_matrices_df.cutoff_fraction == 1.0), amino_acids ].mean(0) normalized_frequency_matrices = frequency_matrices_df.copy() normalized_frequency_matrices.loc[:, amino_acids] = ( normalized_frequency_matrices[amino_acids] / distribution) GLOBAL_DATA["args"] = args GLOBAL_DATA["normalized_frequency_matrices"] = normalized_frequency_matrices GLOBAL_DATA["length_distributions"] = length_distributions GLOBAL_DATA["train_data"] = train_data artifacts_out = os.path.join(args.out, "artifacts") if not os.path.exists(args.out): os.mkdir(args.out) if not os.path.exists(artifacts_out): os.mkdir(artifacts_out) tasks = [ { "task_num": i, "allele": allele, "out_dir": artifacts_out, } for (i, allele) in enumerate(alleles) ] jobs = [] for task in tasks: if not jobs or len(jobs[-1]['tasks']) >= args.chunk_size: jobs.append({'tasks': []}) jobs[-1]['tasks'].append(task) print("Generated %d tasks, packed into %d jobs" % (len(tasks), len(jobs))) worker_pool = None start = time.time() if serial_run: # Serial run print("Running in serial.") results = ( do_job(**job) for job in jobs) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=do_job, work_items=jobs, constant_data=GLOBAL_DATA, input_serialization_method="dill", result_serialization_method="pickle", clear_constant_data=False) else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None for task in tasks: task['constant_data'] = GLOBAL_DATA results = worker_pool.imap_unordered( partial(call_wrapped_kwargs, do_job), jobs, chunksize=1) print("Reading results") task_results = {} for job_result in tqdm.tqdm(results, total=len(jobs)): for task_result in job_result: task_results[task_result['task_num']] = task_result print("Received all results in %0.2f sec" % (time.time() - start)) artifacts_df = pandas.DataFrame(task_results).T.set_index("task_num") length_distributions_out = os.path.join(args.out, "length_distributions.csv") length_distributions.to_csv(length_distributions_out, index=False) print("Wrote: ", length_distributions_out) artifacts_summary_out = os.path.join(args.out, "artifacts.csv") artifacts_df.to_csv(artifacts_summary_out) print("Wrote: ", artifacts_summary_out) if worker_pool: worker_pool.close() worker_pool.join() def do_job(tasks, constant_data=GLOBAL_DATA): # Nested functions are so that the do_job function can be pickled for # running on an HPC cluster. GLOBAL_DATA = constant_data def do_task(task_num, allele, out_dir, constant_data=GLOBAL_DATA): args = constant_data['args'] normalized_frequency_matrices = constant_data[ 'normalized_frequency_matrices' ] length_distributions = constant_data[ 'length_distributions' ] train_data = constant_data[ 'train_data' ] logo_filename = write_logo( normalized_frequency_matrices, allele=allele, lengths=args.logo_lengths, cutoff=args.logo_cutoff, models_label="standard", out_dir=out_dir, ) length_distribution_filename = write_length_distribution( length_distributions, allele=allele, lengths=args.length_distribution_lengths, cutoff=args.length_cutoff, models_label="standard", out_dir=out_dir) (train_data_filename, num_train_points) = write_train_data( train_data, allele=allele, models_label="standard", out_dir=out_dir) return { 'task_num': task_num, 'allele': allele, 'logo_filename': logo_filename, 'length_distribution_filename': length_distribution_filename, 'train_data_filename': train_data_filename, 'num_train_points': num_train_points, } def write_logo( normalized_frequency_matrices, allele, lengths, cutoff, models_label, out_dir): import seaborn from matplotlib import pyplot import logomaker import os from mhcflurry.amino_acid import COMMON_AMINO_ACIDS amino_acids = sorted(COMMON_AMINO_ACIDS) fig = pyplot.figure(figsize=(8,10)) for (i, length) in enumerate(lengths): ax = pyplot.subplot(len(lengths), 1, i + 1) matrix = normalized_frequency_matrices.loc[ (normalized_frequency_matrices.allele == allele) & (normalized_frequency_matrices.length == length) & (normalized_frequency_matrices.cutoff_fraction == cutoff) ].set_index("position")[amino_acids] if matrix.shape[0] == 0: return None matrix = (matrix.T / matrix.sum(1)).T # row normalize ss_logo = logomaker.Logo( matrix, color_scheme="NajafabadiEtAl2017", font_name="Arial", width=.8, vpad=.05, fade_probabilities=True, stack_order='small_on_top', ax=ax, ) pyplot.title( "%s %d-mer" % (allele, length), y=0.85) pyplot.xticks(matrix.index.values) seaborn.despine() pyplot.tight_layout() name = "%s.motifs.%s.png" % ( allele.replace("*", "-").replace(":", "-"), models_label) filename = os.path.abspath(os.path.join(out_dir, name)) pyplot.savefig(filename) print("Wrote: ", filename) fig.clear() pyplot.close(fig) return name def write_length_distribution( length_distributions_df, allele, lengths, cutoff, models_label, out_dir): from matplotlib import pyplot import seaborn import os length_distribution = length_distributions_df.loc[ (length_distributions_df.allele == allele) & (length_distributions_df.cutoff_fraction == cutoff) ] if length_distribution.shape[0] == 0: return None length_distribution = length_distribution.set_index( "length").reindex(lengths).fillna(0.0).reset_index() length_distribution.plot( x="length", y="fraction", kind="bar", figsize=(5, 3)) fig = pyplot.gcf() pyplot.title("%s" % allele, fontsize=10) pyplot.xlabel("Peptide length", fontsize=10) pyplot.xticks(rotation=0) pyplot.ylim(ymin=0, ymax=1.0) pyplot.ylabel("Fraction of top %0.1f%%" % (cutoff * 100.0), fontsize=10) pyplot.gca().get_legend().remove() pyplot.tight_layout() seaborn.despine() name = "%s.lengths.%s.png" % ( allele.replace("*", "-").replace(":", "-"), models_label) filename = os.path.abspath(os.path.join(out_dir, name)) pyplot.savefig(filename) print("Wrote: ", filename) fig.clear() pyplot.close(fig) return name def write_train_data(train_data, allele, models_label, out_dir): import os sub_train = train_data.loc[ train_data.allele == allele ] name = None if sub_train.shape[0] > 0: name = "%s.train_data.%s.csv" % ( allele.replace("*", "-").replace(":", "-"), models_label) filename = os.path.abspath(os.path.join(out_dir, name)) sub_train.to_csv(filename, index=False) print("Wrote: ", filename) return (name, len(sub_train)) return [do_task(constant_data=constant_data, **task) for task in tasks] if __name__ == '__main__': run() ================================================ FILE: downloads-generation/analysis_predictor_info/generate_model_selection_with_decoys.py ================================================ """ From affinity predictor model selection data, add decoys so that AUCs can be calculated per-allele. """ import sys import argparse import os import numpy import math import collections import pandas import tqdm import mhcflurry from mhcflurry.downloads import get_path parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "data", metavar="CSV", help="Model selection data") parser.add_argument( "--proteome-peptides", metavar="CSV", required=True, help="Proteome peptides") parser.add_argument( "--protein-data", metavar="CSV", default=get_path("data_references", "uniprot_proteins.csv.bz2", test_exists=False), help="Proteome data. Default: %(default)s.") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") def run(): args = parser.parse_args(sys.argv[1:]) data_df = pandas.read_csv(args.data) print("Read", args.data, len(data_df)) print(data_df) fold_cols = [col for col in data_df.columns if col.startswith("fold_")] print("Fold cols", fold_cols) assert len(fold_cols) > 1 eval_df = data_df.loc[ data_df[fold_cols].sum(1) < len(fold_cols) ].copy() eval_df["binder"] = (eval_df.measurement_inequality != '>') & ( eval_df.measurement_value <= 500) print("Reduced to data held-out at least once: ", len(eval_df)) print("Binder rate per allele:") print(eval_df.groupby("allele").binder.mean()) decoy_universe = pandas.read_csv(args.protein_data, usecols=["seq"]) decoy_universe = pandas.Series(decoy_universe.seq.unique()) decoy_universe = decoy_universe.loc[ decoy_universe.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS)) & ( decoy_universe.str.len() >= 50) ] print("Read decoy universe from", args.protein_data) print(decoy_universe) def make_decoys(num, length): return decoy_universe.sample(num, replace=True).map( lambda s: s[numpy.random.randint(0, len(s) - length):][:length]).values lengths = [8,9,10,11] pieces = [] real_df = eval_df.loc[ eval_df.peptide.str.len().isin(lengths)].copy() real_df["synthetic"] = False pieces.append(real_df) for length in lengths: decoys_df = real_df.loc[real_df.binder].copy() decoys_df.binder = False decoys_df.measurement_value = numpy.nan decoys_df.synthetic = True decoys_df["peptide"] = make_decoys(len(decoys_df), length) pieces.append(decoys_df) result_df = pandas.concat(pieces, ignore_index=True) print("Final binder rate per allele:") print(result_df.groupby("allele").binder.mean()) result_df.to_csv(args.out, index=False) print("Wrote: ", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/analysis_predictor_info/predict_on_model_selection_data.py ================================================ """ Evaluate affinity predictor on its held-out model selection data, using only the individual models that were not trained on each particular data point. """ import sys import argparse import os import numpy import time import collections from functools import partial import pandas import tqdm tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 from mhcflurry.common import configure_logging from mhcflurry.local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from mhcflurry.cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "predictor", metavar="DIR", help="Class 1 affinity predictor to use") parser.add_argument( "--data", metavar="CSV", help="Model selection data. If not specified will guess based on affinity " "predictor path") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write with predictions") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def do_predict(predictor, key, sub_df, constant_data=None): import tqdm tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 prediction = predictor.predict(sub_df.peptide, sub_df.allele, throw=False) return { "key": key, "index": sub_df.index, "prediction": prediction, } def run(): import mhcflurry args = parser.parse_args(sys.argv[1:]) configure_logging() serial_run = not args.cluster_parallelism and args.num_jobs == 0 if not args.data: args.data = os.path.join(args.predictor, 'model_selection_data.csv.bz2') print("Defaulting data to: ", args.data) data_df = pandas.read_csv(args.data) print("Read %d rows:" % len(data_df)) print(data_df) fold_cols = [col for col in data_df.columns if col.startswith("fold_")] print("Fold cols", fold_cols) assert len(fold_cols) > 1 eval_df = data_df.loc[ data_df[fold_cols].sum(1) < len(fold_cols) ].copy() print("Reduced to data held-out at least once: ", len(eval_df)) predictor = mhcflurry.Class1AffinityPredictor.load( args.predictor, optimization_level=0) print("Loaded predictor", predictor) fold_to_ensemble = collections.defaultdict(list) for n in predictor.neural_networks: fold = n.fit_info[-1]['training_info']['fold_num'] fold_to_ensemble[fold].append(n) print("Constructed fold_to_ensemble", fold_to_ensemble) eval_df["ensemble_key"] = ( (~eval_df[fold_cols]).astype(str) + "_" ).sum(1).str.strip("_") print("Established ensemble keys:") print(eval_df.ensemble_key.value_counts()) def predictor_for_ensemble_key(key_string): indicators = [eval(s) for s in key_string.split("_")] ensemble = [] for fold, indicator in enumerate(indicators): if indicator: ensemble.extend(fold_to_ensemble[fold]) pred = mhcflurry.Class1AffinityPredictor( class1_pan_allele_models=ensemble, allele_to_sequence=predictor.allele_to_sequence) return pred tasks = [] for (key, sub_df) in eval_df.groupby("ensemble_key"): print(key) pred = predictor_for_ensemble_key(key) assert len(pred.neural_networks) > 0 eval_df.loc[ sub_df.index, "ensemble_size" ] = len(pred.neural_networks) tasks.append({ "key": key, "predictor": pred, "sub_df": sub_df[["peptide", "allele"]].copy() }) worker_pool = None start = time.time() if serial_run: # Serial run print("Running in serial.") results = ( do_predict(**task) for task in tasks) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=do_predict, work_items=tasks, constant_data=GLOBAL_DATA, input_serialization_method="dill", result_serialization_method="pickle", clear_constant_data=False) else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None results = worker_pool.imap_unordered( partial(call_wrapped_kwargs, do_predict), tasks, chunksize=1) print("Reading results") for worker_result in tqdm.tqdm(results, total=len(tasks)): print("Received worker result:", worker_result['key']) print(worker_result) eval_df.loc[ worker_result['index'], "prediction" ] = worker_result["prediction"] print("Received all results in %0.2f sec" % (time.time() - start)) eval_df.to_csv(args.out, index=False) print("Wrote: ", args.out) if worker_pool: worker_pool.close() worker_pool.join() if __name__ == '__main__': run() ================================================ FILE: downloads-generation/analysis_predictor_info/requirements.txt ================================================ logomaker seaborn ================================================ FILE: downloads-generation/data_curated/GENERATE.sh ================================================ #!/bin/bash # # Create "curated" training data, which combines an IEDB download with additional # published data, removes unusable entries, normalizes allele name, and performs # other filtering and standardization. # set -e set -x DOWNLOAD_NAME=data_curated SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/curate.py . cp $SCRIPT_DIR/curate_ms_by_pmid.py . MS_DIR="$(mhcflurry-downloads path data_published)/ms" cp -r "$MS_DIR" . EXPRESSION_DIR="$(mhcflurry-downloads path data_published)/expression" cp -r "$EXPRESSION_DIR" . CURATE_BY_PMID_ARGS="" for pmid in $(ls ms) do CURATE_BY_PMID_ARGS+=$(echo --ms-item $pmid ms/$pmid/* ' ') done for item in $(ls expression) do CURATE_BY_PMID_ARGS+=$(echo --expression-item $item expression/$item/* ' ') done time python curate_ms_by_pmid.py $CURATE_BY_PMID_ARGS \ --ms-out ms.by_pmid.csv \ --expression-out rna_expression.csv \ --expression-metadata-out rna_expression.metadata.csv bzip2 ms.by_pmid.csv bzip2 rna_expression.csv rm -rf ms time python curate.py \ --data-iedb \ "$(mhcflurry-downloads path data_iedb)/mhc_ligand_full.csv.bz2" \ --data-kim2014 \ "$(mhcflurry-downloads path data_published)/bdata.20130222.mhci.public.1.txt" \ --data-systemhc-atlas \ "$(mhcflurry-downloads path data_systemhcatlas)/data.csv.bz2" \ --data-additional-ms "$(pwd)/ms.by_pmid.csv.bz2" \ --out-csv curated_training_data.csv \ --out-affinity-csv curated_training_data.affinity.csv \ --out-mass-spec-csv curated_training_data.mass_spec.csv time python curate.py \ --data-iedb \ "$(mhcflurry-downloads path data_iedb)/mhc_ligand_full.csv.bz2" \ --data-kim2014 \ "$(mhcflurry-downloads path data_published)/bdata.20130222.mhci.public.1.txt" \ --data-systemhc-atlas \ "$(mhcflurry-downloads path data_systemhcatlas)/data.csv.bz2" \ --out-csv curated_training_data.no_additional_ms.csv for i in $(ls *.csv) do bzip2 $i done cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/data_curated/README.md ================================================ # Combined training data This download contains the data used to train the production class1 MHCflurry models. This data is derived from a recent [IEDB](http://www.iedb.org/home_v3.php) export as well as the data from [Kim 2014](http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-15-241), as well as a number of other sources. To generate this download run: ``` pip install -r requirements.txt # for the first time you generate this download ./GENERATE.sh ``` ================================================ FILE: downloads-generation/data_curated/curate.py ================================================ """ Filter and combine various peptide/MHC datasets to derive a composite training set, optionally including eluted peptides identified by mass-spec. """ import sys import os import argparse import pandas import numpy from mhcflurry.common import normalize_allele_name def normalize_allele_name_or_return_unknown(s): if s is numpy.nan: return "UNKNOWN" return normalize_allele_name( s, raise_on_error=False, default_value="UNKNOWN") parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data-kim2014", action="append", default=[], help="Path to Kim 2014-style affinity data") parser.add_argument( "--data-iedb", action="append", default=[], help="Path to IEDB-style affinity data (e.g. mhc_ligand_full.csv)") parser.add_argument( "--data-additional-ms", action="append", default=[], help="Path to additional monoallelic mass spec hits") parser.add_argument( "--data-systemhc-atlas", action="append", default=[], help="Path to systemhc-atlas-style mass-spec data") parser.add_argument( "--out-csv", required=True, help="Combined result file") parser.add_argument( "--out-affinity-csv", required=False, help="Result file") parser.add_argument( "--out-mass-spec-csv", required=False, help="Result file") # Note: the value assigned to "Positive" entries in the dict below is the # default that will be used for mass spec hits when training the predictor. # However, as of version 2.0.0 we are reassigning MS entries in the training # script for the pan-allele predictor (see # downloads-generation/models_class1_pan/GENERATE.sh where # reassign_mass_spec_training_data.py is called). So you should look there to # see what the current setting for this value is. QUALITATIVE_TO_AFFINITY_AND_INEQUALITY = { "Negative": (5000.0, ">"), "Positive": (100.0, "<"), # used for mass-spec hits but see note above "Positive-High": (100.0, "<"), "Positive-Intermediate": (1000.0, "<"), "Positive-Low": (5000.0, "<"), } QUALITATIVE_TO_AFFINITY = dict( (key, value[0]) for (key, value) in QUALITATIVE_TO_AFFINITY_AND_INEQUALITY.items()) QUALITATIVE_TO_INEQUALITY = dict( (key, value[1]) for (key, value) in QUALITATIVE_TO_AFFINITY_AND_INEQUALITY.items()) EXCLUDE_IEDB_ALLELES = [ "HLA class I", "HLA class II", ] def load_data_kim2014(filename): df = pandas.read_table(filename) print("Loaded kim2014 data: %s" % str(df.shape)) df["measurement_source"] = "kim2014" df["measurement_kind"] = "affinity" df["measurement_value"] = df.meas df["measurement_type"] = (df.inequality == "=").map({ True: "quantitative", False: "qualitative", }) df["measurement_inequality"] = df.inequality df["original_allele"] = df.mhc df["peptide"] = df.sequence df["allele"] = df.mhc.map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( df.loc[df.allele == "UNKNOWN"]["mhc"].unique())) df = df.loc[df.allele != "UNKNOWN"] print("Loaded kim2014 data: %s" % str(df.shape)) return df def load_data_systemhc_atlas(filename, min_probability=0.99): df = pandas.read_csv(filename) print("Loaded systemhc atlas data: %s" % str(df.shape)) df["measurement_kind"] = "mass_spec" df["measurement_source"] = "systemhc-atlas" df["measurement_value"] = QUALITATIVE_TO_AFFINITY["Positive"] df["measurement_inequality"] = "<" df["measurement_type"] = "qualitative" df["original_allele"] = df.top_allele df["peptide"] = df.search_hit df["allele"] = df.top_allele.map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( str(x) for x in df.loc[df.allele == "UNKNOWN"]["top_allele"].unique())) df = df.loc[df.allele != "UNKNOWN"] print("Systemhc atlas data now: %s" % str(df.shape)) print("Dropping data points with probability < %f" % min_probability) df = df.loc[df.prob >= min_probability] print("Systemhc atlas data now: %s" % str(df.shape)) print("Removing duplicates") df = df.drop_duplicates(["allele", "peptide"]) print("Systemhc atlas data now: %s" % str(df.shape)) return df def load_data_iedb(iedb_csv, include_qualitative=True): iedb_df = pandas.read_csv(iedb_csv, skiprows=1, low_memory=False) print("Loaded iedb data: %s" % str(iedb_df.shape)) print("Selecting only class I") iedb_df = iedb_df.loc[ # Old naming: # iedb_df["MHC allele class"].str.strip().str.upper() == "I" # New names IEDB has adopted: iedb_df["Class"].str.strip().str.upper() == "I" ] print("New shape: %s" % str(iedb_df.shape)) iedb_df["Allele Name"] = iedb_df["Name.6"] print("Dropping known unusable alleles") iedb_df = iedb_df.loc[ ~iedb_df["Allele Name"].isin(EXCLUDE_IEDB_ALLELES) ] iedb_df = iedb_df.loc[ (~iedb_df["Allele Name"].str.contains("mutant")) & (~iedb_df["Allele Name"].str.contains("CD1")) ] # Drop insufficiently specific allele names like "HLA-A03": insuffient_mask = ( (~iedb_df["Allele Name"].str.upper().str.startswith("H2-")) & (~iedb_df["Allele Name"].str.upper().str.startswith("H-2-")) & (~iedb_df["Allele Name"].str.upper().str.startswith("MAMU")) & (iedb_df["Allele Name"].str.findall("[0-9]").str.len() < 4) ) print("Dropping %d records with insufficiently-specific allele names:" % insuffient_mask.sum()) print(iedb_df.loc[insuffient_mask]["Allele Name"].value_counts()) iedb_df = iedb_df.loc[~insuffient_mask] iedb_df["allele"] = iedb_df["Allele Name"].map( normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( iedb_df.loc[iedb_df.allele == "UNKNOWN"]["Allele Name"].unique())) iedb_df = iedb_df.loc[iedb_df.allele != "UNKNOWN"] print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) quantitative = iedb_df.loc[iedb_df["Units"] == "nM"].copy() quantitative["measurement_kind"] = "affinity" quantitative["measurement_type"] = "quantitative" quantitative["measurement_inequality"] = quantitative[ "Measurement Inequality" ].fillna("=").map(lambda s: {">=": ">", "<=": "<"}.get(s, s)) print("Quantitative measurements: %d" % len(quantitative)) qualitative = iedb_df.loc[iedb_df["Units"].isnull()].copy() qualitative["measurement_type"] = "qualitative" qualitative["measurement_kind"] = qualitative[ "Method" ].str.contains("mass spec").map({ True: "mass_spec", False: "affinity", }) print("Qualitative measurements: %d" % len(qualitative)) qualitative["Quantitative measurement"] = ( qualitative["Qualitative Measurement"].map(QUALITATIVE_TO_AFFINITY)) qualitative["measurement_inequality"] = ( qualitative["Qualitative Measurement"].map(QUALITATIVE_TO_INEQUALITY)) print("Qualitative measurements (possibly after dropping MS): %d" % ( len(qualitative))) iedb_df = pandas.concat( ( ([quantitative]) + ([qualitative] if include_qualitative else [])), ignore_index=True) print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) print("Subselecting to valid peptides. Starting with: %d" % len(iedb_df)) iedb_df["Description"] = iedb_df.Name.str.strip() iedb_df = iedb_df.loc[ iedb_df.Description.str.match("^[ACDEFGHIKLMNPQRSTVWY]+$") ] print("Now: %d" % len(iedb_df)) print("Annotating last author and category") iedb_df["last_author"] = iedb_df.Authors.map( lambda x: ( x.split(";")[-1] .split(",")[-1] .split(" ")[-1] .strip() .replace("*", ""))).values iedb_df["category"] = ( iedb_df["last_author"] + " - " + iedb_df["Method"]).values train_data = pandas.DataFrame() train_data["peptide"] = iedb_df.Description.values train_data["measurement_value"] = iedb_df[ "Quantitative measurement" ].values train_data["measurement_source"] = iedb_df.category.values train_data["measurement_inequality"] = iedb_df.measurement_inequality.values train_data["allele"] = iedb_df["allele"].values train_data["original_allele"] = iedb_df["Allele Name"].values train_data["measurement_type"] = iedb_df["measurement_type"].values train_data["measurement_kind"] = iedb_df["measurement_kind"].values train_data = train_data.drop_duplicates().reset_index(drop=True) return train_data def load_data_additional_ms(filename): df = pandas.read_csv(filename) print("Loaded additional MS", filename, df.shape) print(df) print("Entries:", len(df)) print("Subselecting to monoallelic") df = df.loc[ df.format == "MONOALLELIC" ].copy() print("Now", len(df)) df["allele"] = df["hla"].map(normalize_allele_name_or_return_unknown) assert not (df.allele == "UNKNOWN").any(), ( list(df.loc[df.allele == "UNKNOWN"].hla.unique())) df["measurement_value"] = QUALITATIVE_TO_AFFINITY["Positive"] df["measurement_inequality"] = "<" df["measurement_type"] = "qualitative" df["measurement_kind"] = "mass_spec" df["measurement_source"] = "MS:pmid:" + df["original_pmid"].map(str) df["original_allele"] = "" return df def run(): args = parser.parse_args(sys.argv[1:]) dfs = [] for filename in args.data_iedb: df = load_data_iedb(filename) dfs.append(df) for filename in args.data_kim2014: df = load_data_kim2014(filename) df["allele_peptide"] = df.allele + "_" + df.peptide # Give precedence to IEDB data. if dfs: iedb_df = dfs[0] iedb_df["allele_peptide"] = iedb_df.allele + "_" + iedb_df.peptide print("Dropping kim2014 data present in IEDB.") df = df.loc[ ~df.allele_peptide.isin(iedb_df.allele_peptide) ] print("Kim2014 data now: %s" % str(df.shape)) dfs.append(df) for filename in args.data_systemhc_atlas: df = load_data_systemhc_atlas(filename) dfs.append(df) for filename in args.data_additional_ms: df = load_data_additional_ms(filename) dfs.append(df) df = pandas.concat(dfs, ignore_index=True) print("Combined df: %s" % (str(df.shape))) print("Removing combined duplicates") df = df.drop_duplicates( ["allele", "peptide", "measurement_value", "measurement_kind"]) print("New combined df: %s" % (str(df.shape))) df = df[[ "allele", "peptide", "measurement_value", "measurement_inequality", "measurement_type", "measurement_kind", "measurement_source", "original_allele", ]].sort_values(["allele", "peptide"]).dropna() print("Final combined df: %s" % (str(df.shape))) print("Measurement sources:") print(df.measurement_source.value_counts()) print("Measurement kind:") print(df.measurement_kind.value_counts()) print("Measurement source / kind:") print( df.groupby( ["measurement_source", "measurement_kind"] ).peptide.count().sort_values()) def write(write_df, filename): filename = os.path.abspath(filename) write_df.to_csv(filename, index=False) print("Wrote [%d lines]: %s" % (len(write_df), filename)) write(df, args.out_csv) if args.out_affinity_csv: write( df.loc[df.measurement_kind == "affinity"], args.out_affinity_csv) if args.out_mass_spec_csv: write( df.loc[df.measurement_kind == "mass_spec"], args.out_mass_spec_csv) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_curated/curate_ms_by_pmid.py ================================================ """ Filter and combine various peptide/MHC datasets to derive a composite training set, optionally including eluted peptides identified by mass-spec. """ import sys import argparse import os import json import collections from six.moves import StringIO import pandas from mhcflurry.common import normalize_allele_name def normalize_allele_name_or_return_unknown(s): return normalize_allele_name( s, raise_on_error=False, default_value="UNKNOWN") parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--ms-item", nargs="+", action="append", metavar="PMID FILE, ... FILE", default=[], help="Mass spec item to curate: PMID and list of files") parser.add_argument( "--expression-item", nargs="+", action="append", metavar="LABEL FILE, ... FILE", default=[], help="Expression data to curate: dataset label and list of files") parser.add_argument( "--ms-out", metavar="OUT.csv", help="Out file path (MS data)") parser.add_argument( "--expression-out", metavar="OUT.csv", help="Out file path (RNA-seq expression)") parser.add_argument( "--expression-metadata-out", metavar="OUT.csv", help="Out file path for expression metadata, i.e. which samples used") parser.add_argument( "--debug", action="store_true", default=False, help="Leave user in pdb if PMID is unsupported") PMID_HANDLERS = {} EXPRESSION_HANDLERS = {} def load(filenames, **kwargs): result = {} for filename in filenames: if filename.endswith(".csv"): result[filename] = pandas.read_csv(filename, **kwargs) elif filename.endswith(".xlsx") or filename.endswith(".xls"): result[filename] = pandas.read_excel(filename, **kwargs) else: result[filename] = filename return result def debug(*filenames): loaded = load(filenames) import ipdb ipdb.set_trace() def handle_pmid_27600516(filename): """Gloger, ..., Neri Cancer Immunol Immunother 2016 [PMID 27600516]""" df = pandas.read_csv(filename) sample_to_peptides = {} current_sample = None for peptide in df.peptide: if peptide.startswith("#"): current_sample = peptide[1:] sample_to_peptides[current_sample] = [] else: assert current_sample is not None sample_to_peptides[current_sample].append(peptide.strip().upper()) rows = [] for (sample, peptides) in sample_to_peptides.items(): for peptide in sorted(set(peptides)): rows.append([sample, peptide]) result_df = pandas.DataFrame(rows, columns=["sample_id", "peptide"]) result_df["sample_type"] = "melanoma_cell_line" result_df["cell_line"] = result_df.sample_id result_df["mhc_class"] = "I" result_df["pulldown_antibody"] = "W6/32" result_df["format"] = "multiallelic" result_df["hla"] = result_df.sample_id.map({ "FM-82": "HLA-A*02:01 HLA-A*01:01 HLA-B*08:01 HLA-B*15:01 HLA-C*03:04 HLA-C*07:01", "FM-93/2": "HLA-A*02:01 HLA-A*26:01 HLA-B*40:01 HLA-B*44:02 HLA-C*03:04 HLA-C*05:01", "Mel-624": "HLA-A*02:01 HLA-A*03:01 HLA-B*07:02 HLA-B*14:01 HLA-C*07:02 HLA-C*08:02", "MeWo": "HLA-A*02:01 HLA-A*26:01 HLA-B*14:02 HLA-B*38:01 HLA-C*08:02 HLA-C*12:03", "SK-Mel-5": "HLA-A*02:01 HLA-A*11:01 HLA-B*40:01 HLA-C*03:03", }) return result_df def handle_pmid_23481700(filename): """Hassan, ..., van Veelen Mol Cell Proteomics 2015 [PMID 23481700]""" df = pandas.read_excel(filename, skiprows=10) assert df["Peptide sequence"].iloc[0] == "TPSLVKSTSQL" assert df["Peptide sequence"].iloc[-1] == "LPHSVNSKL" hla = { "JY": "HLA-A*02:01 HLA-B*07:02 HLA-C*07:02", "HHC": "HLA-A*02:01 HLA-B*07:02 HLA-B*44:02 HLA-C*05:01 HLA-C*07:02", } results = [] for sample_id in ["JY", "HHC"]: hits_df = df.loc[ df["Int %s" % sample_id].map( lambda x: {"n.q.": 0, "n.q": 0}.get(x, x)).astype(float) > 0 ] result_df = pandas.DataFrame({ "peptide": hits_df["Peptide sequence"].dropna().values, }) result_df["sample_id"] = sample_id result_df["cell_line"] = "B-LCL-" + sample_id result_df["hla"] = hla[sample_id] result_df["sample_type"] = "B-LCL" result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" result_df["pulldown_antibody"] = "W6/32" results.append(result_df) result_df = pandas.concat(results, ignore_index=True) # Rename samples to avoid a collision with the JY sample in PMID 25576301. result_df.sample_id = result_df.sample_id.map({ "JY": "JY.2015", "HHC": "HHC.2015", }) return result_df def handle_pmid_24616531(filename): """Mommen, ..., Heck PNAS 2014 [PMID 24616531]""" df = pandas.read_excel(filename, sheet_name="EThcD") peptides = df.Sequence.values assert peptides[0] == "APFLRIAF" assert peptides[-1] == "WRQAGLSYIRYSQI" result_df = pandas.DataFrame({ "peptide": peptides, }) result_df["sample_id"] = "24616531" result_df["sample_type"] = "B-LCL" result_df["cell_line"] = "GR" result_df["pulldown_antibody"] = "W6/32" # Note: this publication lists hla as "HLA-A*01,-03, B*07,-27, and -C*02,-07" # we are guessing the exact 4 digit alleles based on this. result_df["hla"] = "HLA-A*01:01 HLA-A*03:01 HLA-B*07:02 HLA-B*27:05 HLA-C*02:02 HLA-C*07:01" result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" return result_df def handle_pmid_25576301(filename): """Bassani-Sternberg, ..., Mann Mol Cell Proteomics 2015 [PMID 25576301]""" df = pandas.read_excel(filename, sheet_name="Peptides") peptides = df.Sequence.values assert peptides[0] == "AAAAAAAQSVY" assert peptides[-1] == "YYYNGKAVY" column_to_sample = {} for s in [c for c in df if c.startswith("Intensity ")]: assert s[-2] == "-" column_to_sample[s] = s.replace("Intensity ", "")[:-2].strip() intensity_columns = list(column_to_sample) rows = [] for _, row in df.iterrows(): x1 = row[intensity_columns] x2 = x1[x1 > 0].index.map(column_to_sample).value_counts() x3 = x2[x2 >= 2] # require at least two replicates for each peptide for sample in x3.index: rows.append((row.Sequence, sample)) result_df = pandas.DataFrame(rows, columns=["peptide", "sample_id"]) result_df["pulldown_antibody"] = "W6/32" result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" allele_map = { 'Fib': "HLA-A*03:01 HLA-A*23:01 HLA-B*08:01 HLA-B*15:18 HLA-C*07:02 HLA-C*07:04", 'HCC1937': "HLA-A*23:01 HLA-A*24:02 HLA-B*07:02 HLA-B*40:01 HLA-C*03:04 HLA-C*07:02", 'SupB15WT': None, # four digit alleles unknown, will drop sample 'SupB15RT': None, 'HCT116': "HLA-A*01:01 HLA-A*02:01 HLA-B*45:01 HLA-B*18:01 HLA-C*05:01 HLA-C*07:01", # Homozygous at HLA-A: 'HCC1143': "HLA-A*31:01 HLA-A*31:01 HLA-B*35:08 HLA-B*37:01 HLA-C*04:01 HLA-C*06:02", # Homozygous everywhere: 'JY': "HLA-A*02:01 HLA-A*02:01 HLA-B*07:02 HLA-B*07:02 HLA-C*07:02 HLA-C*07:02", } sample_type = { 'Fib': "fibroblast", 'HCC1937': "basal like breast cancer", 'SupB15WT': None, 'SupB15RT': None, 'HCT116': "colon carcinoma", 'HCC1143': "basal like breast cancer", 'JY': "B-cell", } cell_line = { 'Fib': None, 'HCC1937': "HCC1937", 'SupB15WT': None, 'SupB15RT': None, 'HCT116': "HCT116", 'HCC1143': "HCC1143", 'JY': "JY", } result_df["hla"] = result_df.sample_id.map(allele_map) print("Entries before dropping samples with unknown alleles", len(result_df)) result_df = result_df.loc[~result_df.hla.isnull()] print("Entries after dropping samples with unknown alleles", len(result_df)) result_df["sample_type"] = result_df.sample_id.map(sample_type) result_df["cell_line"] = result_df.sample_id.map(cell_line) print(result_df.head(3)) return result_df def handle_pmid_26992070(*filenames): """Ritz, ..., Fugmann Proteomics 2016 [PMID 26992070]""" # Although this publication seems to suggest that HEK293 are C*07:02 # (figure 3B), in a subsequent publication [PMID 28834231] this group # gives the HEK293 HLA type as HLA‐A*03:01, HLA‐B*07:02, and HLA‐C*07:01. # We are therefore using the HLA‐C*07:01 (i.e. the latter) typing results # here. allele_text = """ Cell line HLA-A 1 HLA-A 2 HLA-B 1 HLA-B 2 HLA-C 1 HLA-C 2 HEK293 03:01 03:01 07:02 07:02 07:01 07:01 HL-60 01:01 01:01 57:01 57:01 06:02 06:02 RPMI8226 30:01 68:02 15:03 15:10 02:10 03:04 MAVER-1 24:02 26:01 38:01 44:02 05:01 12:03 THP-1 02:01 24:02 15:11 35:01 03:03 03:03 """ allele_info = pandas.read_csv( StringIO(allele_text), sep="\t", index_col=0) allele_info.index = allele_info.index.str.strip() for gene in ["A", "B", "C"]: for num in ["1", "2"]: allele_info[ "HLA-%s %s" % (gene, num) ] = "HLA-" + gene + "*" + allele_info["HLA-%s %s" % (gene, num)] cell_line_to_allele = allele_info.apply(" ".join, axis=1) sheets = {} for f in filenames: if f.endswith(".xlsx"): d = pandas.read_excel(f, sheet_name=None, skiprows=1) sheets.update(d) dfs = [] for cell_line in cell_line_to_allele.index: # Using data from DeepQuanTR, which appears to be a consensus between # two other methods used. sheet = sheets[cell_line + "_DeepQuanTR"] replicated = sheet.loc[ sheet[[c for c in sheet if "Sample" in c]].fillna(0).sum(1) > 1 ] df = pandas.DataFrame({ 'peptide': replicated.Sequence.values }) df["sample_id"] = cell_line df["hla"] = cell_line_to_allele.get(cell_line) dfs.append(df) result_df = pandas.concat(dfs, ignore_index=True) result_df["pulldown_antibody"] = "W6/32" result_df["cell_line"] = result_df["sample_id"] result_df["sample_type"] = result_df.sample_id.map({ "HEK293": "hek", "HL-60": "neutrophil", "RPMI8226": "b-cell", "MAVER-1": "b-LCL", "THP-1": "monocyte", }) result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" return result_df def handle_pmid_27412690(filename): """Shraibman, ..., Admon Mol Cell Proteomics 2016 [PMID 27412690]""" hla_types = { "U-87": "HLA-A*02:01 HLA-B*44:02 HLA-C*05:01", "T98G": "HLA-A*02:01 HLA-B*39:06 HLA-C*07:02", "LNT-229": "HLA-A*03:01 HLA-B*35:01 HLA-C*04:01", } sample_id_to_cell_line = { "U-87": "U-87", "T98G": "T98G", "LNT-229": "LNT-229", "U-87+DAC": "U-87", "T98G+DAC": "T98G", "LNT-229+DAC": "LNT-229", } df = pandas.read_excel(filename) assert df.Sequence.iloc[0] == "AAAAAAGSGTPR" intensity_col_to_sample_id = {} for col in df: if col.startswith("Intensity "): sample_id = col.split()[1] assert sample_id in sample_id_to_cell_line, (col, sample_id) intensity_col_to_sample_id[col] = sample_id dfs = [] for (sample_id, cell_line) in sample_id_to_cell_line.items(): intensity_cols = [ c for (c, v) in intensity_col_to_sample_id.items() if v == sample_id ] hits_df = df.loc[ (df[intensity_cols] > 0).sum(1) > 1 ] result_df = pandas.DataFrame({ "peptide": hits_df.Sequence.values, }) result_df["sample_id"] = sample_id result_df["cell_line"] = cell_line result_df["hla"] = hla_types[cell_line] dfs.append(result_df) result_df = pandas.concat(dfs, ignore_index=True) result_df["sample_type"] = "glioblastoma" result_df["pulldown_antibody"] = "W6/32" result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" return result_df def handle_pmid_28832583(*filenames): """Bassani-Sternberg, ..., Gfeller PLOS Comp. Bio. 2017 [PMID 28832583]""" # This work also reanalyzes data from # Pearson, ..., Perreault J Clin Invest 2016 [PMID 27841757] (filename_dataset1, filename_dataset2) = sorted(filenames) dataset1 = pandas.read_csv(filename_dataset1, sep="\t") dataset2 = pandas.read_csv(filename_dataset2, sep="\t") df = pandas.concat([dataset1, dataset2], ignore_index=True, sort=False) info_text = """ cell_line origin original_pmid allele1 allele2 allele3 allele4 allele5 allele6 CD165 B-cell 28832583 HLA-A*02:05 HLA-A*24:02 HLA-B*15:01 HLA-B*50:01 HLA-C*03:03 HLA-C*06:02 CM467 B-cell 28832583 HLA-A*01:01 HLA-A*24:02 HLA-B*13:02 HLA-B*39:06 HLA-C*06:02 HLA-C*12:03 GD149 B-cell 28832583 HLA-A*01:01 HLA-A*24:02 HLA-B*38:01 HLA-B*44:03 HLA-C*06:02 HLA-C*12:03 MD155 B-cell 28832583 HLA-A*02:01 HLA-A*24:02 HLA-B*15:01 HLA-B*18:01 HLA-C*03:03 HLA-C*07:01 PD42 B-cell 28832583 HLA-A*02:06 HLA-A*24:02 HLA-B*07:02 HLA-B*55:01 HLA-C*01:02 HLA-C*07:02 RA957 B-cell 28832583 HLA-A*02:20 HLA-A*68:01 HLA-B*35:03 HLA-B*39:01 HLA-C*04:01 HLA-C*07:02 TIL1 TIL 28832583 HLA-A*02:01 HLA-A*02:01 HLA-B*18:01 HLA-B*38:01 HLA-C*05:01 TIL3 TIL 28832583 HLA-A*01:01 HLA-A*23:01 HLA-B*07:02 HLA-B*15:01 HLA-C*12:03 HLA-C*14:02 Apher1 Leukapheresis 28832583 HLA-A*03:01 HLA-A*29:02 HLA-B*44:02 HLA-B*44:03 HLA-C*12:03 HLA-C*16:01 Apher6 Leukapheresis 28832583 HLA-A*02:01 HLA-A*03:01 HLA-B*07:02 HLA-C*07:02 pat_AC2 B-LCL 27841757 HLA-A*03:01 HLA-A*32:01 HLA-B*27:05 HLA-B*45:01 pat_C B-LCL 27841757 HLA-A*02:01 HLA-A*03:01 HLA-B*07:02 HLA-C*07:02 pat_CELG B-LCL 27841757 HLA-A*02:01 HLA-A*24:02 HLA-B*15:01 HLA-B*73:01 HLA-C*03:03 HLA-C*15:05 pat_CP2 B-LCL 27841757 HLA-A*11:01 HLA-B*14:02 HLA-B*44:02 pat_FL B-LCL 27841757 HLA-A*03:01 HLA-A*11:01 HLA-B*44:03 HLA-B*50:01 pat_J B-LCL 27841757 HLA-A*02:01 HLA-A*03:01 HLA-B*07:02 HLA-C*07:02 pat_JPB3 B-LCL 27841757 HLA-A*02:01 HLA-A*11:01 HLA-B*27:05 HLA-B*56:01 pat_JT2 B-LCL 27841757 HLA-A*11:01 HLA-B*18:03 HLA-B*35:01 pat_M B-LCL 27841757 HLA-A*03:01 HLA-A*29:02 HLA-B*08:01 HLA-B*44:03 HLA-C*07:01 HLA-C*16:01 pat_MA B-LCL 27841757 HLA-A*02:01 HLA-A*29:02 HLA-B*44:03 HLA-B*57:01 HLA-C*07:01 HLA-C*16:01 pat_ML B-LCL 27841757 HLA-A*02:01 HLA-A*11:01 HLA-B*40:01 HLA-B*44:03 pat_NS2 B-LCL 27841757 HLA-A*02:01 HLA-B*13:02 HLA-B*41:01 pat_NT B-LCL 27841757 HLA-A*01:01 HLA-A*32:01 HLA-B*08:01 pat_PF1 B-LCL 27841757 HLA-A*01:01 HLA-A*02:01 HLA-B*07:02 HLA-B*44:03 HLA-C*07:02 HLA-C*16:01 pat_R B-LCL 27841757 HLA-A*03:01 HLA-A*29:02 HLA-B*08:01 HLA-B*44:03 HLA-C*07:01 HLA-C*16:01 pat_RT B-LCL 27841757 HLA-A*01:01 HLA-A*02:01 HLA-B*18:01 HLA-B*39:24 HLA-C*05:01 HLA-C*07:01 pat_SR B-LCL 27841757 HLA-A*02:01 HLA-A*23:01 HLA-B*18:01 HLA-B*44:03 pat_ST B-LCL 27841757 HLA-A*03:01 HLA-A*24:02 HLA-B*07:02 HLA-B*27:05 """ info_df = pandas.read_csv(StringIO(info_text), sep="\t", index_col=0) info_df.index = info_df.index.str.strip() info_df["hla"] = info_df[ [c for c in info_df if c.startswith("allele")] ].fillna("").apply(" ".join, axis=1) results = [] for col in df.columns: if col.startswith("Intensity "): sample_id = col.replace("Intensity ", "") assert sample_id in info_df.index, sample_id peptides = df.loc[df[col].fillna(0) > 0].Sequence.unique() result_df = pandas.DataFrame({"peptide": peptides}) result_df["sample_id"] = sample_id result_df["hla"] = info_df.loc[sample_id].hla result_df["sample_type"] = info_df.loc[sample_id].origin result_df["original_pmid"] = str( info_df.loc[sample_id].original_pmid) results.append(result_df) result_df = pandas.concat(results, ignore_index=True) samples = result_df.sample_id.unique() for sample_id in info_df.index: assert sample_id in samples, (sample_id, samples) result_df["mhc_class"] = "I" result_df["format"] = "multiallelic" result_df["cell_line"] = "" result_df["pulldown_antibody"] = "W6/32" return result_df PMID_31495665_SAMPLE_TYPES = { "HLA-DR_Lung": "lung", "HLA-DR_PBMC_HDSC": "pbmc", "HLA-DR_PBMC_RG1095": "pbmc", "HLA-DR_PBMC_RG1104": "pbmc", "HLA-DR_PBMC_RG1248": "pbmc", "HLA-DR_Spleen": "spleen", "MAPTAC_A*02:01": "mix:a375,expi293,hek293,hela", "MAPTAC_A*11:01": "mix:expi293,hela", "MAPTAC_A*32:01": "mix:a375,expi293,hela", "MAPTAC_B*07:02": "mix:a375,expi293,hela", "MAPTAC_B*45:01": "expi293", "MAPTAC_B*52:01": "mix:a375,expi293", "MAPTAC_C*03:03": "expi293", "MAPTAC_C*06:02": "mix:a375,expi293", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "expi293", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "expi293", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "expi293", "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "expi293", "MAPTAC_DRB1*01:01": "mix:a375,b721,expi293,kg1,k562", "MAPTAC_DRB1*03:01": "expi293", "MAPTAC_DRB1*04:01": "expi293", "MAPTAC_DRB1*07:01": "mix:expi293,hek293", "MAPTAC_DRB1*11:01": "mix:expi293,k562,kg1", "MAPTAC_DRB1*12:01_dm+": "expi293", "MAPTAC_DRB1*12:01_dm-": "expi293", "MAPTAC_DRB1*15:01": "expi293", "MAPTAC_DRB3*01:01_dm+": "expi293", "MAPTAC_DRB3*01:01_dm-": "expi293", } CELL_LINE_MIXTURES = sorted( set( x for x in PMID_31495665_SAMPLE_TYPES.values() if x.startswith("mix:"))) def handle_pmid_31495665(filename): """Abelin, ..., Rooney Immunity 2019 [PMID 31495665]""" hla_type = { "HLA-DR_A375": None, "HLA-DR_Lung": "DRB1*01:01 DRB1*03:01 DRB3*01:01", "HLA-DR_PBMC_HDSC": "DRB1*03:01 DRB1*11:01 DRB3*01:01 DRB3*02:02", "HLA-DR_PBMC_RG1095": "HLA-DRA1*01:01-DRB1*03:01 HLA-DRA1*01:01-DRB1*11:01 HLA-DRA1*01:01-DRB3*01:01 HLA-DRA1*01:01-DRB3*02:02", "HLA-DR_PBMC_RG1104": "DRB1*01:01 DRB1*11:01 DRB3*02:02", "HLA-DR_PBMC_RG1248": "DRB1*03:01 DRB1*03:01 DRB3*01:01 DRB3*01:01", "HLA-DR_SILAC_Donor1_10minLysate": None, "HLA-DR_SILAC_Donor1_5hrLysate": None, "HLA-DR_SILAC_Donor1_DConly": None, "HLA-DR_SILAC_Donor1_UVovernight": None, "HLA-DR_SILAC_Donor2_DC_UV_16hr": None, "HLA-DR_SILAC_Donor2_DC_UV_24hr": None, "HLA-DR_Spleen": "DRB1*04:01 DRB4*01:03 DRB1*15:03 DRB5*01:01", "MAPTAC_A*02:01": "HLA-A*02:01", "MAPTAC_A*11:01": "HLA-A*11:01", "MAPTAC_A*32:01": "HLA-A*32:01", "MAPTAC_B*07:02": "HLA-B*07:02", "MAPTAC_B*45:01": "HLA-B*45:01", "MAPTAC_B*52:01": "HLA-B*52:01", "MAPTAC_C*03:03": "HLA-C*03:03", "MAPTAC_C*06:02": "HLA-C*06:02", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "HLA-DPB1*06:01-DPA1*01:03", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "HLA-DPB1*06:01-DPA1*01:03", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "HLA-DQB1*06:04-DQA1*01:02", "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "HLA-DQB1*06:04-DQA1*01:02", "MAPTAC_DRB1*01:01": "HLA-DRA1*01:01-DRB1*01:01", "MAPTAC_DRB1*03:01": "HLA-DRA1*01:01-DRB1*03:01", "MAPTAC_DRB1*04:01": "HLA-DRA1*01:01-DRB1*04:01", "MAPTAC_DRB1*07:01": "HLA-DRA1*01:01-DRB1*07:01", "MAPTAC_DRB1*11:01": "HLA-DRA1*01:01-DRB1*11:01", "MAPTAC_DRB1*12:01_dm+": "HLA-DRA1*01:01-DRB1*12:01", "MAPTAC_DRB1*12:01_dm-": "HLA-DRA1*01:01-DRB1*12:01", "MAPTAC_DRB1*15:01": "HLA-DRA1*01:01-DRB1*15:01", "MAPTAC_DRB3*01:01_dm+": "HLA-DRA1*01:01-DRB3*01:01", "MAPTAC_DRB3*01:01_dm-": "HLA-DRA1*01:01-DRB3*01:01", } pulldown_antibody = { "HLA-DR_Lung": "L243 (HLA-DR)", "HLA-DR_PBMC_HDSC": "tal1b5 (HLA-DR)", "HLA-DR_PBMC_RG1095": "tal1b5 (HLA-DR)", "HLA-DR_PBMC_RG1104": "tal1b5 (HLA-DR)", "HLA-DR_PBMC_RG1248": "tal1b5 (HLA-DR)", "HLA-DR_Spleen": "L243 (HLA-DR)", "MAPTAC_A*02:01": "MAPTAC", "MAPTAC_A*11:01": "MAPTAC", "MAPTAC_A*32:01": "MAPTAC", "MAPTAC_B*07:02": "MAPTAC", "MAPTAC_B*45:01": "MAPTAC", "MAPTAC_B*52:01": "MAPTAC", "MAPTAC_C*03:03": "MAPTAC", "MAPTAC_C*06:02": "MAPTAC", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "MAPTAC", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "MAPTAC", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "MAPTAC", "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "MAPTAC", "MAPTAC_DRB1*01:01": "MAPTAC", "MAPTAC_DRB1*03:01": "MAPTAC", "MAPTAC_DRB1*04:01": "MAPTAC", "MAPTAC_DRB1*07:01": "MAPTAC", "MAPTAC_DRB1*11:01": "MAPTAC", "MAPTAC_DRB1*12:01_dm+": "MAPTAC", "MAPTAC_DRB1*12:01_dm-": "MAPTAC", "MAPTAC_DRB1*15:01": "MAPTAC", "MAPTAC_DRB3*01:01_dm+": "MAPTAC", "MAPTAC_DRB3*01:01_dm-": "MAPTAC", } format = { "HLA-DR_Lung": "DR-specific", "HLA-DR_PBMC_HDSC": "DR-specific", "HLA-DR_PBMC_RG1095": "DR-specific", "HLA-DR_PBMC_RG1104": "DR-specific", "HLA-DR_PBMC_RG1248": "DR-specific", "HLA-DR_Spleen": "DR-specific", "MAPTAC_A*02:01": "monoallelic", "MAPTAC_A*11:01": "monoallelic", "MAPTAC_A*32:01": "monoallelic", "MAPTAC_B*07:02": "monoallelic", "MAPTAC_B*45:01": "monoallelic", "MAPTAC_B*52:01": "monoallelic", "MAPTAC_C*03:03": "monoallelic", "MAPTAC_C*06:02": "monoallelic", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "monoallelic", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "monoallelic", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "monoallelic", "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "monoallelic", "MAPTAC_DRB1*01:01": "monoallelic", "MAPTAC_DRB1*03:01": "monoallelic", "MAPTAC_DRB1*04:01": "monoallelic", "MAPTAC_DRB1*07:01": "monoallelic", "MAPTAC_DRB1*11:01": "monoallelic", "MAPTAC_DRB1*12:01_dm+": "monoallelic", "MAPTAC_DRB1*12:01_dm-": "monoallelic", "MAPTAC_DRB1*15:01": "monoallelic", "MAPTAC_DRB3*01:01_dm+": "monoallelic", "MAPTAC_DRB3*01:01_dm-": "monoallelic", } mhc_class = { "HLA-DR_Lung": "II", "HLA-DR_PBMC_HDSC": "II", "HLA-DR_PBMC_RG1095": "II", "HLA-DR_PBMC_RG1104": "II", "HLA-DR_PBMC_RG1248": "II", "HLA-DR_Spleen": "II", "MAPTAC_A*02:01": "I", "MAPTAC_A*11:01": "I", "MAPTAC_A*32:01": "I", "MAPTAC_B*07:02": "I", "MAPTAC_B*45:01": "I", "MAPTAC_B*52:01": "I", "MAPTAC_C*03:03": "I", "MAPTAC_C*06:02": "I", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "II", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "II", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "II", "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "II", "MAPTAC_DRB1*01:01": "II", "MAPTAC_DRB1*03:01": "II", "MAPTAC_DRB1*04:01": "II", "MAPTAC_DRB1*07:01": "II", "MAPTAC_DRB1*11:01": "II", "MAPTAC_DRB1*12:01_dm+": "II", "MAPTAC_DRB1*12:01_dm-": "II", "MAPTAC_DRB1*15:01": "II", "MAPTAC_DRB3*01:01_dm+": "II", "MAPTAC_DRB3*01:01_dm-": "II", } cell_line = { "HLA-DR_Lung": "", "HLA-DR_PBMC_HDSC": "", "HLA-DR_PBMC_RG1095": "", "HLA-DR_PBMC_RG1104": "", "HLA-DR_PBMC_RG1248": "", "HLA-DR_Spleen": "", "MAPTAC_A*02:01": "", "MAPTAC_A*11:01": "", "MAPTAC_A*32:01": "", "MAPTAC_B*07:02": "", "MAPTAC_B*45:01": "expi293", "MAPTAC_B*52:01": "", "MAPTAC_C*03:03": "expi293", "MAPTAC_C*06:02": "", "MAPTAC_DPB1*06:01/DPA1*01:03_dm+": "expi293", "MAPTAC_DPB1*06:01/DPA1*01:03_dm-": "expi293", "MAPTAC_DQB1*06:04/DQA1*01:02_dm+": "expi293", # don't actually see this in DataS1A! "MAPTAC_DQB1*06:04/DQA1*01:02_dm-": "expi293", "MAPTAC_DRB1*01:01": "", "MAPTAC_DRB1*03:01": "expi293", "MAPTAC_DRB1*04:01": "expi293", "MAPTAC_DRB1*07:01": "", "MAPTAC_DRB1*11:01": "", "MAPTAC_DRB1*12:01_dm+": "expi293", "MAPTAC_DRB1*12:01_dm-": "expi293", "MAPTAC_DRB1*15:01": "expi293", "MAPTAC_DRB3*01:01_dm+": "expi293", "MAPTAC_DRB3*01:01_dm-": "expi293", } df = pandas.read_excel(filename, sheet_name="DataS1B") results = [] for sample_id in df.columns: if hla_type[sample_id] is None: print("Intentionally skipping", sample_id) continue result_df = pandas.DataFrame({ "peptide": df[sample_id].dropna().values, }) result_df["sample_id"] = sample_id result_df["hla"] = hla_type[sample_id] result_df["pulldown_antibody"] = pulldown_antibody[sample_id] result_df["format"] = format[sample_id] result_df["mhc_class"] = mhc_class[sample_id] result_df["sample_type"] = PMID_31495665_SAMPLE_TYPES[sample_id] result_df["cell_line"] = cell_line[sample_id] results.append(result_df) result_df = pandas.concat(results, ignore_index=True) # Remove class II for now result_df = result_df.loc[result_df.mhc_class == "I"] return result_df def handle_pmid_27869121(filename): """Bassani-Sternberg, ..., Krackhardt Nature Comm. 2016 [PMID 27869121]""" # Although this dataset has class II data also, we are only extracting # class I for now. df = pandas.read_excel(filename, skiprows=1) # Taking these from: # Supplementary Table 2: Information of patients selected for neoepitope # identification # For the Mel5 sample, only two-digit alleles are shown (A*01, A*25, # B*08, B*18) so we are skipping that sample for now. hla_df = pandas.DataFrame([ ("Mel-8", "HLA-A*01:01 HLA-A*03:01 HLA-B*07:02 HLA-B*08:01 HLA-C*07:01 HLA-C*07:02"), ("Mel-12", "HLA-A*01:01 HLA-B*08:01 HLA-C*07:01"), ("Mel-15", "HLA-A*03:01 HLA-A*68:01 HLA-B*27:05 HLA-B*35:03 HLA-C*02:02 HLA-C*04:01"), ("Mel-16", "HLA-A*01:01 HLA-A*24:02 HLA-B*07:02 HLA-B*08:01 HLA-C*07:01 HLA-C*07:02"), ], columns=["sample_id", "hla"]).set_index("sample_id") # We assert below that none of the class I hit peptides were found in any # of the class II pull downs. class_ii_cols = [ c for c in df.columns if c.endswith("HLA-II (arbitrary units)") ] class_ii_hits = set(df.loc[ (df[class_ii_cols].fillna(0.0).sum(1) > 0) ].Sequence.unique()) results = [] for (sample_id, hla) in hla_df.hla.items(): intensity_col = "Intensity %s_HLA-I (arbitrary units)" % sample_id sub_df = df.loc[ (df[intensity_col].fillna(0.0) > 0) ] filtered_sub_df = sub_df.loc[ (~sub_df.Sequence.isin(class_ii_hits)) ] peptides = filtered_sub_df.Sequence.unique() assert not any(p in class_ii_hits for p in peptides) result_df = pandas.DataFrame({ "peptide": peptides, }) result_df["sample_id"] = sample_id result_df["hla"] = hla_df.loc[sample_id, "hla"] result_df["pulldown_antibody"] = "W6/32" result_df["format"] = "multiallelic" result_df["mhc_class"] = "I" result_df["sample_type"] = "melanoma_met" result_df["cell_line"] = None results.append(result_df) result_df = pandas.concat(results, ignore_index=True) return result_df def handle_pmid_31154438(*filenames): """Shraibman, ..., Admon Mol Cell Proteomics 2019 [PMID 31154438]""" # Note: this publication also includes analyses of the secreted HLA # peptidedome (sHLA) but we are using only the data from membrane-bound # HLA. (xls, txt) = sorted(filenames, key=lambda s: not s.endswith(".xlsx")) info = pandas.read_excel(xls, skiprows=1) df = pandas.read_csv(txt, sep="\t", skiprows=1) hla_df = info.loc[ ~info["mHLA tissue sample"].isnull() ].set_index("mHLA tissue sample")[["HLA typing"]] def fix_hla(string): result = [] alleles = string.split(";") for a in alleles: a = a.strip() if "/" in a: (a1, a2) = a.split("/") a2 = a1[:2] + a2 lst = [a1, a2] else: lst = [a] for a in lst: normalized = normalize_allele_name_or_return_unknown(a) result.append(normalized) return " ".join(result) hla_df["hla"] = hla_df["HLA typing"].map(fix_hla) results = [] for (sample_id, hla) in hla_df.hla.items(): intensity_col = "Intensity %s" % sample_id sub_df = df.loc[ (df[intensity_col].fillna(0.0) > 0) ] peptides = sub_df.Sequence.unique() result_df = pandas.DataFrame({ "peptide": peptides, }) result_df["sample_id"] = sample_id result_df["hla"] = hla_df.loc[sample_id, "hla"] result_df["pulldown_antibody"] = "W6/32" result_df["format"] = "multiallelic" result_df["mhc_class"] = "I" result_df["sample_type"] = "glioblastoma_tissue" result_df["cell_line"] = None results.append(result_df) result_df = pandas.concat(results, ignore_index=True) return result_df def handle_pmid_31844290(*filenames): """Sarkizova, ..., Keskin Nature Biotechnology 2019 [PMID 31844290]""" (mono_filename, multi_filename) = sorted(filenames) # Monoallelic mono = pandas.read_excel(mono_filename, sheet_name=None) dfs = [] for (key, value) in mono.items(): if key == 'Sheet1': continue allele_before_normalization = key if not allele_before_normalization.startswith("HLA-"): allele_before_normalization = "HLA-" + allele_before_normalization allele = normalize_allele_name(allele_before_normalization) assert allele != "UNKNOWN" df = pandas.DataFrame({"peptide": value.sequence.values}) df["sample_id"] = "keskin_%s" % key df["hla"] = allele df["pulldown_antibody"] = "W6/32" df["format"] = "monoallelic" df["mhc_class"] = "I" df["sample_type"] = "B-CELL" df["cell_line"] = "b721" dfs.append(df) # Multiallelic multi = pandas.read_excel(multi_filename, sheet_name=None) metadata = multi['Tissue Sample Characteristics'] allele_table = metadata.drop_duplicates( "Clinical ID").set_index("Clinical ID").loc[ :, [c for c in metadata if c.startswith("HLA-")] ] allele_table = allele_table.loc[~allele_table.index.isnull()] allele_table = allele_table.loc[allele_table["HLA-A"] != 'n.d.'] allele_table = allele_table.applymap( lambda s: s[1:] if s.startswith("-") else s) allele_table = allele_table.applymap( lambda s: "B5101" if s == "B51" else s) allele_table = allele_table.applymap(normalize_allele_name_or_return_unknown) sample_info = metadata.drop_duplicates( "Clinical ID").set_index("Clinical ID")[['Cancer type', 'IP Ab']] sample_info = sample_info.loc[~sample_info.index.isnull()].fillna( method='ffill') sample_info = sample_info.loc[sample_info.index.isin(allele_table.index)] sample_info = sample_info.loc[allele_table.index] sample_info["hla"] = [ " ".join(row).replace("HLA-A*31:0102", "HLA-A*31:01") # fix a typo for _, row in allele_table.iterrows() ] sample_info["sample_type"] = sample_info['Cancer type'].map({ 'CLL': "B-CELL", 'GBM': "GLIOBLASTOMA_TISSUE", 'Melanoma': "MELANOMA", "Ovarian": "OVARY", 'ccRCC': "KIDNEY", }) assert not sample_info["sample_type"].isnull().any() assert not sample_info["hla"].str.contains("UNKNOWN").any() for (key, value) in multi.items(): if key == 'Tissue Sample Characteristics': continue for (directory, sub_df) in value.groupby("directory"): if 'Pat7' in directory or 'Pat9' in directory: print("Skipping due to no HLA typing", directory) continue try: (sample_id,) = sample_info.loc[ sample_info.index.map( lambda idx: ( idx in directory or idx.replace("-", "_").replace("MEL_", "") in directory or idx.replace(" ", "_") in directory )) ].index except ValueError as e: print(directory, e) import ipdb ; ipdb.set_trace() info = sample_info.loc[sample_id] df = pandas.DataFrame({"peptide": sub_df.sequence.values}) df["sample_id"] = "keskin_%s" % sample_id.replace(" ", "_") df["hla"] = info['hla'] df["pulldown_antibody"] = info['IP Ab'] df["format"] = "multiallelic" df["mhc_class"] = "I" df["sample_type"] = info['sample_type'] df["cell_line"] = None dfs.append(df) result_df = pandas.concat(dfs, ignore_index=True) result_df["peptide"] = result_df.peptide.str.upper() return result_df EXPRESSION_GROUPS_ROWS = [] def make_expression_groups(dataset_identifier, df, groups): result_df = pandas.DataFrame(index=df.index) for (label, columns) in groups.items(): for col in columns: if col not in df.columns: raise ValueError( "Missing: %s. Available: %s" % (col, df.columns.tolist())) result_df[label] = df[columns].mean(1) EXPRESSION_GROUPS_ROWS.append((dataset_identifier, label, columns)) return result_df def handle_expression_GSE113126(*filenames): """ Barry, ..., Krummel Nature Medicine 2018 [PMID 29942093] This is the melanoma met RNA-seq dataset. """ df = pandas.read_csv(filenames[0], sep="\t", index_col=0) df = df[[]] # no columns for filename in filenames: df[os.path.basename(filename)] = pandas.read_csv( filename, sep="\t", index_col=0)["TPM"] assert len(df.columns) == len(filenames) groups = { "sample_type:MELANOMA_MET": df.columns.tolist(), } return [make_expression_groups("GSE113126", df, groups)] def handle_expression_expression_atlas_22460905(filename): df = pandas.read_csv(filename, sep="\t", skiprows=4, index_col=0) del df["Gene Name"] df.columns = df.columns.str.lower() df = df.fillna(0.0) def matches(*strings): return [c for c in df.columns if all(s in c for s in strings)] groups = { "sample_type:B-LCL": ( matches("b-cell", "lymphoblast") + matches("b acute lymphoblastic")), "sample_type:B-CELL": matches("b-cell"), "sample_type:B721-LIKE": matches("b-cell"), "sample_type:MELANOMA_CELL_LINE": matches("melanoma"), "sample_type:MELANOMA": matches("melanoma"), "sample_type:A375-LIKE": matches("melanoma"), "sample_type:KG1-LIKE": matches("myeloid leukemia"), # Using a fibrosarcoma cell line for our fibroblast sample. "sample_type:FIBROBLAST": ['fibrosarcoma, ht-1080'], # For GBM tissue we are just using a mixture of cell lines. "sample_type:GLIOBLASTOMA_TISSUE": matches("glioblastoma"), "cell_line:THP-1": ["childhood acute monocytic leukemia, thp-1"], "cell_line:HL-60": ["adult acute myeloid leukemia, hl-60"], "cell_line:U-87": ['glioblastoma, u-87 mg'], "cell_line:LNT-229": ['glioblastoma, ln-229'], "cell_line:T98G": ['glioblastoma, t98g'], "cell_line:SK-MEL-5": ['cutaneous melanoma, sk-mel-5'], 'cell_line:MEWO': ['melanoma, mewo'], "cell_line:HCC1937": ['breast ductal adenocarcinoma, hcc1937'], "cell_line:HCT116": ['colon carcinoma, hct 116'], "cell_line:HCC1143": ['breast ductal adenocarcinoma, hcc1143'], } return [make_expression_groups("expression_atlas_22460905", df, groups)] def handle_expression_human_protein_atlas(*filenames): (cell_line_filename,) = [f for f in filenames if "celline" in f] (blood_filename,) = [f for f in filenames if "blood" in f] (gtex_filename,) = [f for f in filenames if "gtex" in f] cell_line_df = pandas.read_csv(cell_line_filename, sep="\t") blood_df = pandas.read_csv(blood_filename, sep="\t", index_col=0) gtex_df = pandas.read_csv(gtex_filename, sep="\t") cell_line_df = cell_line_df.pivot( index="Gene", columns="Cell line", values="TPM") gtex_df = gtex_df.pivot( index="Gene", columns="Tissue", values="TPM") return [ make_expression_groups( "human_protein_atlas:%s" % os.path.basename(blood_filename), blood_df, groups={ "sample_type:PBMC": [ c for c in blood_df.columns if "total PBMC" in c ], # for samples labeled leukapheresis we also use PBMC "sample_type:LEUKAPHERESIS": [ c for c in blood_df.columns if "total PBMC" in c ], # for samples labeled TIL we are also using PBMC "sample_type:TIL": [ c for c in blood_df.columns if "total PBMC" in c ], }), make_expression_groups( "human_protein_atlas:%s" % os.path.basename(cell_line_filename), cell_line_df, groups={ "cell_line:HELA": ['HeLa'], "cell_line:K562": ["K-562"], "cell_line:HEK293": ['HEK 293'], "cell_line:RPMI8226": ['RPMI-8226'], "cell_line:EXPI293": ['HEK 293'], # EXPI293 derived from HEK293 }), make_expression_groups( "human_protein_atlas:%s" % os.path.basename(gtex_filename), gtex_df, groups={ "sample_type:LUNG": ["lung"], "sample_type:SPLEEN": ["spleen"], "sample_type:OVARY": ["ovary"], "sample_type:KIDNEY": ["kidney"], }), ] def make_expression_mixtures(expression_df): global CELL_LINE_MIXTURES groups = {} for mix in CELL_LINE_MIXTURES: components = [] for item in mix.replace("mix:", "").upper().split(","): if "cell_line:%s" % item in expression_df.columns: components.append("cell_line:%s" % item) else: print("No cell line, falling back on similar: ", item) components.append("sample_type:%s-LIKE" % item) groups["sample_type:" + mix.upper()] = components missing = set() for some in groups.values(): for item in some: if item not in expression_df.columns: missing.add(item) if missing: raise ValueError( "Missing [%d]: %s. Available: %s" % ( len(missing), missing, expression_df.columns.tolist())) return make_expression_groups("mixtures", expression_df, groups) # Add all functions with names like handle_pmid_XXXX to PMID_HANDLERS dict. for (key, value) in list(locals().items()): if key.startswith("handle_pmid_"): PMID_HANDLERS[key.replace("handle_pmid_", "")] = value elif key.startswith("handle_expression_"): EXPRESSION_HANDLERS[key.replace("handle_expression_", "")] = value def run(): args = parser.parse_args(sys.argv[1:]) expression_dfs = [] for (i, item_tpl) in enumerate(args.expression_item): (label, filenames) = (item_tpl[0], item_tpl[1:]) label = label.replace("-", "_") print( "Processing expression item %d of %d" % (i + 1, len(args.expression_item)), label, *[os.path.abspath(f) for f in filenames]) expression_dfs_for_item = [] handler = None if label in EXPRESSION_HANDLERS: handler = EXPRESSION_HANDLERS[label] expression_dfs_for_item = handler(*filenames) elif args.debug: debug(*filenames) else: raise NotImplementedError(label) if expression_dfs_for_item: print( "Processed expression data", label, "result dataframes", len(expression_dfs_for_item)) print(*[e.columns for e in expression_dfs_for_item]) expression_dfs.extend(expression_dfs_for_item) expression_df = expression_dfs[0] for other in expression_dfs[1:]: expression_df = pandas.merge( expression_df, other, how='outer', left_index=True, right_index=True) print("Genes in each expression dataframe: ", *[len(e) for e in expression_dfs]) print("Genes in merged expression dataframe", len(expression_df)) if CELL_LINE_MIXTURES: print("Generating cell line mixtures.") expression_mixture_df = make_expression_mixtures(expression_df) expression_df = pandas.merge( expression_df, expression_mixture_df, how='outer', left_index=True, right_index=True) ms_dfs = [] for (i, item_tpl) in enumerate(args.ms_item): (pmid, filenames) = (item_tpl[0], item_tpl[1:]) print( "Processing MS item %d of %d" % (i + 1, len(args.ms_item)), pmid, *[os.path.abspath(f) for f in filenames]) ms_df = None handler = None if pmid in PMID_HANDLERS: handler = PMID_HANDLERS[pmid] ms_df = handler(*filenames) elif args.debug: debug(*filenames) else: raise NotImplementedError(pmid) if ms_df is not None: ms_df["pmid"] = pmid if "original_pmid" not in ms_df.columns: ms_df["original_pmid"] = pmid if "expression_dataset" not in ms_df.columns: ms_df["expression_dataset"] = "" ms_df = ms_df.applymap(str).applymap(str.upper) ms_df["sample_id"] = ms_df.sample_id.str.replace(" ", "") print("*** PMID %s: %d peptides ***" % (pmid, len(ms_df))) if handler is not None: print(handler.__doc__) print("Counts by sample id:") print(ms_df.groupby("sample_id").peptide.nunique()) print("") print("Counts by sample type:") print(ms_df.groupby("sample_type").peptide.nunique()) print("****************************") for value in ms_df.expression_dataset.unique(): if value and value not in expression_df.columns: raise ValueError("No such expression dataset", value) ms_dfs.append(ms_df) ms_df = pandas.concat(ms_dfs, ignore_index=True, sort=False) ms_df["cell_line"] = ms_df["cell_line"].fillna("") ms_df["hla"] = ms_df["hla"].str.strip().str.replace(r'\s+', ' ') sample_table = ms_df[ ["sample_id", "pmid", "expression_dataset", "cell_line", "sample_type"] ].drop_duplicates().set_index("sample_id") sample_id_to_expression_dataset = sample_table.expression_dataset.to_dict() for (sample_id, value) in sorted(sample_id_to_expression_dataset.items()): if value: print("Expression dataset for sample", sample_id, "already assigned") continue cell_line_col = "cell_line:" + sample_table.loc[sample_id, "cell_line"] sample_type_col = "sample_type:" + ( sample_table.loc[sample_id, "sample_type"]) expression_dataset = None for col in [cell_line_col, sample_type_col]: if col in expression_df.columns: expression_dataset = col break if not expression_dataset: print("*" * 20) print("No expression dataset for sample ", sample_id) print("Sample info:") print(sample_table.loc[sample_id]) print("*" * 20) sample_id_to_expression_dataset[sample_id] = expression_dataset print( "Sample", sample_id, "assigned exp. dataset", expression_dataset) print("Expression dataset usage:") print(pandas.Series(sample_id_to_expression_dataset).value_counts()) missing = [ key for (key, value) in sample_id_to_expression_dataset.items() if value is None ] if missing: print("Missing expression data for samples", *missing) print( "Missing cell lines: ", *sample_table.loc[missing, "cell_line"].dropna().drop_duplicates().tolist()) print("Missing sample types: ", *sample_table.loc[ missing, "sample_type"].dropna().drop_duplicates().tolist()) if args.debug: import ipdb; ipdb.set_trace() else: raise ValueError("Missing expression data for samples: ", missing) ms_df["expression_dataset"] = ms_df.sample_id.map( sample_id_to_expression_dataset) cols = [ "pmid", "sample_id", "peptide", "format", "mhc_class", "hla", "expression_dataset", ] cols += [c for c in sorted(ms_df.columns) if c not in cols] ms_df = ms_df[cols] null_df = ms_df.loc[ms_df.isnull().any(1)] if len(null_df) > 0: print("Nulls:") print(null_df) else: print("No nulls.") # Each sample should be coming from only one experiment. assert ms_df.groupby("sample_id").pmid.nunique().max() == 1, ( ms_df.groupby("sample_id").pmid.nunique().sort_values()) expression_df.to_csv(args.expression_out, index=True) print("Wrote: %s" % os.path.abspath(args.expression_out)) ms_df.to_csv(args.ms_out, index=False) print("Wrote: %s" % os.path.abspath(args.ms_out)) if args.expression_metadata_out is not None: expression_metadata_df = pandas.DataFrame( EXPRESSION_GROUPS_ROWS, columns=["expression_dataset", "label", "samples"]) expression_metadata_df["samples"] = expression_metadata_df[ "samples" ].map(json.dumps) expression_metadata_df.to_csv(args.expression_metadata_out, index=False) print("Wrote: %s" % os.path.abspath(args.expression_metadata_out)) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_curated/requirements.txt ================================================ xlrd>=1.1.0 ================================================ FILE: downloads-generation/data_evaluation/GENERATE.sh ================================================ #!/bin/bash # # # Usage: GENERATE.sh # # cluster mode uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # set -e set -x DOWNLOAD_NAME=data_evaluation SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status mhcflurry-downloads info cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 export MHCFLURRY_DEFAULT_PREDICT_BATCH_SIZE=16384 ## GENERATE BENCHMARK: MONOALLELIC #for kind in train_excluded all for kind in train_excluded do EXCLUDE_TRAIN_DATA="" if [ "$kind" == "train_excluded" ] then EXCLUDE_TRAIN_DATA="$(mhcflurry-downloads path models_class1_pan_variants)/models.no_additional_ms/train_data.csv.bz2" fi if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.monoallelic.$kind.csv.bz2" ] then echo "Reusing existing monoallelic benchmark: benchmark.monoallelic.$kind.csv.bz2" else cp $SCRIPT_DIR/make_benchmark.py . time python make_benchmark.py \ --hits "$(mhcflurry-downloads path models_class1_processing)/hits_with_tpm.csv.bz2" \ --proteome-peptides "$(mhcflurry-downloads path models_class1_processing)/proteome_peptides.csv.bz2" \ --decoys-per-hit 110 \ --exclude-train-data "$EXCLUDE_TRAIN_DATA" \ --only-format MONOALLELIC \ --out "$(pwd)/benchmark.monoallelic.$kind.csv" bzip2 -f benchmark.monoallelic.$kind.csv fi done ### GENERATE BENCHMARK: MULTIALLELIC #for kind in train_excluded all for kind in train_excluded do EXCLUDE_TRAIN_DATA="" if [ "$kind" == "train_excluded" ] then EXCLUDE_TRAIN_DATA="$(mhcflurry-downloads path models_class1_pan)/models.combined/train_data.csv.bz2" fi if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.$kind.csv.bz2" ] then echo "Reusing existing multiallelic benchmark" else cp $SCRIPT_DIR/make_benchmark.py . time python make_benchmark.py \ --hits "$(mhcflurry-downloads path models_class1_processing)/hits_with_tpm.csv.bz2" \ --proteome-peptides "$(mhcflurry-downloads path models_class1_processing)/proteome_peptides.csv.bz2" \ --decoys-per-hit 110 \ --exclude-train-data "$EXCLUDE_TRAIN_DATA" \ --only-format MULTIALLELIC \ --out "$(pwd)/benchmark.multiallelic.$kind.csv" bzip2 -f benchmark.multiallelic.$kind.csv fi done for kind in train_excluded do ### SPLIT BENCHMARK: MONOALLELIC if [ "$2" == "continue-incomplete" ] && [ -f "MONOALLELIC_SAMPLES" ] then echo "Reusing existing monoallelic $kind benchmark pieces" else cp $SCRIPT_DIR/split_by_sample.py . time python split_by_sample.py \ "$(pwd)/benchmark.monoallelic.$kind.csv.bz2" \ --out "$(pwd)/benchmark.monoallelic.$kind.%s.csv" \ --out-samples MONOALLELIC_SAMPLES for sample in $(cat MONOALLELIC_SAMPLES) do bzip2 -f "$(pwd)/benchmark.monoallelic.$kind.$sample.csv" done fi ### SPLIT BENCHMARK: MULTIALLELIC if [ "$2" == "continue-incomplete" ] && [ -f "MULTIALLELIC_SAMPLES" ] then echo "Reusing existing multiallelic $kind benchmark pieces" else cp $SCRIPT_DIR/split_by_sample.py . time python split_by_sample.py \ "$(pwd)/benchmark.multiallelic.$kind.csv.bz2" \ --out "$(pwd)/benchmark.multiallelic.$kind.%s.csv" \ --out-samples MULTIALLELIC_SAMPLES for sample in $(cat MULTIALLELIC_SAMPLES) do bzip2 -f "$(pwd)/benchmark.multiallelic.$kind.$sample.csv" done fi done rm -rf commands mkdir commands rm -f CHECK_FILES #for kind in train_excluded all for kind in train_excluded do MONOALLELIC_AFFINITY_PREDICTOR="$(mhcflurry-downloads path models_class1_pan_variants)/models.no_additional_ms" echo "MONOALLELIC: Using affinity predictor: MONOALLELIC_AFFINITY_PREDICTOR" cat "$MONOALLELIC_AFFINITY_PREDICTOR/info.txt" GROUP=group.monoallelic.no_additional_ms.$kind.csv echo "filename" > $GROUP for sample in $(cat MONOALLELIC_SAMPLES) do ## AFFINITY PREDICTOR VARIANT: MONOALLELIC if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.monoallelic.no_additional_ms.$kind.$sample.csv.bz2" ] then echo "Reusing existing monoallelic benchmark predictions $sample" else echo time mhcflurry-predict \ "$(pwd)/benchmark.monoallelic.$kind.$sample.csv.bz2" \ --allele-column hla \ --prediction-column-prefix no_additional_ms_ \ --models \""$MONOALLELIC_AFFINITY_PREDICTOR"\" \ --affinity-only \ --no-affinity-percentile \ --out "$(pwd)/benchmark.monoallelic.no_additional_ms.$kind.$sample.csv" \ --no-throw >> commands/monoallelic.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.monoallelic.no_additional_ms.$kind.$sample.csv" >> commands/monoallelic.$kind.$sample.sh fi echo ls -lh "benchmark.monoallelic.no_additional_ms.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.monoallelic.no_additional_ms.$kind.$sample.csv.bz2" >> $GROUP done MULTIALLELIC_AFFINITY_PREDICTOR="$(mhcflurry-downloads path models_class1_pan)/models.combined" echo "MULTIALLELIC: Using affinity predictor: MULTIALLELIC_AFFINITY_PREDICTOR" cat "$MULTIALLELIC_AFFINITY_PREDICTOR/info.txt" GROUP=group.multiallelic.production.$kind.csv echo "filename" > $GROUP for sample in $(cat MULTIALLELIC_SAMPLES) do ### AFFINITY PREDICTORS: MULTIALLELIC if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.production.$kind.$sample.csv.bz2" ] then echo "Reusing existing multiallelic predictions $sample" else echo time mhcflurry-predict \ "$(pwd)/benchmark.multiallelic.$kind.$sample.csv.bz2" \ --allele-column hla \ --prediction-column-prefix mhcflurry_production_ \ --models \""$MULTIALLELIC_AFFINITY_PREDICTOR"\" \ --affinity-only \ --no-affinity-percentile \ --out "$(pwd)/benchmark.multiallelic.production.$kind.$sample.csv" >> commands/multiallelic.production.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.multiallelic.production.$kind.$sample.csv" >> commands/multiallelic.production.$kind.$sample.sh fi echo ls -lh "benchmark.multiallelic.production.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.multiallelic.production.$kind.$sample.csv.bz2" >> $GROUP done #for sample in $(cat MULTIALLELIC_SAMPLES) #do #for variant in no_additional_ms compact_peptide affinity_only no_pretrain single_hidden_no_pretrain 500nm #for variant in 50nm # TODO: IF this gets enabled, add the $GROUP stuff. #do # if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.${variant}.$kind.$sample.csv.bz2" ] # then # echo "Reusing existing multiallelic predictions: ${variant} $sample" # else # echo time mhcflurry-predict \ # "$(pwd)/benchmark.multiallelic.$kind.$sample.csv.bz2" \ # --allele-column hla \ # --prediction-column-prefix "${variant}_" \ # --models \""$(mhcflurry-downloads path models_class1_pan_variants)/models.$variant"\" \ # --affinity-only \ # --no-affinity-percentile \ # --out "$(pwd)/benchmark.multiallelic.${variant}.$kind.$sample.csv" >> commands/multiallelic.${variant}.$kind.$sample.sh # echo bzip2 -f "$(pwd)/benchmark.multiallelic.${variant}.$kind.$sample.csv" >> commands/multiallelic.${variant}.$kind.$sample.sh # fi # echo ls -lh "benchmark.multiallelic.${variant}.$kind.$sample.csv.bz2" >> CHECK_FILES #done #done PRESENTATION_PREDICTOR="$(mhcflurry-downloads path models_class1_presentation)/models" echo "Using presentation predictor: $PRESENTATION_PREDICTOR" cat "$PRESENTATION_PREDICTOR/info.txt" GROUP=group.multiallelic.presentation_with_flanks.$kind.csv echo "filename" > $GROUP for sample in $(cat MULTIALLELIC_SAMPLES) do ### PRESENTATION: WITH FLANKS if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.presentation_with_flanks.$kind.$sample.csv.bz2" ] then echo "Reusing existing multiallelic presentation with flanks $sample" else echo time mhcflurry-predict \ "$(pwd)/benchmark.multiallelic.$kind.$sample.csv.bz2" \ --allele-column hla \ --prediction-column-prefix presentation_with_flanks_ \ --models \""$PRESENTATION_PREDICTOR"\" \ --no-affinity-percentile \ --out "$(pwd)/benchmark.multiallelic.presentation_with_flanks.$kind.$sample.csv" >> commands/multiallelic.presentation_with_flanks.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.multiallelic.presentation_with_flanks.$kind.$sample.csv" >> commands/multiallelic.presentation_with_flanks.$kind.$sample.sh fi echo ls -lh "benchmark.multiallelic.presentation_with_flanks.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.multiallelic.presentation_with_flanks.$kind.$sample.csv.bz2" >> $GROUP done GROUP=group.multiallelic.presentation_without_flanks.$kind.csv echo "filename" > $GROUP for sample in $(cat MULTIALLELIC_SAMPLES) do ### PRESENTATION: NO FLANKS if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.presentation_without_flanks.$kind.$sample.csv.bz2" ] then echo "Reusing existing multiallelic presentation without flanks $sample" else echo time mhcflurry-predict \ "$(pwd)/benchmark.multiallelic.$kind.$sample.csv.bz2" \ --allele-column hla \ --prediction-column-prefix presentation_without_flanks_ \ --models \""$PRESENTATION_PREDICTOR"\" \ --no-affinity-percentile \ --no-flanking \ --out "$(pwd)/benchmark.multiallelic.presentation_without_flanks.$kind.$sample.csv" >> commands/multiallelic.presentation_without_flanks.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.multiallelic.presentation_without_flanks.$kind.$sample.csv" >> commands/multiallelic.presentation_without_flanks.$kind.$sample.sh fi echo ls -lh "benchmark.multiallelic.presentation_without_flanks.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.multiallelic.presentation_without_flanks.$kind.$sample.csv.bz2" >> $GROUP done ### PRECOMPUTED #### for variant in netmhcpan4.ba netmhcpan4.el mixmhcpred do GROUP=group.monoallelic.${variant}.$kind.csv echo "filename" > $GROUP for sample in $(cat MONOALLELIC_SAMPLES) do if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.monoallelic.${variant}.$kind.$sample.csv.bz2" ] then echo "Reusing existing monoallelic ${variant} $sample" else cp $SCRIPT_DIR/join_with_precomputed.py . echo time python join_with_precomputed.py \ \""$(pwd)/benchmark.monoallelic.$kind.$sample.csv.bz2"\" \ ${variant} \ --out "$(pwd)/benchmark.monoallelic.${variant}.$kind.$sample.csv" >> commands/monoallelic.${variant}.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.monoallelic.${variant}.$kind.$sample.csv" >> commands/monoallelic.${variant}.$kind.$sample.sh fi echo ls -lh "benchmark.monoallelic.${variant}.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.monoallelic.${variant}.$kind.$sample.csv.bz2" >> $GROUP done GROUP=group.multiallelic.${variant}.$kind.csv echo "filename" > $GROUP for sample in $(cat MULTIALLELIC_SAMPLES) do if [ "$2" == "continue-incomplete" ] && [ -f "benchmark.multiallelic.${variant}.$kind.$sample.csv.bz2" ] then echo "Reusing existing multiallelic ${variant} $sample" else cp $SCRIPT_DIR/join_with_precomputed.py . echo time python join_with_precomputed.py \ \""$(pwd)/benchmark.multiallelic.$kind.$sample.csv.bz2"\" \ ${variant} \ --out "$(pwd)/benchmark.multiallelic.${variant}.$kind.$sample.csv" >> commands/multiallelic.${variant}.$kind.$sample.sh echo bzip2 -f "$(pwd)/benchmark.multiallelic.${variant}.$kind.$sample.csv" >> commands/multiallelic.${variant}.$kind.$sample.sh fi echo ls -lh "benchmark.multiallelic.${variant}.$kind.$sample.csv.bz2" >> CHECK_FILES echo "benchmark.multiallelic.${variant}.$kind.$sample.csv.bz2" >> $GROUP done done done ls -lh commands if [ "$1" != "cluster" ] then echo "Running locally" for i in $(ls commands/*.sh) do echo "# *******" echo "# Command $i" cat $i bash $i done else echo "Running on cluster" for i in $(ls commands/*.sh) do echo "# *******" echo "# Command $i" cat $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.lsf > ${i}.lsf echo cd "$(pwd)" >> ${i}.lsf cat $i >> ${i}.lsf cat ${i}.lsf bsub -K < "${i}.lsf" & sleep 1 done wait fi bash CHECK_FILES cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000m "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* ================================================ FILE: downloads-generation/data_evaluation/cluster_submit_script_header.mssm_hpc.lsf ================================================ #!/bin/bash #BSUB -J MHCf # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q premium # queue #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 40:00 # walltime in HH:MM #BSUB -R rusage[mem=45000] # mb memory requested #BSUB -o %J.stdout # output log (%J : JobID) #BSUB -eo %J.stderr # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/mhcflurry-conda-environment/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 free -m module list env ================================================ FILE: downloads-generation/data_evaluation/join_with_precomputed.py ================================================ """ Join benchmark with precomputed predictions. """ import sys import argparse import os import numpy import collections import pandas import tqdm import mhcflurry from mhcflurry.downloads import get_path parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "benchmark") parser.add_argument( "predictors", nargs="+", choices=("netmhcpan4.ba", "netmhcpan4.el", "mixmhcpred")) parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") def load_results(dirname, result_df=None, columns=None): peptides = pandas.read_csv(os.path.join(dirname, "peptides.csv")).peptide manifest_df = pandas.read_csv(os.path.join(dirname, "alleles.csv")) print("Loading results. Existing data has", len(peptides), "peptides and", len(manifest_df), "columns") if columns is None: columns = manifest_df.col.values if result_df is None: result_df = pandas.DataFrame( index=peptides, columns=columns, dtype="float32") result_df[:] = numpy.nan peptides_to_assign = peptides mask = None else: mask = (peptides.isin(result_df.index)).values peptides_to_assign = peptides[mask] manifest_df = manifest_df.loc[manifest_df.col.isin(result_df.columns)] print("Will load", len(peptides), "peptides and", len(manifest_df), "cols") for _, row in tqdm.tqdm(manifest_df.iterrows(), total=len(manifest_df)): with open(os.path.join(dirname, row.path), "rb") as fd: value = numpy.load(fd)['arr_0'].astype(numpy.float32) if mask is not None: value = value[mask] result_df.loc[peptides_to_assign, row.col] = value return result_df def run(): args = parser.parse_args(sys.argv[1:]) df = pandas.read_csv(args.benchmark) peptides = df.peptide.unique() alleles = set() for some in df.hla.unique(): alleles.update(some.split()) precomputed_dfs = {} if 'netmhcpan4.ba' in args.predictors: precomputed_dfs['netmhcpan4.ba'] = load_results( get_path("data_predictions", "predictions/all.netmhcpan4.ba"), result_df=pandas.DataFrame( dtype=numpy.float32, index=peptides, columns=["%s affinity" % a for a in alleles])).rename( columns=lambda s: s.replace("affinity", "").strip()) precomputed_dfs['netmhcpan4.ba'] *= -1 # flip since it's affinities if 'netmhcpan4.el' in args.predictors: precomputed_dfs['netmhcpan4.el'] = load_results( get_path("data_predictions", "predictions/all.netmhcpan4.el"), result_df=pandas.DataFrame( dtype=numpy.float32, index=peptides, columns=["%s score" % a for a in alleles])).rename( columns=lambda s: s.replace("score", "").strip()) if 'mixmhcpred' in args.predictors: precomputed_dfs['mixmhcpred'] = load_results( get_path("data_predictions", "predictions/all.mixmhcpred"), result_df=pandas.DataFrame( dtype=numpy.float32, index=peptides, columns=["%s score" % a for a in alleles])).rename( columns=lambda s: s.replace("score", "").strip()) skip_experiments = set() for hla_text, sub_df in tqdm.tqdm(df.groupby("hla"), total=df.hla.nunique()): hla = hla_text.split() for (name, precomputed_df) in precomputed_dfs.items(): df.loc[sub_df.index, name] = numpy.nan prediction_df = pandas.DataFrame(index=sub_df.peptide, dtype=float) for allele in hla: if allele not in precomputed_df.columns or precomputed_df[allele].isnull().all(): print(sub_df.sample_id.unique(), hla) skip_experiments.update(sub_df.sample_id.unique()) prediction_df[allele] = precomputed_df.loc[ prediction_df.index, allele ] df.loc[sub_df.index, name] = prediction_df.max(1, skipna=False).values df.loc[sub_df.index, name + "_best_allele"] = prediction_df.idxmax( 1, skipna=False).values if 'netmhcpan4.ba' in args.predictors: # unflip the values df['netmhcpan4.ba'] *= -1 print("Skip experiments", skip_experiments) print("results") print(df) df.to_csv(args.out, index=False) print("Wrote", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_evaluation/make_benchmark.py ================================================ """ Make training data by selecting decoys, etc. """ import sys import argparse import os import numpy import collections import pandas import tqdm import mhcflurry parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--hits", metavar="CSV", required=True, help="Multiallelic mass spec") parser.add_argument( "--proteome-peptides", metavar="CSV", required=True, help="Proteome peptides") parser.add_argument( "--decoys-per-hit", type=float, metavar="N", default=99, help="Decoys per hit") parser.add_argument( "--exclude-pmid", nargs="+", default=[], help="Exclude given PMID") parser.add_argument( "--only-pmid", nargs="*", default=[], help="Include only the given PMID") parser.add_argument( "--exclude-train-data", nargs="+", default=[], help="Remove hits and decoys included in the given training data") parser.add_argument( "--only-format", choices=("MONOALLELIC", "MULTIALLELIC"), help="Include only data of the given format") parser.add_argument( "--sample-fraction", type=float, help="Subsample data by specified fraction (e.g. 0.1)") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") def run(): args = parser.parse_args(sys.argv[1:]) hit_df = pandas.read_csv(args.hits) hit_df["pmid"] = hit_df["pmid"].astype(str) original_samples_pmids = hit_df.pmid.unique() numpy.testing.assert_equal(hit_df.hit_id.nunique(), len(hit_df)) hit_df = hit_df.loc[ (hit_df.mhc_class == "I") & (hit_df.peptide.str.len() <= 11) & (hit_df.peptide.str.len() >= 8) & (~hit_df.protein_ensembl.isnull()) & (hit_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS))) ] hit_df['alleles'] = hit_df.hla.str.split().map(tuple) print("Loaded hits from %d samples" % hit_df.sample_id.nunique()) if args.only_format: hit_df = hit_df.loc[hit_df.format == args.only_format].copy() print("Subselected to %d %s samples" % ( hit_df.sample_id.nunique(), args.only_format)) if args.only_pmid or args.exclude_pmid: assert not (args.only_pmid and args.exclude_pmid) pmids = list(args.only_pmid) + list(args.exclude_pmid) missing = [pmid for pmid in pmids if pmid not in original_samples_pmids] assert not missing, (missing, original_samples_pmids) mask = hit_df.pmid.isin(pmids) if args.exclude_pmid: mask = ~mask new_hit_df = hit_df.loc[mask] print( "Selecting by pmids", pmids, "reduced dataset from", len(hit_df), "to", len(new_hit_df)) hit_df = new_hit_df.copy() print("Subselected by pmid to %d samples" % hit_df.sample_id.nunique()) allele_to_excluded_peptides = collections.defaultdict(set) for train_dataset in args.exclude_train_data: if not train_dataset: continue print("Excluding hits from", train_dataset) train_df = pandas.read_csv(train_dataset) for (allele, peptides) in train_df.groupby("allele").peptide.unique().items(): allele_to_excluded_peptides[allele].update(peptides) train_counts = train_df.groupby( ["allele", "peptide"]).measurement_value.count().to_dict() hit_no_train = hit_df.loc[ [ not any([ train_counts.get((allele, row.peptide)) for allele in row.alleles ]) for _, row in tqdm.tqdm(hit_df.iterrows(), total=len(hit_df))] ] print( "Excluding hits from", train_dataset, "reduced dataset from", len(hit_df), "to", len(hit_no_train)) hit_df = hit_no_train sample_table = hit_df.drop_duplicates("sample_id").set_index("sample_id") grouped = hit_df.groupby("sample_id").nunique() for col in sample_table.columns: if (grouped[col] > 1).any(): del sample_table[col] print("Loading proteome peptides") all_peptides_df = pandas.read_csv(args.proteome_peptides) print("Loaded: ", all_peptides_df.shape) all_peptides_df = all_peptides_df.loc[ all_peptides_df.protein_accession.isin(hit_df.protein_accession.unique()) & all_peptides_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS)) ].copy() all_peptides_df["length"] = all_peptides_df.peptide.str.len() print("Subselected proteome peptides by accession: ", all_peptides_df.shape) all_peptides_by_length = dict(iter(all_peptides_df.groupby("length"))) print("Selecting decoys.") lengths = [8, 9, 10, 11] result_df = [] for sample_id, sub_df in tqdm.tqdm( hit_df.groupby("sample_id"), total=hit_df.sample_id.nunique()): result_df.append( sub_df[[ "protein_accession", "peptide", "sample_id", "n_flank", "c_flank", ]].copy()) result_df[-1]["hit"] = 1 excluded_peptides = set() for allele in sample_table.loc[sample_id].alleles: excluded_peptides.update(allele_to_excluded_peptides[allele]) print( sample_id, "will exclude", len(excluded_peptides), "peptides from decoy universe") for length in lengths: universe = all_peptides_by_length[length] possible_universe = universe.loc[ (~universe.peptide.isin(sub_df.peptide.unique())) & (~universe.peptide.isin(excluded_peptides)) & (universe.protein_accession.isin(sub_df.protein_accession.unique())) ] selected_decoys = possible_universe.sample( n=int(len(sub_df) * args.decoys_per_hit / len(lengths))) result_df.append(selected_decoys[ ["protein_accession", "peptide", "n_flank", "c_flank"] ].copy()) result_df[-1]["hit"] = 0 result_df[-1]["sample_id"] = sample_id result_df = pandas.concat(result_df, ignore_index=True, sort=False) result_df["hla"] = result_df.sample_id.map(sample_table.hla) print(result_df) print("Counts:") print(result_df.groupby(["sample_id", "hit"]).peptide.nunique()) print("Hit counts:") print( result_df.loc[ result_df.hit == 1 ].groupby("sample_id").hit.count().sort_values()) print("Hit rates:") print(result_df.groupby("sample_id").hit.mean().sort_values()) if args.sample_fraction: print("Subsampling to ", args.sample_fraction) result_df = result_df.sample(frac=args.sample_fraction) print("Subsampled:") print(result_df) print("Hit rates:") print(result_df.groupby("sample_id").hit.mean().sort_values()) result_df.to_csv(args.out, index=False) print("Wrote: ", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_evaluation/split_by_sample.py ================================================ """ Split a big csv by a particular column (sample id) """ import sys import argparse import re import pandas parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "data", metavar="CSV") parser.add_argument( "--out", help="Out pattern (%s will be replaced by sample)", metavar="CSV") parser.add_argument( "--out-samples", help="Out sample list", metavar="CSV") parser.add_argument( "--split-column", help="Column to split by", default="sample_id") def run(): args = parser.parse_args(sys.argv[1:]) df = pandas.read_csv(args.data) print("Read data with shape", df.shape) names = [] for (i, (sample, sub_df)) in enumerate(df.groupby(args.split_column)): name = re.sub(r'[^\w\d-]', '', sample) + (".%d" % i) dest = args.out % name sub_df.to_csv(dest, index=False) print("Wrote [%d rows]" % len(sub_df), dest) names.append(name) if args.out_samples: pandas.Series(names).to_csv(args.out_samples, index=False, header=False) print("Wrote", args.out_samples) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_iedb/GENERATE.sh ================================================ #!/bin/bash # # Download latest MHC I ligand data from IEDB. # set -e set -x DOWNLOAD_NAME=data_iedb SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date cd $SCRATCH_DIR/$DOWNLOAD_NAME wget -q https://iedb.org/downloader.php?file_name=doc/mhc_ligand_full_single_file.zip -O mhc_ligand_full.zip wget -q http://www.iedb.org/downloader.php?file_name=doc/tcell_full_v3.zip -O tcell_full_v3.zip unzip mhc_ligand_full.zip rm mhc_ligand_full.zip bzip2 mhc_ligand_full.csv unzip tcell_full_v3.zip rm tcell_full_v3.zip bzip2 tcell_full_v3.csv cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/data_iedb/README.md ================================================ # IEDB Data This download is a snapshot of the IEDB MHC ligand data, available at: http://www.iedb.org/doc/mhc_ligand_full.zip To generate it, run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/data_mass_spec_annotated/GENERATE.sh ================================================ #!/bin/bash # # set -e set -x DOWNLOAD_NAME=data_mass_spec_annotated SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/annotate.py . PEPTIDES=$(mhcflurry-downloads path data_curated)/ms.by_pmid.csv.bz2 REFERENCES_DIR=$(mhcflurry-downloads path data_references) python annotate.py \ "$PEPTIDES" \ "${REFERENCES_DIR}/uniprot_proteins.csv.bz2" \ "${REFERENCES_DIR}/uniprot_proteins.fm" \ --out annotated_ms.csv bzip2 annotated_ms.csv cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/data_mass_spec_annotated/annotate.py ================================================ """ """ import sys import argparse import os import time import collections import re from six.moves import StringIO import pandas import tqdm # progress bar tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 import shellinford parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "peptides", metavar="FILE.csv", help="CSV of mass spec hits") parser.add_argument( "reference_csv", metavar="FILE.csv", help="CSV of protein sequences") parser.add_argument( "reference_index", metavar="FILE.fm", help="shellinford index over protein sequences") parser.add_argument( "--out", metavar="OUT.csv", help="Out file path") parser.add_argument( "--flanking-length", metavar="N", type=int, default=15, help="Length of flanking sequence to include") parser.add_argument( "--debug-max-rows", metavar="N", type=int, default=None, help="Max rows to process. Useful for debugging. If specified an ipdb " "debugging session is also opened at the end of the script") def run(): args = parser.parse_args(sys.argv[1:]) df = pandas.read_csv(args.peptides) df["hit_id"] = "hit." + df.index.map('{0:07d}'.format) df = df.set_index("hit_id") print("Read peptides", df.shape, *df.columns.tolist()) reference_df = pandas.read_csv(args.reference_csv, index_col=0) reference_df = reference_df.set_index("accession") print("Read proteins", reference_df.shape, *reference_df.columns.tolist()) fm = shellinford.FMIndex() fm.read(args.reference_index) print("Read proteins index") join_df = [] for (hit_id, row) in tqdm.tqdm(df.iterrows(), total=len(df)): matches = fm.search(row.peptide) for match in matches: reference_row = reference_df.iloc[match.doc_id] starts = [ m.start() for m in re.finditer(row.peptide, reference_row.seq) ] assert len(starts) > 0, (row.peptide, reference_row.seq) for start in starts: end_pos = start + len(row.peptide) n_flank = reference_row.seq[ max(start - args.flanking_length, 0) : start ].rjust(args.flanking_length, 'X') c_flank = reference_row.seq[ end_pos : (end_pos + args.flanking_length) ].ljust(args.flanking_length, 'X') join_df.append(( hit_id, match.doc_id, len(matches), len(starts), start, start / len(reference_row.seq), n_flank, c_flank, )) if args.debug_max_rows and len(join_df) > args.debug_max_rows: break join_df = pandas.DataFrame( join_df, columns=[ "hit_id", "match_index", "num_proteins", "num_occurrences_in_protein", "start_position", "start_fraction_in_protein", "n_flank", "c_flank", ]).drop_duplicates() join_df["protein_accession"] = join_df.match_index.map( reference_df.index.to_series().reset_index(drop=True)) del join_df["match_index"] protein_cols = [ c for c in reference_df.columns if c not in ["name", "description", "seq"] ] for col in protein_cols: join_df["protein_%s" % col] = join_df.protein_accession.map( reference_df[col]) merged_df = pandas.merge( join_df, df, how="left", left_on="hit_id", right_index=True) merged_df.to_csv(args.out, index=False) print("Wrote: %s" % os.path.abspath(args.out)) if args.debug_max_rows: # Leave user in a debugger import ipdb ipdb.set_trace() if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_mass_spec_annotated/requirements.txt ================================================ shellinford ================================================ FILE: downloads-generation/data_predictions/GENERATE.WITH_HPC_CLUSTER.sh ================================================ bash GENERATE.sh cluster reuse-predictions ================================================ FILE: downloads-generation/data_predictions/GENERATE.sh ================================================ #!/bin/bash # # This download includes predictions for NetMHCpan 4.0 and MixMHCpred over a # large number of peptides encompassing almost the full proteome. # # Usage: # GENERATE.sh # # The first choice listed above for each argument is the default. # # Meanings for these arguments: # # FIRST ARGUMENT: where to run # local - run locally using NUM_JOBS cores. # cluster - run on cluster. # # SECOND ARGUMENT: whether to reuse predictions from existing downloaded data # reuse-all - reuse predictions and peptide / allele lists from existing # downloaded data_predictions. # reuse-none - fully self-contained run; do not reuse anything. # reuse-predictions - reuse predictions but not peptide or allele lists. Any # new peptides not already included will be run. # reuse-predictions-except-mhcflurry # - Reuse predictions except for mhcflurry [1]. # # [1] In an earlier version, this download also included predictions for MHCflurry. This is # no longer the case. set -e set -x DOWNLOAD_NAME=data_predictions SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/write_proteome_peptides.py . cp $SCRIPT_DIR/write_allele_list.py . cp $SCRIPT_DIR/run_predictors.py . if [ "$1" != "cluster" ] then GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" if [ "$GPUS" -eq "0" ]; then NUM_JOBS=${NUM_JOBS-1} else NUM_JOBS=${NUM_JOBS-$GPUS} fi echo "Num jobs: $NUM_JOBS" EXTRA_ARGS+=" --num-jobs $NUM_JOBS --max-tasks-per-worker 1 --gpus $GPUS --max-workers-per-gpu 1" else EXTRA_ARGS+=" --cluster-parallelism --cluster-max-retries 3 --cluster-submit-command bsub --cluster-results-workdir $HOME/mhcflurry-scratch" fi PEPTIDES=$(mhcflurry-downloads path data_mass_spec_annotated)/annotated_ms.csv.bz2 REFERENCES_DIR=$(mhcflurry-downloads path data_references) if [ "${2:-reuse-none}" != "reuse-none" ] then EXISTING_DATA="$(mhcflurry-downloads path $DOWNLOAD_NAME)" echo "Will reuse data from $EXISTING_DATA" else EXISTING_DATA="" echo "Will NOT reuse any data" fi mkdir predictions # Write out alleles if [ "$2" == "reuse-all" ] then echo "Reusing allele list" cp "$EXISTING_DATA/alleles.txt" . else echo "Generating allele list" python write_allele_list.py "$PEPTIDES" --out alleles.txt fi # Write out and process peptides. for subset in all do if [ "$2" == "reuse-all" ] then echo "Reusing peptide list" cp "$EXISTING_DATA/proteome_peptides.$subset.csv.bz2" . else echo "Generating peptide list" SUBSET_ARG="" if [ "$subset" == "chr1" ] then SUBSET_ARG="--chromosome 1" fi python write_proteome_peptides.py \ "$PEPTIDES" \ "${REFERENCES_DIR}/uniprot_proteins.csv.bz2" \ --out proteome_peptides.$subset.csv $SUBSET_ARG bzip2 proteome_peptides.$subset.csv fi # Run mixmhcpred OUT_DIR=predictions/${subset}.mixmhcpred REUSE="" if [ "${2:-reuse-none}" != "reuse-none" ] then REUSE="$EXISTING_DATA"/$OUT_DIR fi python run_predictors.py \ "$(pwd)/proteome_peptides.$subset.csv.bz2" \ --result-dtype "float16" \ --predictor mixmhcpred \ --chunk-size 10000 \ --allele $(cat alleles.txt) \ --out "$OUT_DIR" \ --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.nogpu.lsf \ --reuse-predictions "$REUSE" $EXTRA_ARGS # Run netmhcpan4 for kind in el ba do OUT_DIR=predictions/${subset}.netmhcpan4.$kind REUSE="" if [ "${2:-reuse-none}" != "reuse-none" ] then REUSE="$EXISTING_DATA"/$OUT_DIR fi python run_predictors.py \ "$(pwd)/proteome_peptides.$subset.csv.bz2" \ --result-dtype "float16" \ --predictor netmhcpan4-$kind \ --chunk-size 1000 \ --allele $(cat alleles.txt) \ --out "$OUT_DIR" \ --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.nogpu.lsf \ --reuse-predictions "$REUSE" $EXTRA_ARGS done # Run MHCflurry #for kind in combined #do # OUT_DIR=predictions/${subset}.mhcflurry.${kind} # REUSE="" # if [ "${2:-reuse-none}" != "reuse-none" ] && [ "${2:-reuse-none}" != "reuse-predictions-except-mhcflurry" ] # then # REUSE="$EXISTING_DATA"/$OUT_DIR # fi # # python run_predictors.py \ # "$(pwd)/proteome_peptides.$subset.csv.bz2" \ # --result-dtype "float16" \ # --predictor mhcflurry \ # --chunk-size 500000 \ # --mhcflurry-batch-size 65536 \ # --mhcflurry-models-dir "$(mhcflurry-downloads path models_class1_pan)/models.$kind" \ # --allele $(cat alleles.txt) \ # --out "$OUT_DIR" \ # --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ # --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.gpu.lsf \ # --reuse-predictions "$REUSE" $EXTRA_ARGS #done done cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000m "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* ================================================ FILE: downloads-generation/data_predictions/cluster_submit_script_header.mssm_hpc.gpu.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q gpu # queue #BSUB -R rusage[ngpus_excl_p=1] # 1 exclusive GPU #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 46:00 # walltime in HH:MM #BSUB -R rusage[mem=30000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/.conda/envs/py36b/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 export NETMHC_BUNDLE_HOME=$HOME/sinai/git/netmhc-bundle export NETMHC_BUNDLE_TMPDIR=/local/JOBS/netmhctmp-{work_item_num} export PATH=$NETMHC_BUNDLE_HOME/bin:$PATH free -m module add cuda/10.0.130 cudnn/7.1.1 module list # python -c 'import tensorflow as tf ; print("GPU AVAILABLE" if tf.test.is_gpu_available() else "GPU NOT AVAILABLE")' env cd {work_dir} ================================================ FILE: downloads-generation/data_predictions/cluster_submit_script_header.mssm_hpc.nogpu.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q express # queue #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 11:00 # walltime in HH:MM #BSUB -R rusage[mem=10000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/.conda/envs/py36b/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 export NETMHC_BUNDLE_HOME=$HOME/sinai/git/netmhc-bundle export NETMHC_BUNDLE_TMPDIR=/local/JOBS/netmhctmp-{work_item_num} export PATH=$NETMHC_BUNDLE_HOME/bin:$PATH cd {work_dir} mkdir -p "$NETMHC_BUNDLE_TMPDIR" mkdir -p "$TMPDIR" chmod 777 "$NETMHC_BUNDLE_TMPDIR" chmod 777 "$TMPDIR" ls "$NETMHC_BUNDLE_TMPDIR" ls "$TMPDIR" netMHCpan-4.0 -listMHC MixMHCpred -h free -m env ================================================ FILE: downloads-generation/data_predictions/requirements.txt ================================================ mhctools ================================================ FILE: downloads-generation/data_predictions/run_predictors.py ================================================ """ """ import argparse import os import signal import sys import time import traceback import math import collections from functools import partial import numpy import pandas from mhcflurry.common import normalize_allele_name import tqdm # progress bar tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 from mhcflurry.common import configure_logging from mhcflurry.local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from mhcflurry.cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "input_peptides", metavar="CSV", help="CSV file with 'peptide' column") parser.add_argument( "--predictor", required=True, choices=("mhcflurry", "netmhcpan4-ba", "netmhcpan4-el", "mixmhcpred")) parser.add_argument( "--mhcflurry-models-dir", metavar="DIR", help="Directory to read MHCflurry models") parser.add_argument( "--mhcflurry-batch-size", type=int, default=4096, help="Batch size for MHCflurry predictions. Default: %(default)s") parser.add_argument( "--allele", default=None, required=True, nargs="+", help="Alleles to predict") parser.add_argument( "--chunk-size", type=int, default=100000, help="Num peptides per job. Default: %(default)s") parser.add_argument( "--out", metavar="DIR", help="Write results to DIR") parser.add_argument( "--max-peptides", type=int, help="Max peptides to process. For debugging.", default=None) parser.add_argument( "--reuse-predictions", metavar="DIR", nargs="*", help="Take predictions from indicated DIR instead of re-running them") parser.add_argument( "--result-dtype", default="float32", help="Numpy dtype of result. Default: %(default)s.") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) PREDICTOR_TO_COLS = { "mhcflurry": ["affinity"], "netmhcpan4-ba": ["affinity", "percentile_rank"], "netmhcpan4-el": ["score"], "mixmhcpred": ["score"], } def load_results(dirname, result_df=None, dtype="float32"): peptides = pandas.read_csv( os.path.join(dirname, "peptides.csv")).peptide manifest_df = pandas.read_csv(os.path.join(dirname, "alleles.csv")) print( "Loading results. Existing data has", len(peptides), "peptides and", len(manifest_df), "columns") # Make adjustments for old style data. Can be removed later. if "kind" not in manifest_df.columns: manifest_df["kind"] = "affinity" if "col" not in manifest_df.columns: manifest_df["col"] = manifest_df.allele + " " + manifest_df.kind if result_df is None: result_df = pandas.DataFrame( index=peptides, columns=manifest_df.col.values, dtype=dtype) result_df[:] = numpy.nan peptides_to_assign = peptides mask = None else: manifest_df = manifest_df.loc[manifest_df.col.isin(result_df.columns)] mask = (peptides.isin(result_df.index)).values peptides_to_assign = peptides[mask] print("Will load", len(peptides), "peptides and", len(manifest_df), "cols") for _, row in tqdm.tqdm(manifest_df.iterrows(), total=len(manifest_df)): with open(os.path.join(dirname, row.path), "rb") as fd: value = numpy.load(fd)['arr_0'] if mask is not None: value = value[mask] result_df.loc[peptides_to_assign, row.col] = value return result_df def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) configure_logging() serial_run = not args.cluster_parallelism and args.num_jobs == 0 alleles = [ normalize_allele_name(a, raise_on_error=False) for a in args.allele ] n_bad_alleles = sum([a is None for a in alleles]) if n_bad_alleles > 0: print("Dropping %d bad alleles" % n_bad_alleles) alleles = numpy.array(sorted({a for a in alleles if a})) peptides = pandas.read_csv( args.input_peptides, nrows=args.max_peptides).peptide.drop_duplicates() print("Filtering to valid peptides. Starting at: ", len(peptides)) peptides = peptides[peptides.str.match("^[ACDEFGHIKLMNPQRSTVWY]+$")] print("Filtered to: ", len(peptides)) peptides = peptides.unique() num_peptides = len(peptides) print("Predictions for %d alleles x %d peptides." % ( len(alleles), num_peptides)) if not os.path.exists(args.out): print("Creating", args.out) os.mkdir(args.out) GLOBAL_DATA["predictor"] = args.predictor GLOBAL_DATA["args"] = args GLOBAL_DATA["cols"] = PREDICTOR_TO_COLS[args.predictor] # Write peptide and allele lists to out dir. out_peptides = os.path.abspath(os.path.join(args.out, "peptides.csv")) pandas.DataFrame({"peptide": peptides}).to_csv(out_peptides, index=False) print("Wrote: ", out_peptides) manifest_df = [] for allele in alleles: for col in PREDICTOR_TO_COLS[args.predictor]: manifest_df.append((allele, col)) manifest_df = pandas.DataFrame( manifest_df, columns=["allele", "kind"]) manifest_df["col"] = ( manifest_df.allele + " " + manifest_df.kind) manifest_df["path"] = manifest_df.col.map( lambda s: s.replace("*", "").replace(" ", ".")) + ".npz" out_manifest = os.path.abspath(os.path.join(args.out, "alleles.csv")) manifest_df.to_csv(out_manifest, index=False) col_to_filename = manifest_df.set_index("col").path.map( lambda s: os.path.abspath(os.path.join(args.out, s))) print("Wrote: ", out_manifest) result_df = pandas.DataFrame( index=peptides, columns=manifest_df.col.values, dtype=args.result_dtype) result_df[:] = numpy.nan if args.reuse_predictions: # Allocating this here to hit any memory errors as early as possible. is_null_matrix = numpy.ones( shape=(result_df.shape[0], len(alleles)), dtype="int8") for dirname in args.reuse_predictions: if not dirname: continue # ignore empty strings if os.path.exists(dirname): print("Loading predictions", dirname) result_df = load_results( dirname, result_df, dtype=args.result_dtype) else: print("WARNING: skipping because does not exist", dirname) # We rerun any alleles that have nulls for any kind of values # (e.g. affinity, percentile rank, elution score). for (i, allele) in enumerate(alleles): sub_df = manifest_df.loc[manifest_df.allele == allele] is_null_matrix[:, i] = result_df[sub_df.col.values].isnull().any(1) print("Fraction null", is_null_matrix.mean()) print("Grouping peptides by alleles") allele_indices_to_peptides = collections.defaultdict(list) for (i, peptide) in tqdm.tqdm(enumerate(peptides), total=len(peptides)): (allele_indices,) = numpy.where(is_null_matrix[i]) if len(allele_indices) > 0: allele_indices_to_peptides[tuple(allele_indices)].append(peptide) del is_null_matrix work_items = [] print("Assigning peptides to work items.") for (indices, block_peptides) in allele_indices_to_peptides.items(): num_chunks = int(math.ceil(len(block_peptides) / args.chunk_size)) peptide_chunks = numpy.array_split(peptides, num_chunks) for chunk_peptides in peptide_chunks: work_items.append({ 'alleles': alleles[list(indices)], 'peptides': chunk_peptides, }) else: # Same number of chunks for all alleles num_chunks = int(math.ceil(len(peptides) / args.chunk_size)) print("Splitting peptides into %d chunks" % num_chunks) peptide_chunks = numpy.array_split(peptides, num_chunks) work_items = [] for (_, chunk_peptides) in enumerate(peptide_chunks): work_item = { 'alleles': alleles, 'peptides': chunk_peptides, } work_items.append(work_item) print("Work items: ", len(work_items)) for (i, work_item) in enumerate(work_items): work_item["work_item_num"] = i # Combine work items to form tasks. tasks = [] peptides_in_last_task = None # We sort work_items to put small items first so they get combined. for work_item in sorted(work_items, key=lambda d: len(d['peptides'])): if peptides_in_last_task is not None and ( len(work_item['peptides']) + peptides_in_last_task < args.chunk_size): # Add to last task. tasks[-1]['work_item_dicts'].append(work_item) peptides_in_last_task += len(work_item['peptides']) else: # New task tasks.append({'work_item_dicts': [work_item]}) peptides_in_last_task = len(work_item['peptides']) print("Collected %d work items into %d tasks" % ( len(work_items), len(tasks))) if args.predictor == "mhcflurry": do_predictions_function = do_predictions_mhcflurry else: do_predictions_function = do_predictions_mhctools worker_pool = None start = time.time() if serial_run: # Serial run print("Running in serial.") results = ( do_predictions_function(**task) for task in tasks) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=do_predictions_function, work_items=tasks, constant_data=GLOBAL_DATA, input_serialization_method="dill", result_serialization_method="pickle", clear_constant_data=True) else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None results = worker_pool.imap_unordered( partial(call_wrapped_kwargs, do_predictions_function), tasks, chunksize=1) allele_to_chunk_index_to_predictions = {} for allele in alleles: allele_to_chunk_index_to_predictions[allele] = {} def write_col(col): out_path = os.path.join( args.out, col_to_filename[col]) numpy.savez(out_path, result_df[col].values) print( "Wrote [%f%% null]:" % ( result_df[col].isnull().mean() * 100.0), out_path) print("Writing all columns.") last_write_time_per_column = {} for col in result_df.columns: write_col(col) last_write_time_per_column[col] = time.time() print("Done writing all columns. Reading results.") for worker_results in tqdm.tqdm(results, total=len(work_items)): for (work_item_num, col_to_predictions) in worker_results: for (col, predictions) in col_to_predictions.items(): result_df.loc[ work_items[work_item_num]['peptides'], col ] = predictions if time.time() - last_write_time_per_column[col] > 180: write_col(col) last_write_time_per_column[col] = time.time() print("Done processing. Final write for each column.") for col in result_df.columns: write_col(col) if worker_pool: worker_pool.close() worker_pool.join() prediction_time = time.time() - start print("Done generating predictions in %0.2f min." % ( prediction_time / 60.0)) def do_predictions_mhctools(work_item_dicts, constant_data=None): """ Each tuple of work items consists of: (work_item_num, peptides, alleles) """ # This may run on the cluster in a way that misses all top level imports, # so we have to re-import everything here. import time import numpy import pandas import numpy.testing import mhctools if constant_data is None: constant_data = GLOBAL_DATA cols = constant_data['cols'] predictor_name = constant_data['args'].predictor results = [] for (i, d) in enumerate(work_item_dicts): work_item_num = d['work_item_num'] peptides = d['peptides'] alleles = d['alleles'] print("Processing work item", i + 1, "of", len(work_item_dicts)) result = {} results.append((work_item_num, result)) if predictor_name == "netmhcpan4-ba": predictor = mhctools.NetMHCpan4( alleles=alleles, program_name="netMHCpan-4.0", mode="binding_affinity") elif predictor_name == "netmhcpan4-el": predictor = mhctools.NetMHCpan4( alleles=alleles, program_name="netMHCpan-4.0", mode="elution_score") elif predictor_name == "mixmhcpred": # Empirically determine supported alleles. mixmhcpred_usable_alleles = [] unusable_alleles = [] for allele in alleles: predictor = mhctools.MixMHCpred(alleles=[allele]) # We use inf not nan to indicate unsupported alleles since # we use nan to indicate incomplete results that still need # to execute. empty_results = pandas.Series(index=peptides, dtype=numpy.float16) empty_results[:] = float('-inf') try: predictor.predict_peptides_dataframe(["PEPTIDESS"]) mixmhcpred_usable_alleles.append(allele) except ValueError: unusable_alleles.append(allele) for col in cols: result["%s %s" % (allele, col)] = empty_results.values print("MixMHCpred usable alleles: ", *mixmhcpred_usable_alleles) print("MixMHCpred unusable alleles: ", *unusable_alleles) predictor = mhctools.MixMHCpred(alleles=mixmhcpred_usable_alleles) assert mixmhcpred_usable_alleles, mixmhcpred_usable_alleles else: raise ValueError("Unsupported", predictor_name) start = time.time() df = predictor.predict_peptides_dataframe(peptides) print("Predicted for %d peptides x %d alleles in %0.2f sec." % ( len(peptides), len(alleles), (time.time() - start))) for (allele, sub_df) in df.groupby("allele"): for col in cols: result["%s %s" % (allele, col)] = ( sub_df[col].values.astype( constant_data['args'].result_dtype)) return results def do_predictions_mhcflurry(work_item_dicts, constant_data=None): """ Each dict of work items should have keys: work_item_num, peptides, alleles """ # This may run on the cluster in a way that misses all top level imports, # so we have to re-import everything here. import time from mhcflurry.encodable_sequences import EncodableSequences from mhcflurry import Class1AffinityPredictor if constant_data is None: constant_data = GLOBAL_DATA args = constant_data['args'] assert args.predictor == "mhcflurry" assert constant_data['cols'] == ["affinity"] predictor = Class1AffinityPredictor.load(args.mhcflurry_models_dir) results = [] for (i, d) in enumerate(work_item_dicts): work_item_num = d['work_item_num'] peptides = d['peptides'] alleles = d['alleles'] print("Processing work item", i + 1, "of", len(work_item_dicts)) result = {} results.append((work_item_num, result)) start = time.time() peptides = EncodableSequences.create(peptides) for (i, allele) in enumerate(alleles): print("Processing allele %d / %d: %0.2f sec elapsed" % ( i + 1, len(alleles), time.time() - start)) for col in ["affinity"]: result["%s %s" % (allele, col)] = predictor.predict( peptides=peptides, allele=allele, throw=False, model_kwargs={ 'batch_size': args.mhcflurry_batch_size, }).astype(constant_data['args'].result_dtype) print("Done predicting in", time.time() - start, "sec") return results if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_predictions/write_allele_list.py ================================================ """ """ import sys import argparse import os import pandas import tqdm # progress bar tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "input", metavar="FILE.csv", help="CSV of annotated mass spec hits") parser.add_argument( "--out", metavar="OUT.txt", help="Out file path") def run(): args = parser.parse_args(sys.argv[1:]) df = pandas.read_csv(args.input) print("Read peptides", df.shape, *df.columns.tolist()) df = df.loc[df.mhc_class == "I"] hla_sets = df.hla.unique() all_hla = set() for hla_set in hla_sets: all_hla.update(hla_set.split()) all_hla = pandas.Series(sorted(all_hla)) all_hla.to_csv(args.out, index=False, header=False) print("Wrote [%d alleles]: %s" % (len(all_hla), os.path.abspath(args.out))) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_predictions/write_proteome_peptides.py ================================================ """ """ import sys import argparse import os import time import collections import re from six.moves import StringIO import pandas import tqdm # progress bar tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "input", metavar="FILE.csv", help="CSV of annotated mass spec hits") parser.add_argument( "reference_csv", metavar="FILE.csv", help="CSV of protein sequences") parser.add_argument( "--out", metavar="OUT.csv", help="Out file path") parser.add_argument( "--chromosome", metavar="CHR", nargs="+", help="Use only proteins from the specified chromosome(s)") parser.add_argument( "--debug-max-rows", metavar="N", type=int, default=None, help="Max rows to process. Useful for debugging. If specified an ipdb " "debugging session is also opened at the end of the script") parser.add_argument( "--lengths", metavar="N", type=int, nargs="+", default=[8,9,10,11], help="Peptide lengths") def run(): args = parser.parse_args(sys.argv[1:]) df_original = pandas.read_csv(args.input) df = df_original print("Read peptides", df.shape, *df.columns.tolist()) reference_df = pandas.read_csv(args.reference_csv, index_col=0) reference_df = reference_df.set_index("accession") print("Read proteins", reference_df.shape, *reference_df.columns.tolist()) print("Subselecting to MHC I hits. Before: ", len(df)) df = df.loc[df.mhc_class == "I"] print("After: ", len(df)) print("Subselecting to gene-associated hits. Before: ", len(df)) df = df.loc[~df.protein_ensembl_primary.isnull()] print("After: ", len(df)) if args.chromosome: print("Subselecting to chromosome(s): ", *args.chromosome) print("Before: ", len(df)) df = df.loc[df.protein_primary_ensembl_contig.isin(args.chromosome)] print("After: ", len(df)) (flanking_length,) = list( set(df.n_flank.str.len().unique()).union( set(df.n_flank.str.len().unique()))) print("Flanking length", flanking_length) proteins = df.protein_accession.unique() if args.debug_max_rows: proteins = proteins[:args.debug_max_rows] print("Writing decoys for %d proteins" % len(proteins)) reference_df = reference_df.loc[proteins] lengths = sorted(args.lengths) rows = [] total = len(reference_df) for (accession, info) in tqdm.tqdm(reference_df.iterrows(), total=total): seq = info.seq for start in range(0, len(seq) - min(args.lengths)): for length in lengths: end_pos = start + length if end_pos > len(seq): break n_flank = seq[ max(start - flanking_length, 0) : start ].rjust(flanking_length, 'X') c_flank = seq[ end_pos : (end_pos + flanking_length) ].ljust(flanking_length, 'X') peptide = seq[start : start + length] rows.append(( accession, peptide, n_flank, c_flank, start )) result_df = pandas.DataFrame( rows, columns=[ "protein_accession", "peptide", "n_flank", "c_flank", "start_position", ]) result_df.to_csv(args.out, index=False) print("Wrote: %s" % os.path.abspath(args.out)) if args.debug_max_rows: # Leave user in a debugger import ipdb ipdb.set_trace() if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_published/GENERATE.sh ================================================ #!/bin/bash # # Download published non-IEDB MHC I ligand data. Most data has made its way into # IEDB but not all. Here we gather up the rest. # # set -e set -x DOWNLOAD_NAME=data_published SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) date cd $SCRATCH_DIR/$DOWNLOAD_NAME ############################################ # BINDING AFFINITIES: class I ############################################ # # Kim et al 2014 [PMID 25017736] wget -q https://github.com/openvax/mhcflurry/releases/download/pre-1.1/bdata.2009.mhci.public.1.txt wget -q https://github.com/openvax/mhcflurry/releases/download/pre-1.1/bdata.20130222.mhci.public.1.txt wget -q https://github.com/openvax/mhcflurry/releases/download/pre-1.1/bdata.2013.mhci.public.blind.1.txt mkdir ms ############################################ # MS: Class I ############################################ # Bassani-Sternberg, ..., Gfeller PLOS Comp. Bio. 2017 [PMID 28832583] # The first dataset is from this work. The second dataset is originally from: # Pearson, ..., Perreault JCI 2016 [PMID 27841757] # but was reanalyzed in this work, and we download the reanalyzed version here. PMID=28832583 mkdir -p ms/$PMID wget -q https://doi.org/10.1371/journal.pcbi.1005725.s002 -P ms/$PMID # data generated in this work wget -q https://doi.org/10.1371/journal.pcbi.1005725.s003 -P ms/$PMID # data reanalyzed in this work cd ms/$PMID unzip *.s002 unzip *.s003 mkdir saved mv Dataset*/Dataset*.txt saved rm -rf Dataset* *.s002 *.s003 _* mv saved/* . rmdir saved cd ../.. # Bassani-Sternberg, ..., Mann Mol Cell Proteomics 2015 [PMID 25576301] PMID=25576301 mkdir -p ms/$PMID wget -q https://www.mcponline.org/highwire/filestream/35026/field_highwire_adjunct_files/7/mcp.M114.042812-4.xlsx -P ms/$PMID # Mommen, ..., Heck PNAS 2014 [PMID 24616531] PMID=24616531 mkdir -p ms/$PMID wget -q https://www.pnas.org/highwire/filestream/615485/field_highwire_adjunct_files/1/sd01.xlsx -P ms/$PMID # Gloger, ..., Neri Cancer Immunol Immunother 2016 [PMID 27600516] # Data extracted from supplemental PDF table. PMID=27600516 mkdir -p ms/$PMID wget -q https://github.com/openvax/mhcflurry/releases/download/pan-dev1/27600516.peptides.csv -P ms/$PMID # Ritz, ..., Fugmann Proteomics 2016 [PMID 26992070] # Supplemental zip downloaded from publication PMID=26992070 mkdir -p ms/$PMID wget -q https://github.com/openvax/mhcflurry/releases/download/pan-dev1/pmic12297-sup-0001-supinfo.zip -P ms/$PMID cd ms/$PMID unzip pmic12297-sup-0001-supinfo.zip cd ../.. # Shraibman, ..., Admon Mol Cell Proteomics 2016 [PMID 27412690] PMID=27412690 mkdir -p ms/$PMID wget -q https://www.mcponline.org/lookup/suppl/doi:10.1074/mcp.M116.060350/-/DC1/mcp.M116.060350-2.xlsx -P ms/$PMID # Pearson, ..., Perreault J Clin Invest 2016 [PMID 27841757] # Note: we do not use the original data from this publicaton, we use 28832583's reanalysis of it. # # Hassan, ..., van Veelen Mol Cell Proteomics 2015 [PMID 23481700] PMID=23481700 mkdir -p ms/$PMID wget -q https://www.mcponline.org/highwire/filestream/34681/field_highwire_adjunct_files/1/mcp.M112.024810-2.xls -P ms/$PMID # Shraibman, ..., Admon Mol Cell Proteomics 2019 [PMID 31154438] PMID=31154438 mkdir -p ms/$PMID wget -q https://www.mcponline.org/highwire/filestream/51948/field_highwire_adjunct_files/3/zjw006195963st2.txt -P ms/$PMID wget -q https://www.mcponline.org/highwire/filestream/51948/field_highwire_adjunct_files/1/zjw006195963st1.xlsx -P ms/$PMID # Bassani-Sternberg, ..., Krackhardt Nature Comm. 2016 [PMID 27869121] PMID=27869121 mkdir -p ms/$PMID wget -q "https://static-content.springer.com/esm/art%3A10.1038%2Fncomms13404/MediaObjects/41467_2016_BFncomms13404_MOESM1318_ESM.xlsx" -P ms/$PMID # Sarkizova, ..., Keskin Nature Biotechnology 2019 [PMID 31844290] PMID=31844290 mkdir -p ms/$PMID # Monoallelic: wget -q "https://static-content.springer.com/esm/art%3A10.1038%2Fs41587-019-0322-9/MediaObjects/41587_2019_322_MOESM3_ESM.xlsx" -P ms/$PMID # Multiallelic: wget -q "https://static-content.springer.com/esm/art%3A10.1038%2Fs41587-019-0322-9/MediaObjects/41587_2019_322_MOESM4_ESM.xlsx" -P ms/$PMID ############################################ # MS: Class II ############################################ # Abelin, ..., Rooney Immunity 2019 [PMID 31495665] PMID=31495665 mkdir -p ms/$PMID wget -q https://ars.els-cdn.com/content/image/1-s2.0-S1074761319303632-mmc2.xlsx -P ms/$PMID ############################################ # RNA-seq expression data (TPMs) ############################################ # CCLE as processed by expression atlas DATASET=expression-atlas-22460905 mkdir -p expression/$DATASET wget -q https://www.ebi.ac.uk/gxa/experiments-content/E-MTAB-2770/resources/ExperimentDownloadSupplier.RnaSeqBaseline/tpms.tsv -P expression/$DATASET # Human protein atlas DATASET=human-protein-atlas mkdir -p expression/$DATASET cd expression/$DATASET wget -q https://www.proteinatlas.org/download/rna_celline.tsv.zip wget -q https://www.proteinatlas.org/download/rna_blood_cell_sample_tpm_m.tsv.zip wget -q https://www.proteinatlas.org/download/rna_tissue_gtex.tsv.zip for i in $(ls *.zip) do unzip $i rm $i done cd ../.. # Melanoma. Original publication # Barry, ..., Krummel Nature Medicine 2018 [PMID 29942093]. DATASET=GSE113126 mkdir -p expression/$DATASET cd expression/$DATASET wget -q "https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE113126&format=file" -O GSE113126_RAW.tar tar -xvf GSE113126_RAW.tar rm GSE113126_RAW.tar cd ../.. ############################################ # T cell epitopes: class I ############################################ # # Koşaloğlu-Yalçın, ..., Peters. Oncoimmunology 2018 [PMID 30377561] # PMID=30377561 mkdir -p epitopes/$PMID wget -q https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6204999/bin/koni-07-11-1492508-s001.zip -P epitopes/$PMID cd epitopes/$PMID unzip *.zip rm -f *.jpg cd ../.. cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/data_published/README.md ================================================ # Published datasets These datasets are derived from publications and do not change. To generate this download run: ``` ./GENERATE.sh ``` This download contains the BD2009, BD2013, and BLIND datasets from [Dataset size and composition impact the reliability of performance benchmarks for peptide-MHC binding predictions](http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-15-241). BD2013 (augmented with more recent data from IEDB) are used to train the production MHCflurry models. BD2009 and BLIND are useful for performing validation on held-out data. The other published data sets correspond to the publications indicated in GENERATE.sh. ================================================ FILE: downloads-generation/data_references/GENERATE.sh ================================================ #!/bin/bash # # # set -e set -x DOWNLOAD_NAME=data_references SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) date cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/process.py . ############################################ # UNIPROT ############################################ # wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606.fasta.gz wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606.gene2acc.gz wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606.idmapping.gz wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606_DNA.fasta.gz wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606_DNA.miss.gz wget -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/Eukaryota/UP000005640_9606_additional.fasta.gz wget -q ftp://ftp.ensembl.org/pub/release-98/gtf/homo_sapiens/Homo_sapiens.GRCh38.98.gtf.gz python process.py \ UP000005640_9606.fasta.gz UP000005640_9606_additional.fasta.gz \ --id-mapping UP000005640_9606.idmapping.gz \ --ensembl-gtf Homo_sapiens.GRCh38.98.gtf.gz \ --out-csv uniprot_proteins.csv \ --out-index uniprot_proteins.fm ls -lh uniprot_proteins.csv uniprot_proteins.fm bzip2 uniprot_proteins.csv cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/data_references/README.md ================================================ # data_mass_spec_annotated On OS X, if you encounter problem installing shellinford, try this: ``` CXXFLAGS="-stdlib=libc++" CPPFLAGS="-stdlib=libc++" pip install shellinford ``` ================================================ FILE: downloads-generation/data_references/process.py ================================================ """ """ import sys import argparse import os import gzip import pandas import gtfparse import shellinford from Bio import SeqIO parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "input_paths", nargs="+", help="Fasta files to process") parser.add_argument( "--out-csv", required=True, metavar="FILE.csv", help="CSV output") parser.add_argument( "--out-index", required=True, metavar="FILE.fm", help="Index output") parser.add_argument( "--id-mapping", required=True, metavar="FILE.idmapping.gz", help="Uniprot mapping file") parser.add_argument( "--ensembl-gtf", required=True, metavar="FILE.gtf.gz", help="Ensembl GTF file") def run(): args = parser.parse_args(sys.argv[1:]) fm = shellinford.FMIndex() df = [] for f in args.input_paths: print("Processing", f) with gzip.open(f, "rt") as fd: records = SeqIO.parse(fd, format='fasta') for (i, record) in enumerate(records): seq = str(record.seq).upper() df.append((record.name, record.description, seq)) fm.push_back("$" + seq + "$") # include sentinels df = pandas.DataFrame(df, columns=["name", "description", "seq"]) print("Done reading fastas") print(df) pieces = df.name.str.split("|") df["db"] = pieces.str.get(0) df["accession"] = pieces.str.get(1) df["entry"] = pieces.str.get(2) print("Annotating using mapping", args.id_mapping) mapping_df = pandas.read_csv( args.id_mapping, sep="\t", header=None) mapping_df.columns = ['accession', 'key', 'value'] for item in ["Ensembl", "Ensembl_TRS", "Gene_Name"]: accession_to_values = mapping_df.loc[ mapping_df.key == item ].groupby("accession").value.unique().map(" ".join) df[item.lower()] = df.accession.map(accession_to_values) print("Annotating using gtf", args.ensembl_gtf) gtf_df = gtfparse.read_gtf(args.ensembl_gtf) matching_ensembl_genes = set(gtf_df.gene_id.unique()) ensembl_primary = [] for ensembls in df.ensembl.fillna("").str.split(): result = "" for item in ensembls: if item in matching_ensembl_genes: result = item break ensembl_primary.append(result) df["ensembl_primary"] = ensembl_primary print("Fraction of records with matching ensembl genes", ( df.ensembl_primary != "").mean()) gene_records = gtf_df.loc[gtf_df.feature == "gene"].set_index("gene_id") df["primary_ensembl_contig"] = df.ensembl_primary.map(gene_records.seqname) df["primary_ensembl_start"] = df.ensembl_primary.map(gene_records.start) df["primary_ensembl_end"] = df.ensembl_primary.map(gene_records.end) df["primary_ensembl_strand"] = df.ensembl_primary.map(gene_records.strand) print("Done annotating") print(df) df.to_csv(args.out_csv, index=True) print("Wrote: ", os.path.abspath((args.out_csv))) print("Building index") fm.build() fm.write(args.out_index) print("Wrote: ", os.path.abspath((args.out_index))) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/data_references/requirements.txt ================================================ shellinford biopython gtfparse ================================================ FILE: downloads-generation/data_systemhcatlas/GENERATE.sh ================================================ #!/bin/bash # # Download some published MHC I ligands identified by mass-spec # # set -e set -x DOWNLOAD_NAME=data_systemhcatlas SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze # git rev-parse HEAD git status cd $SCRATCH_DIR/$DOWNLOAD_NAME wget -q https://systemhcatlas.org/Builds_for_download/180409_master_final.tgz mkdir extracted tar -xvzf *.tgz -C extracted wc -l extracted/*/*.csv # Write header line cat extracted/*/*.csv | head -n 1 > data.csv # Write concatenated data grep -v SysteMHC_ID extracted/*/*.csv >> data.csv # Cleanup rm -rf extracted *.tgz ls -lh data.csv wc -l data.csv bzip2 data.csv cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/data_systemhcatlas/README.md ================================================ # SysteMHC database dump This is a database export of the [SysteMHC Atlas](https://systemhcatlas.org/) downloaded from [here](https://systemhcatlas.org/Builds_for_download/). It is distributed under the ODC Open Database License. To generate this download run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/models_class1/GENERATE.sh ================================================ #!/bin/bash # # Model select standard MHCflurry Class I models. # set -e set -x DOWNLOAD_NAME=models_class1 SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/write_validation_data.py . mkdir models GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" python ./write_validation_data.py \ --include "$(mhcflurry-downloads path data_curated)/curated_training_data.with_mass_spec.csv.bz2" \ --exclude "$(mhcflurry-downloads path models_class1_unselected)/models/train_data.csv.bz2" \ --only-alleles-present-in-exclude \ --out-data test.csv \ --out-summary test.summary.csv wc -l test.csv time mhcflurry-class1-select-allele-specific-models \ --data test.csv \ --models-dir "$(mhcflurry-downloads path models_class1_unselected)/models" \ --out-models-dir models \ --scoring combined:mass-spec,mse,consensus \ --consensus-num-peptides-per-length 10000 \ --combined-min-models 8 \ --combined-max-models 16 \ --unselected-accuracy-scorer combined:mass-spec,mse \ --unselected-accuracy-percentile-threshold 95 \ --mass-spec-min-measurements 500 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 1 time mhcflurry-calibrate-percentile-ranks \ --models-dir models \ --num-peptides-per-length 100000 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1/README.md ================================================ # Class I allele-specific models (ensemble) This download contains trained MHC Class I MHCflurry models. To generate this download run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/models_class1/write_validation_data.py ================================================ """ Write and summarize model validation data, which is obtained by taking a full dataset and removing the data used for training. """ import argparse import sys from os.path import abspath import pandas import numpy from sklearn.model_selection import StratifiedKFold parser = argparse.ArgumentParser(usage = __doc__) parser.add_argument( "--include", metavar="INPUT.csv", nargs="+", help="Input CSV to include") parser.add_argument( "--exclude", metavar="INPUT.csv", nargs="+", help="Input CSV to exclude") parser.add_argument( "--out-data", metavar="RESULT.csv", help="Output dadta CSV") parser.add_argument( "--out-summary", metavar="RESULT.csv", help="Output summary CSV") parser.add_argument( "--mass-spec-regex", metavar="REGEX", default="mass[- ]spec", help="Regular expression for mass-spec data. Runs on measurement_source col." "Default: %(default)s.") parser.add_argument( "--only-alleles-present-in-exclude", action="store_true", default=False, help="Filter to only alleles that are present in files given by --exclude. " "Useful for filtering to only alleles supported by a predictor, where the " "training data for the predictor is given by --exclude.") def run(argv): args = parser.parse_args(argv) dfs = [] for input in args.include: df = pandas.read_csv(input) dfs.append(df) df = pandas.concat(dfs, ignore_index=True) print("Loaded data with shape: %s" % str(df.shape)) del dfs df = df.ix[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) if args.exclude: exclude_dfs = [] for exclude in args.exclude: exclude_df = pandas.read_csv(exclude) exclude_dfs.append(exclude_df) exclude_df = pandas.concat(exclude_dfs, ignore_index=True) del exclude_dfs df["_key"] = df.allele + "__" + df.peptide exclude_df["_key"] = exclude_df.allele + "__" + exclude_df.peptide df["_excluded"] = df._key.isin(exclude_df._key.unique()) print("Excluding measurements per allele (counts): ") print(df.groupby("allele")._excluded.sum()) print("Excluding measurements per allele (fractions): ") print(df.groupby("allele")._excluded.mean()) df = df.loc[~df._excluded] del df["_excluded"] del df["_key"] if args.only_alleles_present_in_exclude: df = df.loc[df.allele.isin(exclude_df.allele.unique())] df["mass_spec"] = df.measurement_source.str.contains(args.mass_spec_regex) df.loc[df.mass_spec , "measurement_inequality"] = "mass_spec" if args.out_summary: summary_df = df.groupby( ["allele", "measurement_inequality"] )["measurement_value"].count().unstack().fillna(0).astype(int) summary_df["total"] = summary_df.sum(1) summary_df.to_csv(args.out_summary) print("Wrote: %s" % args.out_summary) if args.out_data: df.to_csv(args.out_data, index=False) print("Wrote: %s" % args.out_data) if __name__ == '__main__': run(sys.argv[1:]) ================================================ FILE: downloads-generation/models_class1_kim_benchmark/GENERATE.sh ================================================ #!/bin/bash # set -x DOWNLOAD_NAME=models_class1_kim_benchmark SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/curate.py . cp $SCRIPT_DIR/write_validation_data.py . time python curate.py \ --data-kim2014 \ "$(mhcflurry-downloads path data_published)/bdata.2009.mhci.public.1.txt" \ --out-csv train.csv bzip2 train.csv mkdir models cp $SCRIPT_DIR/class1_pseudosequences.csv . python $SCRIPT_DIR/generate_hyperparameters.py > hyperparameters.yaml GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" time mhcflurry-class1-train-allele-specific-models \ --data "train.csv.bz2" \ --allele-sequences class1_pseudosequences.csv \ --hyperparameters hyperparameters.yaml \ --out-models-dir models \ --held-out-fraction-reciprocal 10 \ --min-measurements-per-allele 20 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 time python ./write_validation_data.py \ --include "train.csv.bz2" \ --exclude "models/train_data.csv.bz2" \ --only-alleles-present-in-exclude \ --out-data test.csv \ --out-summary test.summary.csv wc -l test.csv mkdir selected-models time mhcflurry-class1-select-allele-specific-models \ --data test.csv \ --models-dir models \ --out-models-dir selected-models \ --scoring combined:mse,consensus \ --consensus-num-peptides-per-length 10000 \ --combined-min-models 8 \ --combined-max-models 16 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 5 time mhcflurry-calibrate-percentile-ranks \ --models-dir selected-models \ --num-peptides-per-length 100000 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_kim_benchmark/README.md ================================================ # Kim benchmark This download trains MHCflurry predictors using the BD2009 dataset from [Dataset size and composition impact the reliability of performance benchmarks for peptide-MHC binding predictions](http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-15-241). The trained predictor can be evaluated on the BLIND test set from this publication. We include this download as a resource for others wishing to benchmark new binding predictors. It's also a working example of a complete MHCflurry training and model selection run on a simple dataset. See [GENERATE.sh](./GENERATE.sh). ================================================ FILE: downloads-generation/models_class1_kim_benchmark/class1_pseudosequences.csv ================================================ allele,pseudosequence HLA-A*01:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:02,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:03,YFAMYQENMAHTDANTLYIMYRDYTWVARVYRGY HLA-A*01:06,YFAMYQENMAHTDANTLYIIYRDYTWVALAYRGY HLA-A*01:07,YFAMYQENVAHTDENTLYIIYRDYTWVARVYRGY HLA-A*01:08,YFAMYQENMAHTDANTLYIIYRDYTWVARVYWGY HLA-A*01:09,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:10,YFAMYQENMAHTDANTLYIIYRDYTWARRVYRGY HLA-A*01:12,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:13,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:14,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTGY HLA-A*01:17,YFAMYQENMAQTDANTLYIIYRDYTWVARVYRGY HLA-A*01:19,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:20,YSAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*01:21,YFAMYQENMAHTDANTLYIIYRDYTWAVRVYRGY HLA-A*01:23,YFAMYQENVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:24,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:25,YFAMYQENMAHTDANTLYIIYRDYTWVAQVYRGY HLA-A*01:26,YFAMYQENMAHTDANTLYIIYRDYTWAARVYRGY HLA-A*01:28,YFAMYQENMAHTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:29,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:30,YFAMYQENMAHTDANTLYIIYHYYTWVARVYRGY HLA-A*01:32,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:33,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:35,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:36,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:37,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:38,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:39,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:40,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:41,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:42,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:43,YYAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:44,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:45,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:46,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:47,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:48,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:49,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:50,YFAMYQENMAHTDANTLYIIYREYTWVARVYRGY HLA-A*01:51,YFAMYRNNVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:54,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:55,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:58,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:59,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:60,YFAMYPENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:61,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:62,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:63,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:64,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:65,YFAMYQENMAHTDANTLYIIYRDYTWVARVCRGY HLA-A*01:66,YFAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*02:01,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:02,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:03,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:04,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A*02:05,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:06,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:07,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:08,YYAMYGENVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:09,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:10,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:11,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:12,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:13,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A*02:14,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:16,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:17,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:18,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:19,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:20,YFAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:21,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:22,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:24,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:25,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:26,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:27,YFAMYGEKVAHTHVDTLYVRYHYYTWAAQAYTWY HLA-A*02:28,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:29,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:30,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:31,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:33,YFAMYGEKVAHTHVDTLYVRSHYYTWAVLAYTWY HLA-A*02:34,YFAMYGEKVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:35,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:36,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTGY HLA-A*02:37,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:38,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYRWY HLA-A*02:39,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:40,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:41,YYAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A*02:42,YFSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:44,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:45,YFAMYQEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:46,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:47,YFAMYGEKVAHSHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:48,YFAMYEEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:49,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A*02:50,YFAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:51,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:52,YFAMYGEKVAHTHVDTLYVRYEHYTWAVLAYTWY HLA-A*02:54,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:55,YFAMYRNNVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:56,YFAMYQENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:57,YYAMYGEKVAHTHVDTLYLMYHYYTWAVLAYTWY HLA-A*02:58,YFAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:59,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:60,YFAMYGEKVAHTHVDTLYVRYHFYTWAVLAYTWY HLA-A*02:61,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:62,YFAMYGENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:63,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:64,YFAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:65,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:66,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:67,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:68,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:69,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:70,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:71,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:72,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:73,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:74,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:75,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:76,YSAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:77,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:78,YYAMYQENVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:79,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:80,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A*02:81,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:84,YYAMYGEKVAHTHVDTLYFRYHYYTWAVLAYTWY HLA-A*02:85,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:86,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:87,YFAMYGEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:89,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:90,YFAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:91,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:92,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:93,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:95,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:96,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:97,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:99,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:101,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYRWY HLA-A*02:102,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:103,YFAMYQENVAQTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:104,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:105,YFAMYGEKVAHTHVDTLYVRYEYYTWAVLAYTWY HLA-A*02:106,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:107,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:108,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:109,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:110,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:111,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:112,YFAMYGEKVAHTDENIAYVRCHYYTWAVLAYTWY HLA-A*02:114,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:115,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:116,YFAMYGEKVAHTHLDTLYVRYHYYTWAVLAYTWY HLA-A*02:117,YFAMYGEKVAHTHVDTLYVRYQDYTWAEWAYTWY HLA-A*02:118,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:119,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:120,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:121,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:122,YYAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:123,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:124,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:126,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:127,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:128,YFAMYGENVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:129,YYAMYEEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:130,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:131,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:132,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:133,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:134,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:135,YFAMYGEKVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*02:136,YFAMYGEKVAHTDENIAYVRYHYYTWAVWAYTWY HLA-A*02:137,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:138,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:139,YFAMYGEKVTHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:140,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:141,YFVMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:142,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:143,YYAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:144,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:145,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:146,YFAMYGEKVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A*02:147,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:148,YFAMYGEKVAHTHVDTLYVRFHYYTWAEWAYTWY HLA-A*02:149,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:150,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:151,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:152,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:153,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:154,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYRWY HLA-A*02:155,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:156,YFAMYGEKVAHTHVDTLYIIYHYYTWAVLAYTWY HLA-A*02:157,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:158,YFAMYGEKVAHAHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:159,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:160,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:161,YFAVYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:162,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:163,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:164,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:165,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:166,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:167,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:168,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:169,YYAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:170,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:171,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:172,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:173,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:174,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:175,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:176,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:177,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:178,YYAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:179,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:180,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:181,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:182,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:183,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:184,YFAMYGEKVAHTHEDTLYVRYHYYTWAVLAYTWY HLA-A*02:185,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:186,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:187,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:188,YFAMYGEKVAHTHVDTLYVRYDSYTWAVLAYTWY HLA-A*02:189,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:190,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:191,YFAMYGEKVAHTHVDTLYVRCHYYTWAVWAYTWY HLA-A*02:192,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:193,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:194,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:195,YFAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:196,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:197,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:198,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:199,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:200,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:202,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:203,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:204,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:205,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:206,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:207,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:208,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:209,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:210,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:211,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:212,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:213,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:214,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:215,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:216,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:217,YFAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:218,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:219,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:220,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:221,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:224,YFAMYGEKVAHTHVDTLYVGYHYYTWAVLAYTWY HLA-A*02:228,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:229,YYAMYGEKVAHTHVDTLYLRYRYYTWAVWAYTWY HLA-A*02:230,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:231,YFAMYGEKVAHTHVDTLYVRNHYYTWAVLAYTWY HLA-A*02:232,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:233,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTRY HLA-A*02:234,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:235,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:236,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:237,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:238,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:239,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:240,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:241,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:242,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:243,YTAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:244,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:245,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:246,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:247,YFAMYGEKVAHTDENTLYVRYHYYTWAVLAYTWY HLA-A*02:248,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:249,YFAMYVEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:251,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:252,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:253,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:254,YFAMYGEKVAHTHVDTLYVRYNFYTWAVLAYTWY HLA-A*02:255,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTGY HLA-A*02:256,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:257,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:258,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:259,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:260,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:261,YFAMYGEKVAHTHMDTLYVRCHYYTWAVLAYTWY HLA-A*02:262,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLVYTWY HLA-A*02:263,YFAMYGEKVAHTHVDTLYVRYHYYTWSVLAYTWY HLA-A*02:264,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:265,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:266,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*03:01,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:02,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:04,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:05,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:06,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:07,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:08,YFAMYQENVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:09,YFAMYQENVAQTHVDTLYIIYRDYTWAELAYTWY HLA-A*03:10,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:12,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:13,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:14,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:15,YFAMYQENVAQTDVDTLYIIFRDYTWAELAYTWY HLA-A*03:16,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:17,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:18,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*03:19,YFAMYQENVAQTDVDTLYIIFHYYTWAELAYTWY HLA-A*03:20,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:22,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:23,YFAMYGEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:24,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:25,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:26,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:27,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:28,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:29,YFAMYQENVVQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:30,YFAMYEEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:31,YFAMYQENVAQTDVDTLYIIYRYYTWAVQAYTWY HLA-A*03:32,YFAMYQENVAHIDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:33,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:34,YFAMYQENVAPTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:35,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:37,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:38,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:39,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:40,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:41,YFAMYQENVAHTDANTLYIIYRDYTWAELAYTWY HLA-A*03:42,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:43,YFAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A*03:44,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:45,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:46,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:47,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:48,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:49,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:50,YFAMYQENVAQTDVDTLYIIYRDYTWAEWAYTWY HLA-A*03:51,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:52,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:53,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:54,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:55,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:56,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:57,YFAMYQENVAQTDANTLYIIYRDYTWAELAYTWY HLA-A*03:58,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:59,CFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:60,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:61,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:62,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:63,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:64,YFAMYQENVAQTDVDTLYIIYRDYTWADLAYTWY HLA-A*03:65,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTWY HLA-A*03:66,YFAMYQENVAQTDVDTLYIIYRDYTWAERAYTWY HLA-A*03:67,YFATYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:70,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:71,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:72,YSAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:73,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:74,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:75,YFAMYQENVAQTDVDTLYLMYRDYTWAELAYTWY HLA-A*03:76,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:77,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:78,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:79,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:80,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:81,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:82,YFAMYQENVAQTDVDTLYIIYEHYTWAVQAYTWY HLA-A*11:01,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:02,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:03,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:04,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A*11:05,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:06,YYAMYQENVAQTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:07,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:08,YYAMYQENVAQTDVDTLYIIYRDYTWAERAYRWY HLA-A*11:09,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:10,YYAMYRNNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:11,YYAMYLQNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:12,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:13,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:14,YYAMYQENVAQTDVDTLYIIYRDYTWARQAYRWY HLA-A*11:15,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:16,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:17,YYAMYQENMAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:18,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:19,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:20,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:22,YYAMYQENVAQTDVDTLYIIYPDYTWAAQAYRWY HLA-A*11:23,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:24,YYAMYQENVAQTDVDTLYIIYRDYTWAALAYRWY HLA-A*11:25,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A*11:26,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A*11:27,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTGY HLA-A*11:29,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:30,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:31,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A*11:32,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:33,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:34,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:35,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*11:36,YYAMYQENVAQTDVDTLYIICRDYTWAAQAYRWY HLA-A*11:37,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:38,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:39,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:40,YYAMYQENVAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:41,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:42,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:43,YTAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:44,YYAMYQENVAQTDVDTLYIIYRDYTWAARAYRWY HLA-A*11:45,YYAMYQENVAQTDADTLYIIYRDYTWAAQAYRWY HLA-A*11:46,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:47,YHAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:48,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:49,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:51,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:53,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:54,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:55,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:56,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:57,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:58,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:59,YYAMYQENVAQTDVDTLYIIYGDYTWAAQAYRWY HLA-A*11:60,YYAMYQENVAQTDVDTLYIIYRDYTWAVQAYRWY HLA-A*11:61,YYAMYQENAAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:62,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:63,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:64,YYAMYQENVAQTDVDTLHIIYRDYTWAAQAYRWY HLA-A*23:01,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*23:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:04,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*23:05,CSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:09,YSAMYQENMAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYRGY HLA-A*23:12,YSAMYEEKVAHTHENIAYLMFHYYTWAVLAYTGY HLA-A*23:13,YSAMYEEKVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:14,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:15,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:16,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:17,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:18,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:24,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:25,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:04,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:05,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*24:07,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:08,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A*24:13,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:14,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A*24:15,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:17,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:18,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTWY HLA-A*24:19,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVWVYTWY HLA-A*24:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:24,YSAMYRNNVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:25,CSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:27,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:28,YSAMYEEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:29,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:30,YSAMYEEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:31,YSAMYEQKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:32,YSAMYEEKVAHTDESIAYLMFHYYTWAVQAYTGY HLA-A*24:33,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:34,YSAMYEEKVAHIDENIAYLMFHYYTWAVQAYTGY HLA-A*24:35,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:37,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:38,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:39,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:41,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:42,YSAMYGEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:43,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:44,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:46,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRGY HLA-A*24:47,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:49,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:50,YYAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:51,YSAMYEEKVAHTDENIAYLIYHYYTWAVQAYTGY HLA-A*24:52,YSAMYEEKVAHTDENIAYLRFHYYTWAVQAYTGY HLA-A*24:53,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:54,YSAMYEEKVAHTDENIAYLMFHYYTWAVQPYTGY HLA-A*24:55,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEGY HLA-A*24:56,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A*24:57,YSAMYEEKVAHTDENIAYIMYHYYTWAVQAYTGY HLA-A*24:58,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:59,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A*24:61,YSAMYEEKVAHTDEKIAYLMFHYYTWAVQAYTGY HLA-A*24:62,YSAMYEEKVAHTDENIAYLMFQDYTWAVQAYTGY HLA-A*24:63,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:64,YSAMYEEKVAHTDENIAYLWIHYYTWAVQAYTGY HLA-A*24:66,YSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A*24:67,YSAMYRNNVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:68,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:69,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:70,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:71,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:72,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:73,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A*24:74,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:75,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:76,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:77,YSAMYQEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:78,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:79,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:80,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:81,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:82,YTAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:85,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:87,YSAMYEEKVAHTDENIAYLMFHYYTWAVRAYTGY HLA-A*24:88,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:89,YSAMYGEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:91,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:92,YSAMYEEKVAHTDENIAYIIYHYYTWAVQAYTGY HLA-A*24:93,YSAMYEEKVAHTDENIAYVMFHYYTWAVQAYTGY HLA-A*24:94,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*24:95,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:96,YSAMYEEKVAHTDENIAYLMFNFYTWAVQAYTGY HLA-A*24:97,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:98,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:99,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:100,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:101,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:102,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:103,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:104,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:105,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:106,YSAMYEEKVAHTDENIAYLMFDDYTWAVQAYTGY HLA-A*24:107,YSAMYEEKVAHTDENIAYLMFHYYTWAVHAYTGY HLA-A*24:108,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:109,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:110,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:111,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:112,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:113,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:114,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:115,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:116,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:117,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:118,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:119,YSAMYEEKVAHADENIAYLMFHYYTWAVQAYTGY HLA-A*24:120,YSAMYEEKVAHTDENIAYIMFHYYTWAVQAYTGY HLA-A*24:121,YSAMYEEKVAHTDENIAYLMFHSYTWAVQAYTGY HLA-A*24:122,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:123,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:124,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:125,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:126,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:127,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:128,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:129,YSAMYQENMAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:130,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:131,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:133,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:134,YSAMYEEKVAHTDENIAYLMFHYYPWAVQAYTGY HLA-A*24:135,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:136,YSAMYEEKVAHTDENIAYLMFHYYTWVVQAYTGY HLA-A*24:137,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:138,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTWY HLA-A*24:139,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:140,YSTMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:141,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:142,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:143,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYLGY HLA-A*24:144,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*25:01,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:02,YYAMYRNNVAQTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:03,YFAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:04,YYAMYRNNVAHTDESIAYIRYQDYTWAEQAYRWY HLA-A*25:05,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:06,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTWY HLA-A*25:07,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:08,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:09,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:10,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:11,YYAMYRNNVAHTHESIAYIRYQDYTWAEWAYRWY HLA-A*25:13,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*26:01,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:02,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A*26:03,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:04,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYLWY HLA-A*26:05,YYAMYRNNVAHTDENTLYIRYQDYTWAEWAYRWY HLA-A*26:06,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:07,YYAMYGEKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:08,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:09,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYTWY HLA-A*26:10,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:12,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:13,YYAMYRNNVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:14,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:15,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:16,YSAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:17,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:18,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:19,YYAMYQENVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:20,YFAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:21,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:22,YYAMYRNNVAHTDANTLYVRYQDYTWAEWAYRWY HLA-A*26:23,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:24,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:26,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:27,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:28,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:29,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:30,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:31,YYAMYPNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:32,YYAMYRNNVAHTDANTLYMVYQDYTWAEWAYRWY HLA-A*26:33,YYAMYRNNVAQIHANTLYIRYQDYTWAEWAYRWY HLA-A*26:34,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYWWY HLA-A*26:35,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:36,YYAMYRNNVAHTHANTLYIRYQDYTWAEWAYRWY HLA-A*26:37,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:38,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:39,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:40,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:41,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:42,YYAIYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:43,YYAMYRNNVAHTDANTLYIRYQDYTWAELAYRWY HLA-A*26:45,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:46,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:47,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:48,YYAMYRNKVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:49,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:50,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*29:01,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:02,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:03,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTGY HLA-A*29:04,YTAMYLQHVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:05,YTAMYLQNVAQTDANTLYIMYRDYTWAEQAYTWY HLA-A*29:06,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:07,YTAMYLQNVAQTDANTLYLMFRDYTWAVLAYTWY HLA-A*29:09,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:10,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:11,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:12,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:13,YTAMYLQNVAQTDESIAYIMYRDYTWAVLAYTWY HLA-A*29:14,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:15,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:16,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:17,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:18,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:19,YTAMYLQNVAHTHVDTLYIMYRDYTWAVLAYTWY HLA-A*29:20,YTAMYLQNVAHTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:21,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:22,YTAMYLQNVAQTDANTLYVRYRDYTWAVLAYTWY HLA-A*30:01,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:02,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:03,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:04,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:06,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:07,YSAMYEEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:08,YYAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:09,YSAMYQENVAHTDENTLYIIYEHYTWAVLAYTWY HLA-A*30:10,YSAMYQENVAHTDENTLYIIHEHYTWARLAYTWY HLA-A*30:11,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:12,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:13,YSAMYQENVAHTHVDTLYIIYEHYTWARLAYTWY HLA-A*30:15,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:16,YSAMYQENVAQTHVDTLYIIYEHYTWAWLAYTWY HLA-A*30:17,YSAMYQENVAQTDVDTLYIIYEHYTWAVWAYTWY HLA-A*30:18,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:19,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:20,YSAMYQENVAQTEVDTLYIIYEHYTWAWLAYTWY HLA-A*30:22,YSAMYGEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:23,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:24,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:25,YSAMYQENVAQTDENTLYIIYEHYTWARLAYTWY HLA-A*30:26,YSAMYQENVAQTDVDTLYIIYRDYTWAWLAYTWY HLA-A*30:28,YSAMYQENVAHTDENTLYIVYEHYTWARLAYTWY HLA-A*30:29,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTSY HLA-A*30:30,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:31,YSAMYQENVARTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:32,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:33,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:34,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:35,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:36,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:37,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:38,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:39,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:40,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:41,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*31:01,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:02,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:03,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:04,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:05,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*31:06,YTAMYQENVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*31:07,YTAMYQEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:08,YTAMYEEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:09,YTAMYQENVGHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:10,YTAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:11,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:12,YTAMYQENVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A*31:13,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:15,YTAMYQENVARIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:16,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:17,YTAMYQENVAHINVDTLYIMYQDYTWAVLAYTWY HLA-A*31:18,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A*31:19,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:20,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:21,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:22,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:23,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:24,YTAMYQENVAHIDVDTLYIMYQDYTWAAQAYRWY HLA-A*31:25,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYRWY HLA-A*31:26,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:27,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:28,YTAMYQENVTHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:29,YTAMYQENVAHIDVDTLYLMFQDYTWAVLAYTWY HLA-A*31:30,YTAMYQENVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A*31:31,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:32,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:33,YTAMYQENVAHIDGDTLYIMYQDYTWAVLAYTWY HLA-A*31:34,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:35,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:36,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:37,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*32:01,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:02,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:03,YFAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*32:04,YFAMYQENVAHTDESIAYIIYRDYTWAELAYTWY HLA-A*32:05,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:06,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:07,YSAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:08,YFAMYQENVAHTHESIAYIMYQDYTWAVLAYTWY HLA-A*32:09,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTRY HLA-A*32:10,YFAMYQENVAHTDESIAYIMYQDYTWAEWAYTWY HLA-A*32:12,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:13,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTGY HLA-A*32:14,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:15,YFAMYRNNVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:16,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:17,YFAMYQENVAQTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:18,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:20,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:21,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:22,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:23,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:24,YFAMYQENMAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:25,YFAMYHENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*33:01,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:03,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:04,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:05,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:06,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:07,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:08,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:09,YTAMYGENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:10,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*33:11,YTAMYRNNVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:12,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:13,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*33:14,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:15,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:16,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:17,YTAMYRNNVAHIDADTLYIMYQDYTWAVLAYTWY HLA-A*33:18,YTAMYRNNVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*33:19,YTAMYRNNVAHIDVDTLYLMFHYYTWAVQAYTGY HLA-A*33:20,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:21,YTAMYEENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:22,YTAMYRNNVAHIDVDTLYVRYQDYTWAVLAYTWY HLA-A*33:23,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:24,YTAMYRNNVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*33:25,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:26,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:27,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:28,YTAMYRNNVAHIDVDTLYIMYQDYTWAELAYTWY HLA-A*33:29,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:30,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:31,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*34:01,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:02,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:03,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:04,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:05,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYTWY HLA-A*34:07,YYAMYRNNVSQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:08,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*36:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*36:02,YFAMYQENMAHTDANTLYIIYRDYTWVARAYTWY HLA-A*36:03,YFAMYQENMAHTDANTLYLMYRDYTWVARVYTWY HLA-A*36:04,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A*36:05,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*43:01,YYAMYLQNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*66:01,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:02,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:03,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:04,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWH HLA-A*66:05,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYRWY HLA-A*66:07,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:08,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:09,YYAMYRNNVAQTDVDTLYVRYQDYTWAEWAYRWY HLA-A*66:10,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRGY HLA-A*66:11,YYAMYRNNVAQTDADTLYIRYQDYTWAEWAYRWY HLA-A*66:12,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:13,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:14,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:15,YYAMYRNNVAHIDVDTLYIRYQDYTWAEWAYRWY HLA-A*68:01,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:02,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:03,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:04,YYAMYRNNVAHIDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:05,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:06,YYAMYRNNVAQTDVDTLYIMYEHYTWAVWAYTWY HLA-A*68:07,YYAMYRNNVAQTDVDTLYIMYRHYTWAVWAYTWY HLA-A*68:08,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A*68:09,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A*68:10,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:12,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:13,YYAMYRENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:14,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:15,YYAMYRNNVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*68:16,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:17,YYAMYRNNVAQTDVDTLYIMYRVYTWAVWAYTWY HLA-A*68:19,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:20,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:21,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:22,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:23,YYAMYRNNVAQTDVDTLYIRYRDYTWAVWAYTWY HLA-A*68:24,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:25,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:26,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTGY HLA-A*68:27,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:28,YYAMYRNNVAQTDVDTLYIRYHYYTWAVRAYTWY HLA-A*68:29,YTAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:30,YYAMYGENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:31,YYAMYRNNVAHTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:32,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:33,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:34,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYMWY HLA-A*68:35,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:36,YYAMYRNNVAQTDENIAYIMYRDYTWAVWAYTWY HLA-A*68:37,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:38,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:39,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:40,YYAMYRNNVGQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:41,YYAMYRNNVAQTDVDTLYIMYRDYTWVVWAYTWY HLA-A*68:42,YYAMYRNNVAQTDVDTLYIMYRDYTWAEWAYTWY HLA-A*68:43,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:44,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:45,YSAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:46,YYAMYRNNVAQTDVNTLYIMYRDYTWAVWAYTWY HLA-A*68:47,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:48,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:50,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:51,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:52,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:53,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:54,YYAMYRNNVAQTDVDTLYIRYHYYTWAEWAYTWY HLA-A*69:01,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*74:01,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:02,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:03,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:04,YFAMYGEKVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:05,YFAMYQENVAHADVDTLYIMYQDYTWAVLAYTWY HLA-A*74:06,YFAMYQENVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*74:07,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:08,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:09,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:10,YFAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*74:11,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:13,YFAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A*80:01,YFAMYEENVAHTNANTLYIIYRDYTWARLAYEGY HLA-A*80:02,YFAMYEENVAHTDVDTLYIIYRDYTWARLAYEGY HLA-B*07:02,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:03,YYSEYRNIYTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:04,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B*07:05,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:06,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:07,YYSEYRNIYAQTDESNLYLRYDYYTWAERAYEWY HLA-B*07:08,YYSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:09,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:10,YYSEYRNICAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:11,YYSEYRNIYAQTDENNLYLSYDSYTWAERAYEWY HLA-B*07:12,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:13,YYSGYREKYRQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:14,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:15,YYSEYRNIYAQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:16,YYSEYRNIYTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:17,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:18,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:19,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYTWY HLA-B*07:20,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLSY HLA-B*07:21,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:22,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:23,YYSEYRNIYAQTDESNLHLSYDYYTWAERAYEWY HLA-B*07:24,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:25,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYEWY HLA-B*07:26,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYEWY HLA-B*07:27,YYSEYRNISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*07:28,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B*07:29,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:30,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:31,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYTWY HLA-B*07:32,YYSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:33,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:34,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B*07:35,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:36,YYSEYRNIYAQTDENIAYLSYDYYTWAERAYEWY HLA-B*07:37,YYSEYRNIYANTYESNLYLSYDYYTWAERAYEWY HLA-B*07:38,YYSEYRNIFTNTYENIAYLSYDYYTWAERAYEWY HLA-B*07:39,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:40,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:41,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:42,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:43,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYTWY HLA-B*07:44,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:45,YYSEYRNIYAQTDESNLYLSYDYYTWAERTYEWY HLA-B*07:46,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:47,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:48,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYEWY HLA-B*07:50,YYSEYRNISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:51,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYEWY HLA-B*07:52,YYSEYRNIYAQTDESNLYLSYDYYTWAERVYEWY HLA-B*07:53,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:54,YYSEYREIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:55,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYEWY HLA-B*07:56,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:57,YYSEYRNIYAQTDENNLYLSYDYYTWAERAYEWY HLA-B*07:58,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:59,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:60,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:61,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:62,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:63,YYSDYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:64,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEGY HLA-B*07:65,YYATYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:66,YYSEYRNIYAQTDESNLYLSYDYYTWAEQAYEWY HLA-B*07:68,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:69,YYSEYRNICTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:70,YCSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:71,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:72,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:73,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:74,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:75,YYSEYRNIYAQTYENNLYLSYDYYTWAERAYEWY HLA-B*07:76,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:77,YYSEYRNIYAQTDESNLYLRSDYYTWAERAYEWY HLA-B*07:78,YYSEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*07:79,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:80,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYEWY HLA-B*07:81,YYSEYRNIYAQTDESIAYLSYDYYTWAERAYEWY HLA-B*07:82,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:83,YYSEYRNIFAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:84,YYSEYRNIYAQTDESNLYWTYDYYTWAERAYEWY HLA-B*07:85,YYSEYRNICTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:86,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:87,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:88,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:89,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:90,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:91,YYSEYRNIYAQTYESNLYLSYDYYTWAERAYEWY HLA-B*07:92,YYSEYRNIYAQTDVSNLYLSYDYYTWAERAYEWY HLA-B*07:93,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:94,YYSEYWNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:95,YYSEYRNIYAQTDESNLYFSYDYYTWAERAYEWY HLA-B*07:96,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:97,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:98,YYSEYRNIYAQTDESNLYLSYDYYTCAERAYEWY HLA-B*07:99,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:100,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYLWY HLA-B*07:101,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:102,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:103,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:104,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:105,YYSEYRNIYAQTVESNLYLSYNYYTWAERAYEWY HLA-B*07:106,YYSEYRNIYAQTDESNLYLSYDYYTRAERAYEWY HLA-B*07:107,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:108,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:109,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:110,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:112,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:113,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:114,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:115,YYSEYRNIYAQTDESNLYLSYNFYTWAERAYEWY HLA-B*08:01,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:02,YDSEYRNIFTNTDENTAYLSYNYYTWAVDAYTWY HLA-B*08:03,YDSEYRNIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B*08:04,YDSEYRNISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:05,YDSEYRNTFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:07,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B*08:09,YDSEYRNIFTNTDESNLYWTYNYYTWAVDAYTWY HLA-B*08:10,YDSEYRDIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:11,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYAWY HLA-B*08:12,YDSEYRNIFTNTDESNLYLRYNYYTWAVDAYTWY HLA-B*08:13,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYTWY HLA-B*08:14,YDSEYRNIFTNTDESNLYLSYHDYTWAVDAYTWY HLA-B*08:15,YDSEYRNIFTNTDVSNLYLSYNYYTWAVDAYTWY HLA-B*08:16,YDSEYRNIFTNADESNLYLRYNYYTWAVDAYTWY HLA-B*08:17,YDSEYREISTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:18,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:20,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYTWY HLA-B*08:21,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B*08:22,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:23,YDSEYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:24,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:25,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYLWY HLA-B*08:26,YYAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:27,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:28,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:29,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:31,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:32,YDSTYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:33,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:34,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:35,YDSEYRNIFTNTDESNLYLSYNSYTWAVDAYTWY HLA-B*08:36,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:37,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:38,YDSEYREIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:39,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:40,YDSEYRNIFTNTDESNLYLSYNYYTWAVRAYEWY HLA-B*08:41,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:42,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:43,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:44,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:45,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:46,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:47,YDSEYRNIFTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:48,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:49,YDSEYRNIFTNTDESNLYIRSNFYTWAVDAYTWY HLA-B*08:50,YYSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:51,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:52,YDSEYRNIFTNTDESIAYLSYNYYTWAVDAYTWY HLA-B*08:53,YDSEYRNIFTNTDESNLYLSYNYYTWAEDAYTWY HLA-B*08:54,YDSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:55,YDSEYRNIFTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*08:56,YDAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:57,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:58,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:59,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:60,YDSEYRNIFTNTDESNLYISYNYYTWAVDAYTWY HLA-B*08:61,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:62,YHSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*13:01,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:02,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:03,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B*13:04,YYTMYREISTNTYENTAYWTYDSYTWAVLAYLWY HLA-B*13:06,YYTMYREISTNTYENTAYIRYNLYTWAVLAYTWY HLA-B*13:09,YYTMYREISTNTYESNLYWTYNLYTWAVLAYEWY HLA-B*13:10,YYTMYREISTNTYENTAYLRYDSYTWAVLAYEWY HLA-B*13:11,YYTMYREISTNTYENTAYLRYNLYTWAVLAYEWY HLA-B*13:12,YYTMYREISTNTYENTAYIRYNLYTWAVLAYGWY HLA-B*13:13,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:14,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:15,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWH HLA-B*13:16,YYTMYREISTNTYENTAYWTYNLYTWAELAYEWY HLA-B*13:17,YYAMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:18,YYTMYREISTNTYENTAYWTYNLYTWAVRAYEWY HLA-B*13:19,YYTMYREVSTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:20,YYTMYREISTNTYENTAYIRYNLYTWAELAYEWY HLA-B*13:21,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:22,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:23,YHTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:25,YYTMYREISTNTYESTAYIRYNLYTWAVLAYEWY HLA-B*13:26,YYTMYREISTNTYENTAYIRYDSYTWAVLAYEWY HLA-B*13:27,YYTMYREISTNTYENTAYWTFNLYTWAVLAYEWY HLA-B*13:28,YYTMYREISTNTYENTACIRYNLYTWAVLAYEWY HLA-B*13:29,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:30,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:31,YYTMYREISTNTYENTAYWTYNLYTWAEWAYEWY HLA-B*13:32,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:33,YYAMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:34,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:35,YYTMYREISTNTYENTAYWTYDYYTWAVLAYEWY HLA-B*13:36,YYTMYRNISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:37,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:38,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:39,YYTMYREISTNTYENNLYIRYNLYTWAVLAYEWY HLA-B*14:01,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:02,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:03,YYSEYRNICTNTDESNLYLWYNFYTWAERAYTWH HLA-B*14:04,HYSEYRNNCTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:05,YYSEYRNICTNTDESNLYLSYNFYTWAELAYTWH HLA-B*14:06,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:08,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:09,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:10,YYSEYRNICTNTDESNLYIRYNFYTWAELAYTWH HLA-B*14:11,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:12,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:13,YYSEYRNICTNTDESNLYLSYNYYTWAELAYTWH HLA-B*14:14,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*14:15,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:16,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:17,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:18,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*15:01,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:02,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:03,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:04,YYAMYREISTNTYESNLYWTYDSYTWAEWAYLWY HLA-B*15:05,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:06,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:07,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:08,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:09,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWY HLA-B*15:10,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B*15:11,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:12,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:13,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B*15:14,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLSY HLA-B*15:15,YYAMYRNISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:16,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:17,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:18,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:19,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:20,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*15:21,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:23,YYSEYRNICTNTYENIAYLRYDSYTWAELAYLWY HLA-B*15:24,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:25,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:27,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:28,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:29,YYSEYRNIFTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:30,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:31,YYAMYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:32,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B*15:33,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:34,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:35,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:36,YYAMYREISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:37,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWH HLA-B*15:38,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWH HLA-B*15:39,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:40,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:42,YYAMYREISTNTYESNLYWTYNLYTWAELAYTWY HLA-B*15:43,YYAMYREISTNTYEDTLYLRYDSYTWAEWAYLWY HLA-B*15:44,YYAMYRNICTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:45,YYAMYREISTNTYESNLYLSYDYYTWAEWAYLWY HLA-B*15:46,YYAKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:47,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:48,YYAMYREISTNTYESNLYLRYNYYTWAVLTYLWY HLA-B*15:49,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:50,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWY HLA-B*15:51,YYSEYRNICTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:52,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:53,YYTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:54,YYSEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:55,YYAMYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*15:56,YYAMYREIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:57,YYAMYREISTNTYVNNLYLRYDSYTWAEWAYLWY HLA-B*15:58,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B*15:60,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:61,YYSEYREISTNTDESNLYLRYDSYTWAELAYLWY HLA-B*15:62,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:63,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B*15:64,YYSEYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:65,YYAMYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B*15:66,YYAMYREICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:67,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:68,YYSEYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:69,YYSEYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B*15:70,YYAMYREISTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:71,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:72,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:73,YYAMYREISTNTYESNLYLRYNLYTWAEWAYLWY HLA-B*15:74,YYSEYREISINTYESNLYLRYDSYTWAELAYLWY HLA-B*15:75,YYAMYREISTNTYESNLYLRYDSYTWAQWAYLWY HLA-B*15:76,YYAMYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:77,YYAMYREISTNTYESNLYIRYDDYTWAEWAYLWY HLA-B*15:78,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:80,YYSEYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:81,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:82,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:83,YYAMYREISTNTYESNLYWTYNYYTWAVDAYTWY HLA-B*15:84,YYAMYREISTNTYESNLYLRFDSYTWAVRAYLWY HLA-B*15:85,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:86,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B*15:87,YYAMYREISTNTYESIAYLRYDSYTWAEWAYLWY HLA-B*15:88,YYAMYRNISTNTYESNLYIRYDSYTWATLAYLWY HLA-B*15:89,YYAMYRNISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:90,YYSEYRNICTNTYESNLYLRYDYYTWAELVYLWY HLA-B*15:91,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLSY HLA-B*15:92,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:93,YYSEYRNICTNTYESNLYLRYDSYTWAELAYTWY HLA-B*15:95,YYAMYQENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:96,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:97,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:98,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:99,YYSEYRNICTNTYESNLYLRYDYYTWAERAYLWY HLA-B*15:101,YYAMYREIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:102,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:103,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:104,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:105,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:106,YYAKYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:107,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:108,YYSEYRNICTNTYESNLYLRYDSYTWAELTYLWY HLA-B*15:109,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:110,YYAMYREISTNTYESNLYLRCDSYTWAEWAYLWY HLA-B*15:112,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:113,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:114,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:115,YYSEYRNICTNTYESTAYLRYDSYTWAELAYLWY HLA-B*15:116,YYAMYREISTNTYESNLYLRYDSYSLAEWAYLWY HLA-B*15:117,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*15:118,YYAMYREISTNTYESNLYLMYDSYTWAEWAYLWY HLA-B*15:119,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:120,YYAMYRDISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:121,YYAMYRNISTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:122,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:123,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:124,YYSEYRNICTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*15:125,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:126,YYAMYREISTNTYESNLYLSYDSCTWAEWAYLWY HLA-B*15:127,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:128,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:129,YYAMYREISTNTYESNLYLNYDSYTWAEWAYLWY HLA-B*15:131,YYSEYREISTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:132,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:133,YYSEYRNICTNTYESNLYLRYDFYTWAELAYLWY HLA-B*15:134,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:135,YYAMYREISTNTYENNLYLRYDSYTWAEWAYLWY HLA-B*15:136,YYAMYREISTNTYESNLYLRYDSYTWAVLTYLWY HLA-B*15:137,YYAMYREISTNTYESNLYWTYNFYTWAEWAYLWY HLA-B*15:138,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:139,YYAMYRNISANTYESNLYIRYDSYTWAELAYLWY HLA-B*15:140,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:141,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:142,YDAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:143,YYAKYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:144,YYAMYRNISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:145,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:146,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:147,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:148,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:150,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:151,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:152,YYAMYREIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:153,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:154,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:155,YYAMYREISTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*15:156,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:157,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:158,YYSEYREISTNTYESNLFLRYDSYTWAELAYLWY HLA-B*15:159,YYAMYREISTNTYESNLHLRYDSYTWAEWAYLWY HLA-B*15:160,YYAMHREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:161,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:162,YYAMYRENMASTYENIAYLRYHDYTWAALAYLWY HLA-B*15:163,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:164,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:165,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:166,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:167,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:168,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:169,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:170,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:171,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:172,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:173,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:174,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:175,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:176,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:177,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:178,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:179,YYAMYREISTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:180,YDSEYRNIFTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:183,YYTMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:184,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:185,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*15:186,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*15:187,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:188,YYAMYREISTNTYESNLYLRYNYYTWAVLAYTWY HLA-B*15:189,YYAMYRNICTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:191,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:192,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:193,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:194,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:195,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:196,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:197,YYSEYRNICTNTYESNLYLSYDSYTWAELAYLWY HLA-B*15:198,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:199,YYAMYREISTNTYESNLYLRYDSYTWAEDAYTWY HLA-B*15:200,YYSEYRNICTNTYESNLYLRYDSYTWATLAYLWY HLA-B*15:201,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:202,YYATYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*18:01,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:02,YHSTYRNISTNTYESNLYLNYDSYTWAVLAYTWH HLA-B*18:03,YHSTYRNISTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*18:04,YYATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:05,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:06,YHSTYRNISTNTYVSNLYLRYDSYTWAVLAYTWH HLA-B*18:07,YHSTYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:08,YHSTYRNISTNTYESNLYLRCDSYTWAVLAYTWH HLA-B*18:09,YHSTYRNISTNTYENTAYLRYDSYTWAVLAYTWH HLA-B*18:10,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:11,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B*18:12,YHSTYREISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:13,YHSTYRNISTNTYESNLYLRYDSYTWAVRAYTWH HLA-B*18:14,YHSTYRNISTNTYESNLYLSYDSYTWAVLAYTWH HLA-B*18:15,YHSTYRNISTNTYESNLYLRYDSYTWAELAYTWH HLA-B*18:18,YHSTYRNISTNTYESNLYLRSDSYTWAVLAYTWH HLA-B*18:19,YHSTYRNISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B*18:20,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:21,YHSTYRNISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*18:22,YHSTYRNISTNTYESNLYISYDSYTWAVLAYTWH HLA-B*18:24,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:25,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:26,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B*18:27,YHSTYRNISTNTYESNLYLMFDSYTWAVLAYTWH HLA-B*18:28,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:29,YHATYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:30,YHSTYRNISTNTYESNLYLRYDSYTWAERAYTWH HLA-B*18:31,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:32,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:33,YHSTYRNICTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:34,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:35,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:36,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*18:37,YHSEYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:38,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:39,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:40,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:41,YHSTYRNISTNTYESNLYLRYESYTWAVLAYTWH HLA-B*18:42,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:43,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:44,YHSTYRNISTNTYESNLYLWYDSYTWAVLAYTWH HLA-B*18:45,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:46,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:47,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:48,YHSKYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:49,YHSTYRNISTNTYENNLYLRYDSYTWAVLAYTWH HLA-B*18:50,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWH HLA-B*27:01,YHTEYREICAKTYENTAYLNYHDYTWAVLAYEWY HLA-B*27:02,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:03,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:04,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:05,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:06,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B*27:07,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:08,YHTEYREICAKTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:09,YHTEYREICAKTDEDTLYLNYHHYTWAVLAYEWY HLA-B*27:10,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:11,YHTEYREICAKTDESTLYLSYNYYTWAVLAYEWY HLA-B*27:12,YHTEYREICTNTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:13,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:14,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B*27:15,YHTEYREICAKTDESTLYLNYHDYTWAELAYTWY HLA-B*27:16,YHTEYREICTNTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:17,YHTEFREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:18,YHTEYREISTNTYESNLYLNYHDYTWAELAYEWY HLA-B*27:19,YHTEYREICAKTDEDTLYIRYHDYTWAVLAYEWY HLA-B*27:20,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B*27:21,YHTEYREICAKTDESTLYLRYDYYTWAELAYEWY HLA-B*27:23,YHTEYRNIFTNTYESTLYLNYHDYTWAVLAYEWY HLA-B*27:24,YHTEYREICAKTDESTLYLSYNYYSWAELAYEWY HLA-B*27:25,YHTEYREICAKTDESTLYLNYHDYTWAEWAYLWY HLA-B*27:26,YHTEYREICAQTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:27,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYEWY HLA-B*27:28,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWH HLA-B*27:29,YHTEYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*27:30,YHTEYREICAKTDENIAYIRYHDYTWAVLAYEWY HLA-B*27:31,YHTEYREICAQTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:32,YHTEYREICAKTDEDTLYLSYHDYTWAVLAYEWY HLA-B*27:33,YHTEYREICAKTDESNLYLSYNYYTWAVLAYEWY HLA-B*27:34,YHTEYREICAKTDEDTLYLSYDYYTWAVLAYEWY HLA-B*27:35,YHTEYREICAKTDEDTLYLNYNFYTWAVLAYEWY HLA-B*27:36,YHTEYREICAKTDESTLYLNYHDYSLAVLAYEWY HLA-B*27:37,YYTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:38,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B*27:39,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:40,YHTEYREICAKTDESNLYLNYHDYTWAELAYEWY HLA-B*27:41,YHTEYREICAKTDEDTLYLNYDSYTWAVLAYEWY HLA-B*27:42,YHTEYREICAKTDEDNLYLNYHDYTWAVLAYEWY HLA-B*27:43,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:44,YHTEYREICAKTYESNLYLNYHDYTWAVLAYEWY HLA-B*27:45,YHTEYREICAKTDEDTLYLNYHDYTWAVRAYEWY HLA-B*27:46,YHTEYREICAKTDEDTLYLNYHYYTWAVLAYEWY HLA-B*27:47,YHTEYREICAKTDEDTLYLNYHDYTWAVDAYLSY HLA-B*27:48,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:49,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:50,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYESY HLA-B*27:51,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:52,YHTTYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:53,YHTEYREICAKTDEDIAYLNYHDYTWAVLAYEWY HLA-B*27:54,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:55,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:56,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:57,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:58,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:60,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:61,YHTEYREICAKTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:62,YHTEYREICAKTDENIAYLNYHDYTWAVLAYTWH HLA-B*27:63,YHTEYREICAKTDESTLYLNYHDYTWAELAYLWY HLA-B*27:67,YHTMYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:68,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:69,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*35:01,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:02,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:03,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:04,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:05,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:06,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:07,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:08,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:09,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:10,YYATYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:11,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWY HLA-B*35:12,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:13,YYATYREIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:14,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*35:15,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYEWY HLA-B*35:16,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:17,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:18,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B*35:19,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:20,YYATYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:21,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWH HLA-B*35:22,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYLWY HLA-B*35:23,YYATYRNIFTNTYESNLYIRFDSYTWAVLAYLWY HLA-B*35:24,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B*35:25,YYSEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:26,YYAEYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:27,YYATYRNIFTNTYENNLYIRYDSYTWAVLAYLWY HLA-B*35:28,YYATYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:29,YYATYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:30,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:31,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*35:32,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:33,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYEWY HLA-B*35:34,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:35,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYTWY HLA-B*35:36,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:37,YYATYRNIFTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*35:38,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLWY HLA-B*35:39,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:41,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B*35:42,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:43,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:44,YYATYRNIFTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*35:45,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLSY HLA-B*35:46,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:47,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:48,YYATYRNIFTNTYESNLYIRSDSYTWAVLAYLWY HLA-B*35:49,YYAEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:50,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:51,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:52,YYATYRNIFTNTYECNLYIRYDSYTWAVLAYLWY HLA-B*35:54,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:55,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:56,YYATYRNIFTNTYENNLYIRYDFYTWAVLAYLWY HLA-B*35:57,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:58,YYATYRNIFTNTYESNLYLSYDSYTWAELAYLWY HLA-B*35:59,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:60,YYATYRNIFTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*35:61,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:62,YYATYRNIFTNTYESNLYIRYDSYTWAVWAYLWY HLA-B*35:63,YHTKYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:64,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:66,YYATYRNIFTNTYESNLYLSYDSYTWAVRAYEWY HLA-B*35:67,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:68,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:69,YYATYREIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:70,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:71,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLSY HLA-B*35:72,YYATYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:74,YYATYRNIFTNTYVSNLYIRYDFYTWAVLAYLWY HLA-B*35:75,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B*35:76,YYATYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:77,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:78,YYATYRNIFANTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:79,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:80,YYATYREIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:81,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWH HLA-B*35:82,YYATYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:83,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:84,YHTTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:85,YYATYRNICTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:86,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*35:87,YYATYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*35:88,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*35:89,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:90,YYTTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:91,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:92,YYATYRNIFTNAYESNLYIRYDSYTWAVLAYLWY HLA-B*35:93,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYTWY HLA-B*35:94,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:95,YYATYRNISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:96,YYATYRNIFTNTYESNLYIRYDFYTWAELAYTWH HLA-B*35:97,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:98,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:99,YYATYRNIFTNTYESNLYLRYDSYTWAERAYLWY HLA-B*35:100,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:101,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:102,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:103,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:104,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:105,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:106,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:107,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:108,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:109,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWH HLA-B*35:110,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:111,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:112,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:113,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:114,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:115,YYATYRNIFTNTYESNLYIRYDSYTWAVDAYLWY HLA-B*35:116,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:117,YYATYRNIFTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*35:118,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:119,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:120,YYATYRNIFTNTYESNLYIRHDSYTWAVLAYLWY HLA-B*35:121,YYATYRNIFTNTYESNLYIRYHSYTWAVLAYLWY HLA-B*35:122,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:123,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:124,YYSTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:125,YYSTYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:126,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:127,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:128,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:131,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:132,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:133,YYATYRNIFTNTYESNLYIRYVSYTWAVLAYLWY HLA-B*35:135,YYATYRNICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:136,YYATYRNIFTNTDESNLYIRYDFYTWAVLAYLWY HLA-B*35:137,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:138,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:139,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:140,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:141,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:142,YYSTYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:143,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:144,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*37:01,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:02,YHSTYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*37:04,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWH HLA-B*37:05,YHSTYREISTNTYEDNLYIRSNFYTWAVDAYTWY HLA-B*37:06,YHSKYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:07,YHSTYREISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*37:08,YHSTYRNISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:09,YHSTYREISTNTYEDTLYLSYDYYTWAVDAYTWY HLA-B*37:10,YHSTYREISTNTYENTAYIRSNFYTWAVDAYTWY HLA-B*37:11,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:12,YHSTYREISTNTYEDTLYIRYNYYTWAVDAYTWY HLA-B*37:13,YHSTYREISTNTYEDTLYIRSNFYTWAEDAYTWY HLA-B*37:14,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:15,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:17,YHSTYREISTNTYEDTLYIRSNFYTWTVDAYTWY HLA-B*37:18,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:19,YHSTYREISTNTYEDTLYIRYNFYTWAVDAYTWY HLA-B*37:20,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:21,YHSTYREIFTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:22,YHATYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:23,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*38:01,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:02,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:03,YYSEYREISTNTDESTAYLRYNFYTWAVLTYTWY HLA-B*38:04,YYSEYREICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:05,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:06,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:07,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:08,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYMWY HLA-B*38:09,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:10,YYSEYRNICTNTYENIAYLRYNFYTWAELAYTWY HLA-B*38:11,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:12,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:13,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:14,YYSEYRNICTNTDENIAYLRYNFYTWAVLTYTWY HLA-B*38:15,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:16,YYTEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:17,YYSEYRNICTNTYEDTLYLRYNFYTWAVLTYTWY HLA-B*38:18,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:19,YYSEYRNICTNTYENIAYLSYNFYTWAVLTYTWY HLA-B*38:20,YYSEYRNICTNTYENIAYIRYNFYTWAVLTYTWY HLA-B*38:21,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:22,YYSEYRNICTNTYENIAYLNYNFYTWAVLTYKWY HLA-B*38:23,YYSEYRNICTNTYENTAYFRYNFYTWAVLTYTWY HLA-B*39:01,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:02,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:03,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:04,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:05,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:06,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:07,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*39:08,YYSEYREISTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:09,YYSEYRNICTNTDESNLYLRSNFYTWAVLTYTWY HLA-B*39:10,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:11,YYSEYRNICTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:12,YDSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:13,YYSEYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:14,YYSEYRNICTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*39:15,YYSEYRNICTNTDESNLYLRYDFYTWAVLTYTWY HLA-B*39:16,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:17,YYSEYRNIYTNTDESNLYLRYNLYTWAVLTYTWY HLA-B*39:18,YYSEYRNICTNTDESNLYLRYNFYTWAEWTYTWY HLA-B*39:19,YYSTYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:20,YYSEYRNIYTNTYENNLYLRYNFYTWAVLTYTWY HLA-B*39:22,YYSEYREICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:23,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:24,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:26,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:27,YYSEYRNICTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B*39:28,YYSEYRNICTNTDESNLYLTYNFYTWAVLTYTWY HLA-B*39:29,YYSEYRNICTNTDESNLYLSYDYYTWAVLTYTWY HLA-B*39:30,YYSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B*39:31,YHSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:32,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWH HLA-B*39:33,YYSEYRNICTNTDESNLYWTYNFYTWAVRAYLWY HLA-B*39:34,YYSEYRNICTNTDESNLYWTYNFYTWAVLAYTWY HLA-B*39:35,YYSEYRNICTNTDESNLYLRYNFYTWAELTYTWY HLA-B*39:36,YYSEYRNICTNTDESNLYLRYNFYTWAEWAYTWY HLA-B*39:37,YYSEYRNICTNTYESNLYLSYNFYTWAVLTYTWY HLA-B*39:39,YYSEYRNISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:41,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:42,YYSEYRNICTNTDESNLYIRYNFYTWAVLTYTWY HLA-B*39:43,YYSEYRNICTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*39:44,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:45,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:46,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:47,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYEWY HLA-B*39:48,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWH HLA-B*39:49,YYSEYREISTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:50,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYEWY HLA-B*39:51,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:52,YYSEYRNICTDTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:53,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:54,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:55,YYSEYRNICTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:56,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:57,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:58,YYSEYRNIFTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:59,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:60,YYSEYRNICTNTDESNLYLRYNFYTWAALTYTWY HLA-B*40:01,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:02,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:03,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B*40:04,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:05,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWY HLA-B*40:06,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:07,YHTKYREIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:08,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:09,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:10,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:11,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:12,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:13,YHTKYREIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:14,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:15,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:16,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:18,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:19,YHTKYREISTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:20,YHTKYREISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*40:21,YYAMYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:23,YHTKYREISTNTYESNLYLRYNYYSWAERAYEWY HLA-B*40:24,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:25,YHTKYRNISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:26,YHTKYREISTNTYESNLYLRYNYYTWAELAYLWY HLA-B*40:27,YHTKYREISTNTYESNLYLSYNNYTWAVLAYEWY HLA-B*40:28,YHTKYREISTNTYESNLYIRYNYYTWAELAYLWH HLA-B*40:29,YHTKYPEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:30,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:31,YHTKYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B*40:32,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:33,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:34,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:35,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:36,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B*40:37,YHTKYREISTNTYENNLYLSYNYYTWAVLAYEWY HLA-B*40:38,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B*40:39,YHTKYREISTNTYESNLYLSYNYYTWAVLAYTWY HLA-B*40:40,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:42,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:43,YHTKYREISTNTDESNLYLRYNYYSLAVLAYEWY HLA-B*40:44,YHTKYREISTNTYESNLYWTYDYYTWAVLAYEWY HLA-B*40:45,YHTKYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B*40:46,YHTEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:47,YHTKYREISTNTYENTAYLRYNYYSLAVLAYEWY HLA-B*40:48,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B*40:49,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:50,YHTKYREISTNTDESNLYLSYNYYTWAVLAYEWY HLA-B*40:51,YHTKYREISTNTYESNLYLRYNYYSWAELAYTWH HLA-B*40:52,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*40:53,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:54,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:55,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:56,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:57,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:58,YYAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:59,YHTKYREISTNTYESNLYIRYDSYSLAVLAYEWY HLA-B*40:60,YHTKYREISTNTYESNLYLRSDSYSLAVLAYEWY HLA-B*40:61,YHTKYREIYTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:62,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:63,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:64,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:65,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:66,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:67,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:68,YHTKYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:69,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:70,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:71,YHTKYREISTNTYESNLYLSYNLYTWAVLAYLWY HLA-B*40:72,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B*40:73,YHTKYREISTNTYVSNLYLRYNYYSLAVLAYEWY HLA-B*40:74,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:75,YHTKYREICTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:76,YHTKYREISTNTYESKLYLRYNYYSLAVLAYEWY HLA-B*40:77,YHTKYREISTNTYESNLYLRYNFYTLAVLAYEWY HLA-B*40:78,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:79,YHTKYREISTNTYESNLHLRYNYYSLAVLAYEWY HLA-B*40:80,YHTKYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*40:81,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:82,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:83,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:84,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:85,YHTKYREISTNTYESNLYLSYNYYIWAVLAYEWY HLA-B*40:86,YHTKYREISTNTYESNLYWTYNFYTWAVLAYEWY HLA-B*40:87,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:88,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:89,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:90,YHTKYREISTNTYESNLYLSYNYYTWAVLAHEWY HLA-B*40:91,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:92,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:93,YHTEYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:94,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:95,YHTKYREISTNTYESNLYWTYNYYTWAELAYEWY HLA-B*40:96,YHTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:97,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:98,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:99,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:100,YHTKYREISTNTYESNLYLRFNYYSLAVLAYEWY HLA-B*40:101,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:102,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:103,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:104,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:105,YHTKYREISTNTYESNLYLSYNSYTWAVLAYEWY HLA-B*40:106,YHTKYRNIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:107,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:108,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:109,YHTKYREISTNTYESIAYWTYNYYTWAVLAYEWY HLA-B*40:110,YYTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:111,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:112,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:113,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWH HLA-B*40:114,YHTKYREISTNTYESNLYLRYNYYSWAVLAYEWY HLA-B*40:115,YHTKYWEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:116,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:117,YHTKYREISTNTYENIAYLRYNYYSLAVLAYEWY HLA-B*40:119,YHTKYREISTNTYDSNLYLSYNYYTWAVLAYEWY HLA-B*40:120,YHTKYREISTNTYESNLYIRYDYYTWAVLAYEWY HLA-B*40:121,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:122,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:123,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:124,YHTKYREISTNTYESNLYLRYHDYSLAVLAYEWY HLA-B*40:125,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:126,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:127,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:128,YHTKYREISTNTYESNLYLRYNYYSLAVRAYEWY HLA-B*40:129,YYTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:130,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:131,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:132,YHTKYREISTNTYESNLYLRYNYYSLAVLAYESY HLA-B*40:134,YHTKYREISTNIYESNLYLRYNYYSLAVLAYEWY HLA-B*40:135,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:136,YHTKYREISTNTYESNLYLRYNYYTWAVDAYEWY HLA-B*40:137,YYAMYREISTNTYESNLYIRYNYYSLAVLAYEWY HLA-B*40:138,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:139,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:140,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:141,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:143,YHTKYREISTNTYESNLYLSFNYYTWAVLAYEWY HLA-B*40:145,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:146,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:147,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*41:01,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:02,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:03,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:04,YHTKYREISTNTYESNLYLSYDYYTWAVDAYTWY HLA-B*41:05,YHTKYREISTNTYESKLYWRYNYYTWAVDAYTWY HLA-B*41:06,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:07,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:08,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:09,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:10,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:11,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:12,YHAKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*42:01,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:02,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:04,YYSEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*42:05,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:06,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B*42:07,YYSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:08,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:09,YHSEYRNIYAQTDESNLYLSYDSYTWAVDAYTWY HLA-B*42:10,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:11,YYSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*42:12,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:13,YYSEYRNIYAQTDESNLYIRYNYYTWAVDAYTWY HLA-B*42:14,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*44:02,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:03,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:04,YYTKYREISTNTYENTAYIRYDDYTWAVRAYTSY HLA-B*44:05,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:06,YYATYRNIFTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:07,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:08,YYTMYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:09,YYTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B*44:10,YYTKYREISTNTYENTAYIRFNLYTWAVLAYLSY HLA-B*44:11,YYTKYREISTNTYENTPYIRYDDYTWAVDAYLSY HLA-B*44:12,YYTKYRNISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:13,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:14,YYTKYREISTNTYENTAYIRYNDYTWAVDAYLSY HLA-B*44:15,YHTKYREISTNTYESTAYWRYNLYTWAVDAYLSY HLA-B*44:16,YYTKYREISTNTYENTAYIRYDDYTWAVDAYEWY HLA-B*44:17,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B*44:18,YHTKYREISTNTYENIAYWRYNLYTWAVDAYLSY HLA-B*44:20,YYTKYREISTNTYENTAYWTYDDYTWAVDAYLSY HLA-B*44:21,YYTKYREISTNTYENTAYIRYDDYTWAVDAYESY HLA-B*44:22,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:24,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:25,YYTKYREISTNTYENIAYIRYDYYTWAVDAYLSY HLA-B*44:26,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:27,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:28,YYTKYREISTNTYENTAYIRYDDYTWAVRAYLSY HLA-B*44:29,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B*44:30,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:31,YYTKYREISTNTYENTAYLRYNYYSLAVLAYESY HLA-B*44:32,YYTKYPEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:33,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:34,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:35,YYTKYREISTNTYENTAYIRYDDYTWAVEAYLSY HLA-B*44:36,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:37,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWY HLA-B*44:38,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:39,YYPKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:40,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:41,YYTKYREISTNTYENTAYLRYDDYTWAVDAYLSY HLA-B*44:42,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLWY HLA-B*44:43,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B*44:44,YYTEYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:45,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:46,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B*44:47,YYTKYREISTNTYENTAYWTYDDYTWAVLAYLSY HLA-B*44:48,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:49,YDTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:50,YYTKYREISTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*44:51,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:53,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:54,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B*44:55,YHTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:57,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:59,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:60,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:62,YYTKYREISTNTYENTAYIRYNYYTWAVDAYLSY HLA-B*44:63,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:64,YYTKYREISTNTYENTAYIRYDDYTWAVLAYEWY HLA-B*44:65,YYTKYREISTNTYENTAYLRYDDYTWAVLAYLSY HLA-B*44:66,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:67,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:68,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:69,YYTKYWEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:70,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:71,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:72,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:73,YYTKYREISTNTYENTAYIRYDDYTWAVDGYLSY HLA-B*44:74,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:75,YYTKYREISTNTYENNLYIRYDYYTWAVDAYLSY HLA-B*44:76,YYTKYREISTNTYENTAYIRYDDYTWAERAYLSY HLA-B*44:77,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:78,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:79,YYTKYREISTNTYENTAYIRYDDYTWAELAYLSY HLA-B*44:80,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:81,YYTNYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:82,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:83,YYATYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:84,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:85,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:86,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:87,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:88,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:89,YYTKYREISTNTYENTAYIRYDDYTWAVDTYLSY HLA-B*44:90,YYTKYREIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B*44:91,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLWY HLA-B*44:92,YYTKYREISTNTYENTAYIRYDDYTWAMLAYLSY HLA-B*44:93,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:94,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:95,YYTKYREISTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:96,YYTKYREISTNTYENTAYIGYDDYTWAVLAYLSY HLA-B*44:97,YYTKYREICAKTDENTAYIRYDDYTWAVDAYLSY HLA-B*44:98,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:99,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:100,YYTKYREISTNTYENTAYWRYDDYTWAVDAYLSY HLA-B*44:101,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:102,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:103,YHTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:104,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:105,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:106,YYTKYREISTNTYENTAYLSYDDYTWAVDAYLSY HLA-B*44:107,YYTKYREISTNTYENTAYIRYDYYTWAVLAYLSY HLA-B*44:109,YYTKYREISTNTYESTAYIRYDDYTWAVLAYLSY HLA-B*44:110,YYTKYREISTNTYENTAYISYDDYTWAVLAYLSY HLA-B*45:01,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:02,YHTKYREISTNTYESNLYWRYNFYTWAVDAYLSY HLA-B*45:03,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:04,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLWY HLA-B*45:05,YHTKYREISTNTYESNLYWRYNLYTWAVDVYLSY HLA-B*45:06,YHTKYREIYAQTDESNLYWRYNLYTWAVDAYLSY HLA-B*45:07,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:08,YHTKYREISTNTYESNLYWRYNLYTWAVDAYTWY HLA-B*45:09,YHTKYREISTNTYESNLYWRYDSYTWAVDAYLSY HLA-B*45:10,YHTKYREISTNTYESNLYWRYNLYTWAVDAYEWY HLA-B*45:11,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:12,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*46:01,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:02,YYAMYREKYRQTGVSNLYLRYDSYTWAEWAYLWY HLA-B*46:03,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-B*46:04,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:05,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:06,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYEWY HLA-B*46:08,YYAMYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-B*46:09,YYAMYREKYRQTDVSNLYLRYDSYTWAVWAYLWY HLA-B*46:10,YYTMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:11,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYLWY HLA-B*46:12,YYAMYREKYRQTDVSNLYLSYDSYTWAEWAYLWY HLA-B*46:13,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-B*46:14,YHAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:16,YYAMYREKFRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:17,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLSY HLA-B*46:18,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYTWY HLA-B*46:19,YYAMYREKYRQTDVSNLYLRYDSYTWAVLTYLWY HLA-B*46:20,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:21,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYTWY HLA-B*46:22,YYAMYREKYRRTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:23,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:24,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*47:01,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:02,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:03,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:04,YYTKYREISTNTYENTAYLNYHDYTWAVLAYEWY HLA-B*47:05,YYTKYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*47:06,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:07,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*48:01,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:02,YYSEYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*48:03,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*48:04,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:05,YYSEYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*48:06,YYSEYRNIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:07,YYSEYREISTNTYESNLYLSYNFYSLAVLAYEWY HLA-B*48:08,YYSEYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*48:09,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:10,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:11,YYSEYREISTNTYESNLYLSYNYYSLAVLAYELY HLA-B*48:12,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:13,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:14,YYSEYREISTNTYESNLYLSYNSYTLAVLAYEWY HLA-B*48:15,YYSEYREISTNTYESNLYLSYNYYSLAELAYEWY HLA-B*48:16,YYSEYRVISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:17,YYSEYREISTNTYESNLYIRYNFYSLAVLAYEWY HLA-B*48:18,YYSEYREISTNTYESIAYLSYNYYSLAVLAYEWY HLA-B*48:19,YYSEYREISTNTYESNLYLSYNYYSLAVWAYEWY HLA-B*48:20,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:21,YYSEYREISTNTYESNLYLNYNYYSLAVLAYEWY HLA-B*48:22,YHSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:23,YYSEYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*49:01,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:02,YHTKYREISTNTYENTAYWRYNLYTWAELAYLWY HLA-B*49:03,YHATYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:04,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:05,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:06,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:07,YHTKYREISTNTYENIAYWRYNLYTWAELAYEWY HLA-B*49:08,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:09,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWH HLA-B*49:10,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*50:01,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:02,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B*50:04,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:05,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:06,YHTRYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:07,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:08,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:09,YHTKYREISTNTYESNLYWRYNFYTWAELAYLWY HLA-B*51:01,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:02,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B*51:03,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLGH HLA-B*51:04,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:05,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWY HLA-B*51:06,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWH HLA-B*51:07,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:08,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*51:09,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:12,YYATYRNIFTNTYENIADWTYNYYTWAELAYLWH HLA-B*51:13,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B*51:14,YYATYRNIFTNTYENIAYWTYKYYTWAELAYLWH HLA-B*51:15,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*51:16,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWH HLA-B*51:17,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:18,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:19,YYATYRNIFTNTYENIAYWTYNYYTWAVLTYLWH HLA-B*51:20,YYATYRNIFTNTDENIAYWTYNYYTWAVDAYLWH HLA-B*51:21,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWH HLA-B*51:22,YYATYRNICTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:23,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLSY HLA-B*51:24,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:26,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:28,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:29,YYATYRNIFTNTYENIAYWTYNYYTWAERAYLWH HLA-B*51:30,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:31,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWH HLA-B*51:32,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:33,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:34,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWY HLA-B*51:35,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:36,YYATYRNIFTNTYENIAYWTYNYYTWAEDAYTWY HLA-B*51:37,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B*51:38,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:39,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:40,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*51:42,YYATYRNIFTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*51:43,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:45,YYATYRNIFTNTYENIAYLRYDSYTWAELAYLWH HLA-B*51:46,YYATYRNIFTNTYENIAYITYNYYTWAELAYLWH HLA-B*51:48,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:49,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:50,YYATYRNIFTNTYENGLYWTYNYYTWAELAYLWH HLA-B*51:51,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:52,YYATYRNIFTNTHENIAYWTYNYYTWAELAYLWH HLA-B*51:53,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:54,YYATYRNIFTNTYENTAYWTYNYYTWAVRAYLWY HLA-B*51:55,YYATYRNIFTNTYENIAYWTYNYYTWAEQAYLWH HLA-B*51:56,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:57,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:58,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:59,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWY HLA-B*51:60,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:61,YYATYRNIFTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*51:62,YYATYRNIFTNTYENIAYLRYNLYTWAELAYLWH HLA-B*51:63,YYATYRNIFTNTYENIAYWTYNSYTWAELAYLWH HLA-B*51:64,YYATYRNIFTNTYENIAYLSYNYYTWAELAYLWH HLA-B*51:65,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:66,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:67,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:68,YDATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:69,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:70,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:71,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:72,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:73,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:74,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:75,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:76,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:77,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:78,YYATYRNIFTNTYENTAYWTYNYYTWAELAYLWH HLA-B*51:79,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:80,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:81,YYATYRNIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*51:82,YYATYRNIFTNTYENIAYWTYNYYTWAERAYEWH HLA-B*51:83,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:84,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:85,YYATYRNIFTNTYENIAYWTYHDYTWAELAYLWH HLA-B*51:86,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:87,YYATYRNIFTNTYENIAYWTYNYYTWADLAYLWH HLA-B*51:88,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:89,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:90,YYATYRNIFTNTYENIAYWTYDYYTWAELAYLWH HLA-B*51:91,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:92,YYATYRNIFTNTYENIAYWTYDFYTWAELAYLWH HLA-B*51:93,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWY HLA-B*51:94,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:95,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:96,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:01,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:02,YYAMYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:03,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*52:04,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:05,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:06,YYATYREIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:07,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:08,YYATYREISTNTYENIAYWTYNYYTWAELAYEWH HLA-B*52:09,YYATYREISTNTYESIAYWTYNYYTWAELAYLWH HLA-B*52:10,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*52:11,YYATYREISTNTYENIAYWTYNYYTWAELAYLWY HLA-B*52:12,YYATYREISTNTYENIAYWTYDYYTWAELAYLWH HLA-B*52:13,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:14,YYATYREISTNTYENIAYWTYNFYTWAELAYLWH HLA-B*52:15,YYATYREISTNTYENIAYWTYNYYTWAELAYLSH HLA-B*52:16,YYSEYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:17,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:18,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:19,YYATYREISTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*52:20,YYATYREISTNTYENTAYWTYNYYTWAELAYLWH HLA-B*52:21,YYATYREISTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*53:01,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:02,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWH HLA-B*53:03,YYATYRNIFTNTYEDTLYIRYDSYTWAVLAYLWY HLA-B*53:04,YYATYRNIFTNTYENIAYIRYDFYTWAVLAYLWY HLA-B*53:05,YYATYRNIFTNTYESIAYIRYDSYTWAVLAYLWY HLA-B*53:06,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWH HLA-B*53:07,YYATYRNIFTNTYENIAYIRSNFYTWAVLAYLWY HLA-B*53:08,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWY HLA-B*53:09,YYATYRNISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:10,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:11,YYATYRNIFTNTYENTAYIRYDSYTWAVRAYLWY HLA-B*53:12,YYATYRNIFTNTYESTAYIRYDSYTWAVLAYLWY HLA-B*53:13,YYATYRNIFTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:14,YYATYRNIFTNTYENIAYLSYDSYTWAVLAYLWY HLA-B*53:15,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:16,YYATYRNIFTNTYESIAYIRYDSYTWAVRAYLWY HLA-B*53:17,YYATYREISTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:18,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:19,YYATYRNIFTNTYENIAYIRYNYYTWAVLAYLWY HLA-B*53:20,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:21,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:22,YYATYRNIFTNTYENIAYIRYDSYTWAVDAYLSY HLA-B*53:23,YYATYRNIFTNTDENIAYIRYDSYTWAVLAYLWY HLA-B*54:01,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:02,YHAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:03,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*54:04,YYAGYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B*54:06,YYAGYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*54:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:09,YYAGYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*54:10,YYAGYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*54:11,YYAGYRNIYAQTDESNLYWTYNYYSWAVLAYTWY HLA-B*54:12,YYAGYRNIYAQTDENIAYWTYNLYTWAVLAYTWY HLA-B*54:13,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:14,YYAGYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*54:15,YYAGYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*54:16,YYAGYRNIYAQTDESNLYWTYDLYTWAVLAYTWY HLA-B*54:17,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:18,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:19,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:20,YYAGYRNIYAQTDESNLYWTYNLYTWAERAYTWY HLA-B*54:21,YYSGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:22,YYAGYRNIYAQTDESNLYWTYNLYSWAVLAYTWY HLA-B*54:23,YYAGYRNIYAQTEESNLYWTYNLYTWAVLAYTWY HLA-B*55:01,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:02,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:03,YYAEYRNIYAQTDVSNLYWTYNLYTWAELAYTWY HLA-B*55:04,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYTWY HLA-B*55:05,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:08,YYAEYRNIYAQTDESNLYLRYNYYTWAVLAYLWY HLA-B*55:09,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*55:10,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:11,YYAEYRNIYAQTDESNLYWMYNLYTWAELAYTWY HLA-B*55:12,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYTWY HLA-B*55:13,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYTWY HLA-B*55:14,YYAEYRNIYAQTDESNLYIVYDSYTWAELAYTWY HLA-B*55:15,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:16,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:17,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:18,YYAEYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*55:19,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:20,YYAEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*55:21,YYAEYRNIYAQTDESNLYWTYNLYTWAEWAYTWY HLA-B*55:22,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B*55:23,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*55:24,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYEWY HLA-B*55:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:27,YYAEYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*55:28,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:29,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:30,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:31,YYAEYRNIYAQTYESNLYWTYNLYTWAELAYTWY HLA-B*55:32,YYAEYRNIYAQTDESNLYWTYNSYTWAVLAYTWY HLA-B*55:33,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:34,YYAEYREISAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:35,YYAMYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:36,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:37,YYAEYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*55:38,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:39,YYAEYRNIYAQTDESNLYWTYNLHTWAVLAYTWY HLA-B*55:40,YYAEYREIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:41,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:42,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:43,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*56:01,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:02,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:03,YYAEYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*56:04,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:05,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:06,YYATYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:07,YYAEYRNIYAQTDENTAYWTYNLYTWAVLAYLWY HLA-B*56:08,YYAEYREKYGQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:09,YYAEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*56:10,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYTWY HLA-B*56:11,YYAEYRNIYAQTDESNLYIRYDFYTWAVLAYLWY HLA-B*56:12,YYAEYRNIYAQTDESNLYIRYNYYTWAVLAYTWY HLA-B*56:13,YYAEYRNIYAQTDESNLYWTYNLYTWAVDAYLWY HLA-B*56:14,YYAEYREKYRQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:15,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYLWY HLA-B*56:16,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:17,YYAEYRNIYANTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:18,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*56:20,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:21,YYAEYRNIYAQTDENIAYWTYNYYTWAELAYLWH HLA-B*56:22,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYLWY HLA-B*56:23,YYAEYRNIYANTYESNLYWTYNLYTWAVLAYTWY HLA-B*56:24,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYLWY HLA-B*56:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:27,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:29,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*57:01,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:02,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B*57:03,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:04,YYAMYGENMASTYENIAYIVYDDYTWAVRAYLWY HLA-B*57:05,YYAMYGENMASTYENIAYIRYNYYTWAVRAYLWY HLA-B*57:06,YYAMYGENMASTYENIAYIVYDSYIWAVLAYLWY HLA-B*57:07,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLSY HLA-B*57:08,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:09,YYAMYGENMASTYENIAYIVYNYYTWAEDAYLWY HLA-B*57:10,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:11,YYAMYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*57:12,YYAMYGENMASTYESNLYIVYNYYTWAVRAYLWY HLA-B*57:13,YYAMYGENMASTYENIAYIVYDSYTWAERAYEWY HLA-B*57:14,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWH HLA-B*57:15,YYAMYGENVASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:16,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:17,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:18,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:19,YYAMYGENMASTYENIAYIVYDSYTWAVRAYLWY HLA-B*57:20,YYAMYGKNMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:21,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:22,YYAMYGENMASTYENIAYIVYDSYTWAELAYLWY HLA-B*57:23,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:24,YYAMYGENMASTYENIAYIVYDSYTWAVDAYLWY HLA-B*57:25,YYAMYGENMASTYENIAYIVYDSYTWAVLAYEWY HLA-B*57:26,YYAMYGENMASTYENIAYIVYDSYTWAVLAYTWY HLA-B*57:27,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:29,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:30,YYAMYGENMASTYENIAYIVYDSYTWAARAYLWY HLA-B*57:31,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:32,YYAMYGENMASTYENIAYIVYHDYTWAVLAYLWY HLA-B*58:01,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:02,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:04,YYATYEENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:05,YYATYGENMASTYENIAYIRYDSYTLAALAYTWY HLA-B*58:06,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B*58:07,YYATYGENMASTYENIAYLWYDSYTWAVLAYLSY HLA-B*58:08,YYATYGENMASTYENIAYWTYNYYTWAELAYLWH HLA-B*58:09,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWH HLA-B*58:11,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:12,YYSTYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:13,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:14,YYATYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*58:15,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:16,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:18,YYATYGENMASTYENIAYLSYDSYTWAVLAYLWY HLA-B*58:19,YYATYGENMASTYENIAYIRYDSYTWAELAYLWY HLA-B*58:20,YYATYGENMASTYENIAYLRYNFYTWAVLTYTWY HLA-B*58:21,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:22,YYATYGENMASTYENIAYIRYDSYTWAVRAYLWY HLA-B*58:23,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:24,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:25,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:26,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:27,YYATYGENMASTYENIAYLSYNYYTWAVLAYEWY HLA-B*58:28,YYATYGENMASTYENIAYIRYNYYTWAVLAYLWY HLA-B*58:29,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:30,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*59:01,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*59:02,YYAEYRNIFTNTYENIAYWTYNYYTWAVLAYTWY HLA-B*59:03,YYAEYRNIFTNTYENIAYWTYNFYTWAVLAYTWY HLA-B*59:04,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*59:05,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*67:01,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B*67:02,YYSGYREKYRQADVSNLYLRYNFYTWAVLTYTWY HLA-B*73:01,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*73:02,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*78:01,YYATYRNIFTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:02,YYATYRNIFTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:03,YYATYRNICTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:04,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B*78:05,YYATYREISTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:06,YYATYREISTNTYENNLYWTYNYYTWAELAYLWH HLA-B*78:07,YYATYRNIFTNTDESNLYWTYNYYTWAELAYTWH HLA-B*81:01,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:02,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:03,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:05,YYSEYRNIFAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*82:01,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:02,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:03,YYSEYRNIYAQTDESNLYLRYNLYTWAVDAYLSY HLA-B*83:01,YYSEYRNIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-C*01:02,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:03,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:04,YFSGYREKYRQTDVSNLYLWCDSYTWAEWAYTWY HLA-C*01:05,YFSGYREKYRQTDVSNLYLRSDYYTWAERAYTWY HLA-C*01:06,YFSGYREKYRQTDVSNLYLWCDYYTWAVRAYTWY HLA-C*01:07,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:08,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:09,YFSGYREKYRQTDVSNLYLWCDYYTWAEWAYTWY HLA-C*01:10,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYEWY HLA-C*01:11,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:12,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C*01:13,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:14,YFSGYREKYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C*01:15,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:16,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:17,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:18,YFSGYREKYHQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:19,YFSGYREKYRQTDVCNLYLWCDYYTWAERAYTWY HLA-C*01:20,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:21,YFSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*01:22,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYTWY HLA-C*01:23,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:24,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:25,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:26,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:27,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:28,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:29,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTCY HLA-C*01:30,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWH HLA-C*01:31,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYMWY HLA-C*01:32,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:33,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:34,YFSGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*01:35,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYLWY HLA-C*01:36,YFSGYREKYRQTDVSNLYLRFDYYTWAERAYTWY HLA-C*01:38,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:39,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:40,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*02:02,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:03,YYAGYREKYRQTDVNKLYLRYDSYTWAVLAYEWY HLA-C*02:04,CYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYEWY HLA-C*02:06,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C*02:07,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C*02:08,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:09,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:10,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:11,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:12,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYEWY HLA-C*02:13,YYAGYREKYRQTDVNKLYLRYDSYTWAAWAYEWY HLA-C*02:14,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:15,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:16,YYAGYREKYRQTDVNKLYLRYDSYTWAELAYEWY HLA-C*02:17,YYAGYREKYRQTDVNKLYLWFDSYTWAEWAYEWY HLA-C*02:18,YYAGYREKYRQTDVNKLYLRYDSYTWAALAYEWY HLA-C*02:19,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:20,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:22,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYEWY HLA-C*02:23,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:24,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:26,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:27,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-C*02:28,YYAGYREKYRQTDVNKLYLRYDSYTWAVWAYEWY HLA-C*02:29,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:30,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:31,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:32,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYEWY HLA-C*02:33,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:34,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:35,YYAGYREKYRQTDVNKLHLRYDSYTWAEWAYEWY HLA-C*02:36,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:37,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:39,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:40,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*03:01,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:02,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:03,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:04,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:05,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:06,YYAGYREKYRQTDVSNLYIRYVYYTWAELAYLWY HLA-C*03:07,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:08,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:09,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:10,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:11,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:12,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:13,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:14,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C*03:15,YYAGYREKYRQADVNKLYLRYDSYTWAELAYLWY HLA-C*03:16,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C*03:17,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C*03:18,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:19,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:21,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:23,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:24,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:25,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:26,YYAGYREKYRQTDVSNLYIRYDFYTWAELAYLWY HLA-C*03:27,YYAGYREKYRQADVSNLYLSYDYYTWAELAYLWY HLA-C*03:28,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:29,YYAGYRENYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:30,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:31,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:32,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:33,YYAGYREKYRQTDVSNLCLRYDSYTWAELAYLWY HLA-C*03:34,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWY HLA-C*03:35,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:36,YYAGYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-C*03:37,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:38,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:39,YDSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:40,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:41,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:42,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:43,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:44,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:45,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:46,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:47,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:48,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:49,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:50,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:51,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWH HLA-C*03:52,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:53,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:54,YYAGYREKYRQTDVSNLYIRYDYYTWAELPYLWY HLA-C*03:55,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:56,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:57,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:58,YYAGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*03:59,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:60,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:61,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:62,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:63,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:64,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:65,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:66,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:67,YDAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:68,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:69,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:70,YYAGYREKYRQTDESNLYIRYDYYTWAELAYLWY HLA-C*03:71,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYLWY HLA-C*03:72,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:73,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:74,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:75,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:76,HYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:77,YYAGYREKYRQTDVSNLYIRYDYYTWAVLAYLWY HLA-C*03:78,YYAGYREKYRQTDVSNLYIRYDYYTWAEMAYLWY HLA-C*03:79,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:80,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:81,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:82,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:83,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:84,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:85,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:86,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*03:87,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:88,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:89,YYAGYREKYRQTDVSNLYLRFDSYTWAELAYLWY HLA-C*03:90,YYAGYREKYRQTDVSNLYIRSDYYTWAELAYLWY HLA-C*03:91,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:92,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:93,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:94,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*04:01,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:03,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:04,YSAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:05,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:06,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:07,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:08,YSAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C*04:10,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C*04:11,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:12,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:13,YSAGYREKYRQADVNKLYLRFNFYTWAALAYTWY HLA-C*04:14,YSAGYREKYRQADVNKLYLRFNFYTWAEQAYTWY HLA-C*04:15,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:16,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:17,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:18,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:19,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:20,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:23,YSAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C*04:24,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:25,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:26,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:27,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:28,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:29,YSAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C*04:30,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:31,YSAGYREKYRQADVNKLYLRFNFYTWVERAYTWY HLA-C*04:32,YSAGYREKYRQADVNKLYLRFNFYTWAERAYEWY HLA-C*04:33,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:34,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYLWY HLA-C*04:35,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:36,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:37,YSAGYREKYRQADVNKLYLWCNFYTWAERAYTWY HLA-C*04:38,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:39,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:40,YSAGYREKYRQADVNKLYFRFNFYTWAERAYTWY HLA-C*04:41,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:42,YDAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:43,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:44,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:45,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:46,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:47,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:48,YSAGYREKYRQADVNKLYLRFNFYTWAERPYTWY HLA-C*04:49,YSAGYWEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:50,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:51,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:52,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:53,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:54,YSAGYREKYRQADVNKLYLRFDSYTWAERAYTWY HLA-C*04:55,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:56,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:57,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:58,YSAGYREKYRQADVNKLYLRFNFYTLAALAYTWY HLA-C*04:60,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:61,YSAGYREKYRQADVNKLYLRFNFYTWAARAYTWY HLA-C*04:62,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:63,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:64,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:65,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:66,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:67,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:68,YSAGYREKYRQADVNKLYLRFNFYTWAAQAYTWY HLA-C*04:69,YSAGYGEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:70,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*05:01,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:03,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:04,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C*05:05,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:06,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:08,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C*05:09,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:10,YYAGYREKYRQTDVNKLYIRYNFYTWAERAYTWY HLA-C*05:11,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYTWY HLA-C*05:12,YYAGYREKYRQTDVNKLYLRYNFYTWAVRAYTWY HLA-C*05:13,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:14,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:15,YYAGYWEKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:16,YYAGYREKYRQTDVNKLYLWYNFYTWAERAYTWY HLA-C*05:17,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C*05:18,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:19,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:20,YYAGYREKYRQTDVNNLYLRYNFYTWAERAYTWY HLA-C*05:21,YYAGYREKYRQTDVNKLHLRYNFYTWAERAYTWY HLA-C*05:22,YYAGYREKYRQTDVNKLYLRYDFYTWAERAYTWY HLA-C*05:23,YYAGYREKYRQTDVNKLYLRYNFYTLAERAYTWY HLA-C*05:24,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:25,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:26,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:27,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYLWY HLA-C*05:28,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:29,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:30,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:31,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:32,YYAGYREKYRQTDVNRLYLRYNFYTWAERAYTWY HLA-C*05:33,YYAGCREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:34,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:35,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:36,YYAGYRENYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:37,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:38,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:39,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYLWY HLA-C*05:40,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:41,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:42,YYAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*05:43,YDAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:44,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:45,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*06:02,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:03,YYSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:04,YDSGYREKYRQADVNKLYLWYDSYTWAELAYTWY HLA-C*06:05,YDSGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*06:06,YDSGYREKYRQADVNKLYLWYDSYTWAERAYTWY HLA-C*06:07,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:08,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYEWY HLA-C*06:09,YDSGYREKYRQADVNKLYLWYNFYTWAEWAYTWY HLA-C*06:10,YDPGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:11,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*06:12,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:13,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:14,YDSGYREKYRQADVNKLYIWYDSYTWAEWAYTWY HLA-C*06:15,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:17,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:18,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:19,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:20,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:21,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:22,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:23,YDSGYREKYRQADVNKLYLWCDSYTWAEWAYTWY HLA-C*06:24,YDSGYREKYRQADVNKLYLWYDSYTWAEWAHTWY HLA-C*06:25,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:26,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:27,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:28,YDAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:29,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:30,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:31,YDSGYREKYRQADVNKLYLWYDSYTWAAWAYTWY HLA-C*06:32,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:33,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:34,YDSGYREKYRQADVNKLYLWYDFYTWAEWAYTWY HLA-C*06:35,YDSGYREKYRQADVNKLYIRSDSYTWAEWAYTWY HLA-C*06:36,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:37,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:38,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:39,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:40,YDSGYREKYRQADVNKLYLWYDSYTWAEWTYTWY HLA-C*06:41,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:42,YDSGYREKYRQADVNKLYLWYDSYTRAEWAYTWY HLA-C*06:43,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:44,YDSGYRENYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*06:45,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*07:01,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:02,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:03,YDSGYREKYRQADVSNLYLRSDSYTWAALAYLWY HLA-C*07:04,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:05,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C*07:06,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:07,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:08,YDSGYREKYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:09,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:10,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C*07:11,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:12,YDSGYREKYRQADVSNLYFRYDFYTWAADAYTWY HLA-C*07:13,YDSGYREKYRQADVSNLYLRSDFYTLAALAYTWY HLA-C*07:14,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:15,YDSGYREKYRQADVSNLYLRSDSYTLAALAYEWY HLA-C*07:16,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:17,YDSGYREKYRQADVSNLYLRSDSYTWAALAYTWY HLA-C*07:18,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:19,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:20,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:21,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:22,YDSGYRENYRQADVSNLYLRYDSYTLAAWAYTWY HLA-C*07:23,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:24,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:25,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:26,YYSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:27,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:28,YDSGYRENYRQADVSNLYLRYNFYTLAALAYTWY HLA-C*07:29,YDSGYREKYRQADVSNLYLRSDYYTLAALAYTWY HLA-C*07:30,YDSGYRENYRQADVSNLYLRYDSYTLAGLAYTWY HLA-C*07:31,YDSGYREKYRQADVSNLYLWYDSYTLAALAYTWY HLA-C*07:35,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:36,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:37,YDSGYREKYRQADVSNLYLRSDSYTLAARAYTWY HLA-C*07:38,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:39,YDSGYREKYRQTDVSNLYLRSDSYTLAALAYTWY HLA-C*07:40,YDSGYRENYRQTDVSNLYLRYDSYTLAALAYTWY HLA-C*07:41,YDSGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*07:42,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:43,YDSGYREKYRQADVSNLYIRYDSYTLAALAYTWY HLA-C*07:44,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:45,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:46,YDSEYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:47,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:48,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:49,YDSGYREKYRQADVNNLYLRSDSYTLAALAYTWY HLA-C*07:50,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:51,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:52,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:53,YDSGYRENYRQADVSNLYLRYDSYTLAAQAYTWY HLA-C*07:54,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:56,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:57,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:58,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:59,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:60,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:62,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:63,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:64,YSAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:65,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:66,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:67,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:68,YDSGYREKYRQADVSNLYLRSDSYTLAADAYTWY HLA-C*07:69,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:70,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:71,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:72,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:73,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:74,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:75,YDSGYREKYRQADVSNLHLRSDSYTLAALAYTWY HLA-C*07:76,YDSGYREKYRQADVNKLYLRSDSYTLAALAYTWY HLA-C*07:77,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:78,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:79,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:80,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:81,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:82,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:83,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:84,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:85,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:86,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:87,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:88,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:89,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:90,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:91,YDSGYRENYRQADVSNLYLRYDSYTLTALAYTWY HLA-C*07:92,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:93,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:94,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:95,YDSGYRENYRQADVSNLYLRYDSYTLAVLAYTWY HLA-C*07:96,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:97,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:99,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:100,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:101,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:102,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:103,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:105,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:106,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:107,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:108,YDSGYRENYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:109,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:110,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:111,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:112,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:113,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:114,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:115,YDSGYRENYRQADVSDLYLRYDSYTLAALAYTWY HLA-C*07:116,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:117,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:118,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:119,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:120,YDSGYRENYRQADVSNLYLRYDSYTLAALAYPWY HLA-C*07:122,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:123,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:124,YDSGYRENYRQADESNLYLRYDSYTLAALAYTWY HLA-C*07:125,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:126,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:127,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:128,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:129,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:130,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:131,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:132,DDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:133,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:134,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:135,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:136,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:137,YDSGYREKYRQADVSNLYLRSDSYTLAALTYTWY HLA-C*07:138,YDSGYREKYRQADVSNLYLRSDSYTLAAWAYTWY HLA-C*07:139,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:140,YDSGYRENYRQADVSNLYLRYDSYTWAVDAYTWY HLA-C*07:141,YDSGYRENYRQADVSNLYLRYDSYTWAALAYTWY HLA-C*07:142,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:143,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:144,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:145,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:146,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:147,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:148,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:149,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*08:01,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:02,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:03,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:04,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:05,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:06,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYAWY HLA-C*08:07,YYAGYREKYRQTDVSNLYLRYNFYTLAERAYTWY HLA-C*08:08,YYAGYREKYRQTDVSNLYLSYNFYTWATLAYTWY HLA-C*08:09,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:10,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C*08:11,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:12,YYAGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*08:13,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:14,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:15,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:16,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:17,YYAGYREKYCQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:18,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:19,YYAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*08:20,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:21,YYAGYREKYRQADVSNLYLRYNFYTWATLAYTWY HLA-C*08:22,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:23,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:24,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:25,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:27,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:28,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:29,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:30,YYAGYREKYRQTDVSNLYLRYNFYTWPERAYTWY HLA-C*08:31,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYEWY HLA-C*08:32,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:33,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:34,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:35,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*12:02,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:03,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:04,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*12:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:06,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:07,YYAGYREKYRQADVGNLYLWYDSYTWAEWAYTWY HLA-C*12:08,YYAGYRENYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:09,YYAGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*12:10,YYAGYREKYRQADVSNLYLRFDSYTWAEWAYTWY HLA-C*12:11,YYAGYREKYRQADVSNLYLWSDSYTWAEWAYTWY HLA-C*12:12,YYAGYREKYRQADESNLYLWYDSYTWAEWAYTWY HLA-C*12:13,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:14,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*12:15,YYAGYREKYRQADVSNLYLWYDLYTWAEWAYTWY HLA-C*12:16,YDSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:17,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:18,YYAGYREKYRQADVSNLYLRYDSYTWAELAYTWY HLA-C*12:19,YYAGYREKYRQADVSNLYLWYDSYTWAECAYTWY HLA-C*12:20,YYAGYREKYRQADVSNLYLWYDSYTWAELAYTWY HLA-C*12:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYTWY HLA-C*12:22,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:23,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:24,YYAGYREKYRQADVSNLYLWYDSYTWAERAYTWY HLA-C*12:25,YYAGYPEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:26,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:27,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:28,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:29,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:30,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:31,YYAGYREKYRQADVSNLYLWYNFYTWAEWAYTWY HLA-C*12:32,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:33,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:34,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:35,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:36,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:37,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:38,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:40,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:41,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C*12:43,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:44,YYAGYREKYRQADVSNLYIRYDSYTWAEWAYTWY HLA-C*14:02,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:03,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:04,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C*14:05,YSAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C*14:06,YSAGYREKYRQTDVSNLYLWFDSYTWAELAYTWY HLA-C*14:08,YSAGYREKYRQTDVSNLYPWFDSYTWAERAYTWY HLA-C*14:09,YSAGYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-C*14:10,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:11,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:12,YSAGYREKYRQTDVNKLYLWFDSYTWAERAYTWY HLA-C*14:13,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:14,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:15,YSAGYREKYRQTDVSNLYLWFDSYTWAALAYTWY HLA-C*14:16,YSAGYREKYRQTDVSNLYLWFDSYTWAEWAYTWY HLA-C*14:17,YSAGYREKYRQTDVSNLYLWFDSYTLAARAYTWY HLA-C*14:18,YSSGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:19,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:20,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYLWY HLA-C*15:02,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:03,YYAGYRENYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:04,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:05,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:06,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C*15:07,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C*15:08,YYAGYRENYRQTDVNKLYIRYDLYTWAERAYTWY HLA-C*15:09,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:10,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:11,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:12,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:13,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:15,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYLWY HLA-C*15:16,YYAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:17,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:18,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:19,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:20,YYAGYREKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:21,YYAGYRENYRQTDVSKLYIRYDLYTWAELAYTWY HLA-C*15:22,YYAGYRENYRQTDVNKLYLRYDFYTWAELAYTWY HLA-C*15:23,YDAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:24,YYAGYRENYRQTDVNKLYIRYNYYTWAELAYTWY HLA-C*15:25,YYAGYREKYRQADVSNLYIRYNFYTWAEDAYTSY HLA-C*15:26,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:27,YYAGYRNKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:28,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:29,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:30,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:31,YYAGYRENYRQTDVNKLYIRYDLYTWAALAYTWY HLA-C*15:33,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:34,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:35,YYAGYRENYRQTDVNKLHIRYDLYTWAELAYTWY HLA-C*16:01,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:02,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:04,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C*16:06,YYAGYREKYRQTDVSNLYLRSDSYTWAAQAYTWY HLA-C*16:07,YYAGYREKYRQTDVSNLYLRYDSYTWAAQAYTWY HLA-C*16:08,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:09,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:10,YYAGYREKYRQTDVSNLYLWYDDYTWAAQAYTWY HLA-C*16:11,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:12,YYAGYGEKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:13,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:14,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:15,YYAGYREKYRQADVSNLYLWYDSYTWAAQAYTWY HLA-C*16:17,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:18,YYAGYREKYRQTDVSNLYLWCDSYTWAAQAYTWY HLA-C*16:19,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:20,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:21,YDAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:22,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:23,YYAGYREKYRQTDVSNLYLWFDSYTWAAQAYTWY HLA-C*16:24,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:25,YYAGYREKYRQADVNKLYLWYDSYTWAAQAYTWY HLA-C*16:26,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*17:01,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:02,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:03,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:04,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:05,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:06,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:07,YYAGYREKYRQADVNKLYIRYNFYSLAELAYLWY HLA-C*18:01,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:02,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:03,YDSGYREKYRQADVNKLYLRFNFYTWAEWAYEWY ================================================ FILE: downloads-generation/models_class1_kim_benchmark/curate.py ================================================ """ Filter and combine various peptide/MHC datasets to derive a composite training set, optionally including eluted peptides identified by mass-spec. """ import sys import argparse import pandas from mhcflurry.common import normalize_allele_name def normalize_allele_name_or_return_unknown(s): result = normalize_allele_name( s, raise_on_error=False, default_value="UNKNOWN") parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data-kim2014", action="append", default=[], help="Path to Kim 2014-style affinity data") parser.add_argument( "--data-iedb", action="append", default=[], help="Path to IEDB-style affinity data (e.g. mhc_ligand_full.csv)") parser.add_argument( "--data-systemhc-atlas", action="append", default=[], help="Path to systemhc-atlas-style mass-spec data") parser.add_argument( "--data-abelin-mass-spec", action="append", default=[], help="Path to Abelin Immunity 2017 mass-spec hits") parser.add_argument( "--include-iedb-mass-spec", action="store_true", default=False, help="Include mass-spec observations in IEDB") parser.add_argument( "--out-csv", required=True, help="Result file") QUALITATIVE_TO_AFFINITY_AND_INEQUALITY = { "Negative": (5000.0, ">"), "Positive": (500.0, "<"), # used for mass-spec hits "Positive-High": (100.0, "<"), "Positive-Intermediate": (1000.0, "<"), "Positive-Low": (5000.0, "<"), } QUALITATIVE_TO_AFFINITY = dict( (key, value[0]) for (key, value) in QUALITATIVE_TO_AFFINITY_AND_INEQUALITY.items()) QUALITATIVE_TO_INEQUALITY = dict( (key, value[1]) for (key, value) in QUALITATIVE_TO_AFFINITY_AND_INEQUALITY.items()) EXCLUDE_IEDB_ALLELES = [ "HLA class I", "HLA class II", ] def load_data_kim2014(filename): df = pandas.read_table(filename) print("Loaded kim2014 data: %s" % str(df.shape)) df["measurement_source"] = "kim2014" df["measurement_value"] = df.meas df["measurement_type"] = (df.inequality == "=").map({ True: "quantitative", False: "qualitative", }) df["measurement_inequality"] = df.inequality df["original_allele"] = df.mhc df["peptide"] = df.sequence df["allele"] = df.mhc.map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( df.ix[df.allele == "UNKNOWN"]["mhc"].unique())) df = df.ix[df.allele != "UNKNOWN"] print("Loaded kim2014 data: %s" % str(df.shape)) return df def load_data_systemhc_atlas(filename, min_probability=0.99): df = pandas.read_csv(filename) print("Loaded systemhc atlas data: %s" % str(df.shape)) df["measurement_source"] = "systemhc-atlas" df["measurement_value"] = QUALITATIVE_TO_AFFINITY["Positive"] df["measurement_inequality"] = "<" df["measurement_type"] = "qualitative" df["original_allele"] = df.top_allele df["peptide"] = df.search_hit df["allele"] = df.top_allele.map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( str(x) for x in df.ix[df.allele == "UNKNOWN"]["top_allele"].unique())) df = df.loc[df.allele != "UNKNOWN"] print("Systemhc atlas data now: %s" % str(df.shape)) print("Dropping data points with probability < %f" % min_probability) df = df.loc[df.prob >= min_probability] print("Systemhc atlas data now: %s" % str(df.shape)) print("Removing duplicates") df = df.drop_duplicates(["allele", "peptide"]) print("Systemhc atlas data now: %s" % str(df.shape)) return df def load_data_abelin_mass_spec(filename): df = pandas.read_csv(filename) print("Loaded Abelin mass-spec data: %s" % str(df.shape)) df["measurement_source"] = "abelin-mass-spec" df["measurement_value"] = QUALITATIVE_TO_AFFINITY["Positive"] df["measurement_inequality"] = "<" df["measurement_type"] = "qualitative" df["original_allele"] = df.allele df["allele"] = df.original_allele.map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( str(x) for x in df.ix[df.allele == "UNKNOWN"]["allele"].unique())) df = df.loc[df.allele != "UNKNOWN"] print("Abelin mass-spec data now: %s" % str(df.shape)) print("Removing duplicates") df = df.drop_duplicates(["allele", "peptide"]) print("Abelin mass-spec data now: %s" % str(df.shape)) return df def load_data_iedb(iedb_csv, include_qualitative=True, include_mass_spec=False): iedb_df = pandas.read_csv(iedb_csv, skiprows=1, low_memory=False) print("Loaded iedb data: %s" % str(iedb_df.shape)) print("Selecting only class I") iedb_df = iedb_df.ix[ iedb_df["MHC allele class"].str.strip().str.upper() == "I" ] print("New shape: %s" % str(iedb_df.shape)) print("Dropping known unusuable alleles") iedb_df = iedb_df.ix[ ~iedb_df["Allele Name"].isin(EXCLUDE_IEDB_ALLELES) ] iedb_df = iedb_df.ix[ (~iedb_df["Allele Name"].str.contains("mutant")) & (~iedb_df["Allele Name"].str.contains("CD1")) ] iedb_df["allele"] = iedb_df["Allele Name"].map(normalize_allele_name_or_return_unknown) print("Dropping un-parseable alleles: %s" % ", ".join( iedb_df.ix[iedb_df.allele == "UNKNOWN"]["Allele Name"].unique())) iedb_df = iedb_df.ix[iedb_df.allele != "UNKNOWN"] print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) quantitative = iedb_df.ix[iedb_df["Units"] == "nM"].copy() quantitative["measurement_type"] = "quantitative" quantitative["measurement_inequality"] = "=" print("Quantitative measurements: %d" % len(quantitative)) qualitative = iedb_df.ix[iedb_df["Units"] != "nM"].copy() qualitative["measurement_type"] = "qualitative" print("Qualitative measurements: %d" % len(qualitative)) if not include_mass_spec: qualitative = qualitative.ix[ (~qualitative["Method/Technique"].str.contains("mass spec")) ].copy() qualitative["Quantitative measurement"] = ( qualitative["Qualitative Measure"].map(QUALITATIVE_TO_AFFINITY)) qualitative["measurement_inequality"] = ( qualitative["Qualitative Measure"].map(QUALITATIVE_TO_INEQUALITY)) print("Qualitative measurements (possibly after dropping MS): %d" % ( len(qualitative))) iedb_df = pandas.concat( ( ([quantitative]) + ([qualitative] if include_qualitative else [])), ignore_index=True) print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) print("Subselecting to valid peptides. Starting with: %d" % len(iedb_df)) iedb_df["Description"] = iedb_df.Description.str.strip() iedb_df = iedb_df.ix[ iedb_df.Description.str.match("^[ACDEFGHIKLMNPQRSTVWY]+$") ] print("Now: %d" % len(iedb_df)) print("Annotating last author and category") iedb_df["last_author"] = iedb_df.Authors.map( lambda x: ( x.split(";")[-1] .split(",")[-1] .split(" ")[-1] .strip() .replace("*", ""))).values iedb_df["category"] = ( iedb_df["last_author"] + " - " + iedb_df["Method/Technique"]).values train_data = pandas.DataFrame() train_data["peptide"] = iedb_df.Description.values train_data["measurement_value"] = iedb_df[ "Quantitative measurement" ].values train_data["measurement_source"] = iedb_df.category.values train_data["measurement_inequality"] = iedb_df.measurement_inequality.values train_data["allele"] = iedb_df["allele"].values train_data["original_allele"] = iedb_df["Allele Name"].values train_data["measurement_type"] = iedb_df["measurement_type"].values train_data = train_data.drop_duplicates().reset_index(drop=True) return train_data def run(): args = parser.parse_args(sys.argv[1:]) dfs = [] for filename in args.data_iedb: df = load_data_iedb(filename, include_mass_spec=args.include_iedb_mass_spec) dfs.append(df) for filename in args.data_kim2014: df = load_data_kim2014(filename) df["allele_peptide"] = df.allele + "_" + df.peptide # Give precedence to IEDB data. if dfs: iedb_df = dfs[0] iedb_df["allele_peptide"] = iedb_df.allele + "_" + iedb_df.peptide print("Dropping kim2014 data present in IEDB.") df = df.ix[ ~df.allele_peptide.isin(iedb_df.allele_peptide) ] print("Kim2014 data now: %s" % str(df.shape)) dfs.append(df) for filename in args.data_systemhc_atlas: df = load_data_systemhc_atlas(filename) dfs.append(df) for filename in args.data_abelin_mass_spec: df = load_data_abelin_mass_spec(filename) dfs.append(df) df = pandas.concat(dfs, ignore_index=True) print("Combined df: %s" % (str(df.shape))) print("Removing combined duplicates") df = df.drop_duplicates(["allele", "peptide", "measurement_value"]) print("New combined df: %s" % (str(df.shape))) df = df[[ "allele", "peptide", "measurement_value", "measurement_inequality", "measurement_type", "measurement_source", "original_allele", ]].sort_values(["allele", "peptide"]).dropna() print("Final combined df: %s" % (str(df.shape))) df.to_csv(args.out_csv, index=False) print("Wrote: %s" % args.out_csv) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/models_class1_kim_benchmark/generate_hyperparameters.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout from copy import deepcopy from yaml import dump base_hyperparameters = { ########################################## # ENSEMBLE SIZE ########################################## "n_models": 4, ########################################## # OPTIMIZATION ########################################## "max_epochs": 500, "patience": 20, "early_stopping": True, "validation_split": 0.1, "minibatch_size": None, "loss": "custom:mse_with_inequalities", ########################################## # RANDOM NEGATIVE PEPTIDES ########################################## "random_negative_rate": 0.0, "random_negative_constant": 25, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, ########################################## # PEPTIDE REPRESENTATION ########################################## # One of "one-hot", "embedding", or "BLOSUM62". "peptide_amino_acid_encoding": "BLOSUM62", "use_embedding": False, # maintained for backward compatability "embedding_output_dim": 8, # only used if using embedding "kmer_size": 15, ########################################## # NEURAL NETWORK ARCHITECTURE ########################################## "locally_connected_layers": [ { "filters": 8, "activation": "tanh", "kernel_size": 3 } ], "activation": "tanh", "output_activation": "sigmoid", "layer_sizes": [16], "dense_layer_l1_regularization": None, "batch_normalization": False, "dropout_probability": 0.0, ########################################## # TRAINING Data ########################################## "train_data": {"subset": "all", "pretrain_min_points": 1000}, } grid = [] for train_subset in ["all", "quantitative"]: for minibatch_size in [128]: for dense_layer_size in [8, 16, 32, 64]: for l1 in [0.0, 0.001]: for num_lc in [0, 1, 2]: for lc_kernel_size in [3, 5]: new = deepcopy(base_hyperparameters) new["minibatch_size"] = minibatch_size new["train_data"]["subset"] = train_subset new["layer_sizes"] = [dense_layer_size] new["dense_layer_l1_regularization"] = l1 (lc_layer,) = new["locally_connected_layers"] lc_layer['kernel_size'] = lc_kernel_size if num_lc == 0: new["locally_connected_layers"] = [] elif num_lc == 1: new["locally_connected_layers"] = [lc_layer] elif num_lc == 2: new["locally_connected_layers"] = [lc_layer, deepcopy(lc_layer)] if not grid or new not in grid: grid.append(new) dump(grid, stdout) ================================================ FILE: downloads-generation/models_class1_kim_benchmark/write_validation_data.py ================================================ """ Write and summarize model validation data, which is obtained by taking a full dataset and removing the data used for training. """ import argparse import sys from os.path import abspath import pandas import numpy from sklearn.model_selection import StratifiedKFold parser = argparse.ArgumentParser(usage = __doc__) parser.add_argument( "--include", metavar="INPUT.csv", nargs="+", help="Input CSV to include") parser.add_argument( "--exclude", metavar="INPUT.csv", nargs="+", help="Input CSV to exclude") parser.add_argument( "--out-data", metavar="RESULT.csv", help="Output dadta CSV") parser.add_argument( "--out-summary", metavar="RESULT.csv", help="Output summary CSV") parser.add_argument( "--mass-spec-regex", metavar="REGEX", default="mass[- ]spec", help="Regular expression for mass-spec data. Runs on measurement_source col." "Default: %(default)s.") parser.add_argument( "--only-alleles-present-in-exclude", action="store_true", default=False, help="Filter to only alleles that are present in files given by --exclude. " "Useful for filtering to only alleles supported by a predictor, where the " "training data for the predictor is given by --exclude.") def run(argv): args = parser.parse_args(argv) dfs = [] for input in args.include: df = pandas.read_csv(input) dfs.append(df) df = pandas.concat(dfs, ignore_index=True) print("Loaded data with shape: %s" % str(df.shape)) del dfs df = df.ix[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) if args.exclude: exclude_dfs = [] for exclude in args.exclude: exclude_df = pandas.read_csv(exclude) exclude_dfs.append(exclude_df) exclude_df = pandas.concat(exclude_dfs, ignore_index=True) del exclude_dfs df["_key"] = df.allele + "__" + df.peptide exclude_df["_key"] = exclude_df.allele + "__" + exclude_df.peptide df["_excluded"] = df._key.isin(exclude_df._key.unique()) print("Excluding measurements per allele (counts): ") print(df.groupby("allele")._excluded.sum()) print("Excluding measurements per allele (fractions): ") print(df.groupby("allele")._excluded.mean()) df = df.loc[~df._excluded] del df["_excluded"] del df["_key"] if args.only_alleles_present_in_exclude: df = df.loc[df.allele.isin(exclude_df.allele.unique())] df["mass_spec"] = df.measurement_source.str.contains(args.mass_spec_regex) df.loc[df.mass_spec , "measurement_inequality"] = "mass_spec" if args.out_summary: summary_df = df.groupby( ["allele", "measurement_inequality"] )["measurement_value"].count().unstack().fillna(0).astype(int) summary_df["total"] = summary_df.sum(1) summary_df.to_csv(args.out_summary) print("Wrote: %s" % args.out_summary) if args.out_data: df.to_csv(args.out_data, index=False) print("Wrote: %s" % args.out_data) if __name__ == '__main__': run(sys.argv[1:]) ================================================ FILE: downloads-generation/models_class1_minimal/GENERATE.sh ================================================ #!/bin/bash # # Model select standard MHCflurry Class I models, limiting to 1 model per allele. # set -e set -x DOWNLOAD_NAME=models_class1_minimal SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/write_validation_data.py . mkdir models GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" python ./write_validation_data.py \ --include "$(mhcflurry-downloads path data_curated)/curated_training_data.with_mass_spec.csv.bz2" \ --exclude "$(mhcflurry-downloads path models_class1_unselected)/models/train_data.csv.bz2" \ --only-alleles-present-in-exclude \ --out-data test.csv \ --out-summary test.summary.csv wc -l test.csv time mhcflurry-class1-select-allele-specific-models \ --data test.csv \ --models-dir "$(mhcflurry-downloads path models_class1_unselected)/models" \ --out-models-dir models \ --scoring combined:mass-spec,mse,consensus \ --consensus-num-peptides-per-length 10000 \ --combined-min-models 1 \ --combined-max-models 1 \ --unselected-accuracy-scorer combined:mass-spec,mse \ --unselected-accuracy-percentile-threshold 95 \ --mass-spec-min-measurements 500 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 1 time mhcflurry-calibrate-percentile-ranks \ --models-dir models \ --num-peptides-per-length 100000 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 # To save space in the final download rm test.csv cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_minimal/README.md ================================================ # Class I allele-specific models (minimal: ensemble size of 1) This download contains "minimal" MHC Class I MHCflurry predictors consisting of a single model per allele. These predictors are expected to have slightly lower accuracy than the standard ensembles (models_class1) but are small and fast. Useful for testing. To download these models and set them as the default predictor, run: ``` $ mhcflurry-downloads fetch models_class1_minimal $ export MHCFLURRY_DEFAULT_CLASS1_MODELS=$(mhcflurry-downloads path models_class1_minimal)/models ``` ================================================ FILE: downloads-generation/models_class1_pan/GENERATE.WITH_HPC_CLUSTER.sh ================================================ bash GENERATE.sh cluster ================================================ FILE: downloads-generation/models_class1_pan/GENERATE.sh ================================================ #!/bin/bash # # Train pan-allele MHCflurry Class I models. Supports re-starting a failed run. # # Usage: GENERATE.sh # # cluster mode uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # set -e set -x DOWNLOAD_NAME=models_class1_pan SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") if [ "$1" != "cluster" ] then GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" if [ "$GPUS" -eq "0" ]; then NUM_JOBS=${NUM_JOBS-1} else NUM_JOBS=${NUM_JOBS-$GPUS} fi echo "Num jobs: $NUM_JOBS" PARALLELISM_ARGS+=" --num-jobs $NUM_JOBS --max-tasks-per-worker 1 --gpus $GPUS --max-workers-per-gpu 1" else PARALLELISM_ARGS+=" --cluster-parallelism --cluster-max-retries 1 --cluster-submit-command bsub --cluster-results-workdir $HOME/mhcflurry-scratch --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.lsf" fi mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 cp $SCRIPT_DIR/additional_alleles.txt . if [ "$2" != "continue-incomplete" ] then cp $SCRIPT_DIR/generate_hyperparameters.py . python generate_hyperparameters.py > hyperparameters.yaml fi cp $SCRIPT_DIR/reassign_mass_spec_training_data.py . python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --set-measurement-value 100 \ --out-csv "$(pwd)/train_data.csv" bzip2 -f "$(pwd)/train_data.csv" TRAINING_DATA="$(pwd)/train_data.csv.bz2" for kind in combined do CONTINUE_INCOMPLETE_ARGS="" if [ "$2" == "continue-incomplete" ] && [ -d "models.unselected.${kind}" ] then echo "Will continue existing run: $kind" CONTINUE_INCOMPLETE_ARGS="--continue-incomplete" fi ALLELE_SEQUENCES="$(mhcflurry-downloads path allele_sequences)/allele_sequences.csv" HYPERPARAMETERS="hyperparameters.yaml" mhcflurry-class1-train-pan-allele-models \ --data "$TRAINING_DATA" \ --allele-sequences "$ALLELE_SEQUENCES" \ --pretrain-data "$(mhcflurry-downloads path random_peptide_predictions)/predictions.csv.bz2" \ --held-out-measurements-per-allele-fraction-and-max 0.25 100 \ --num-folds 4 \ --hyperparameters "$HYPERPARAMETERS" \ --out-models-dir $(pwd)/models.unselected.${kind} \ --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ $PARALLELISM_ARGS $CONTINUE_INCOMPLETE_ARGS done echo "Done training. Beginning model selection." for kind in combined do MODELS_DIR="models.unselected.${kind}" # Older method calibrated only particular alleles. We are now calibrating # all alleles, so this is commented out. #ALLELE_LIST=$(bzcat "$MODELS_DIR/train_data.csv.bz2" | cut -f 1 -d , | grep -v allele | uniq | sort | uniq) #ALLELE_LIST+=$(echo " " $(cat additional_alleles.txt | grep -v '#') ) mhcflurry-class1-select-pan-allele-models \ --data "$MODELS_DIR/train_data.csv.bz2" \ --models-dir "$MODELS_DIR" \ --out-models-dir models.${kind} \ --min-models 2 \ --max-models 8 \ $PARALLELISM_ARGS cp "$MODELS_DIR/train_data.csv.bz2" "models.${kind}/train_data.csv.bz2" # We are now calibrating all alleles. # Previously had argument: --allele $ALLELE_LIST time mhcflurry-calibrate-percentile-ranks \ --models-dir models.${kind} \ --match-amino-acid-distribution-data "$MODELS_DIR/train_data.csv.bz2" \ --motif-summary \ --num-peptides-per-length 100000 \ --alleles-per-work-chunk 10 \ --verbosity 1 \ $PARALLELISM_ARGS done cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000M "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* # Write out just the selected models # Move unselected into a hidden dir so it is excluded in the glob (*). mkdir .ignored mv models.unselected.* .ignored/ RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.selected.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * mv .ignored/* . && rmdir .ignored echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/models_class1_pan/README.md ================================================ # Class I pan-allele models (ensemble) This download contains trained MHC Class I MHCflurry models before model selection. To generate this download run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/models_class1_pan/additional_alleles.txt ================================================ # Additional alleles besides those in the training data to include in percentile rank calibration HLA-C*02:10 HLA-A*02:20 ================================================ FILE: downloads-generation/models_class1_pan/cluster_submit_script_header.mssm_hpc.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q gpu # queue #BSUB -gpu "num=1:mode=exclusive_process:mps=no:j_exclusive=yes" #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 46:00 # walltime in HH:MM #BSUB -R rusage[mem=30000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/mhcflurry-conda-environment/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 #export TF_GPU_ALLOCATOR=cuda_malloc_async free -m module add cuda/11.8.0 cudnn/8.9.5-11 module list nvidia-smi export XLA_FLAGS=--xla_gpu_cuda_data_dir=$CUDA_PATH #export XLA_FLAGS='--xla_compile=False' python -c 'import tensorflow as tf ; print("GPU AVAILABLE" if tf.test.is_gpu_available() else "GPU NOT AVAILABLE")' env cd {work_dir} ================================================ FILE: downloads-generation/models_class1_pan/generate_hyperparameters.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout from copy import deepcopy from yaml import dump base_hyperparameters = { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [1024, 512], 'learning_rate': 0.001, 'locally_connected_layers': [], 'topology': 'feedfoward', 'loss': 'custom:mse_with_inequalities', 'max_epochs': 5000, 'minibatch_size': 128, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', "patience": 20, "min_delta": 0.0, 'peptide_encoding': { 'vector_encoding_name': 'BLOSUM62', 'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, }, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 30000.0, 'random_negative_constant': 1, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 1.0, 'random_negative_method': 'by_allele_equalize_nonbinders', 'random_negative_binder_threshold': 500.0, 'train_data': { 'pretrain': True, 'pretrain_peptides_per_epoch': 64, 'pretrain_steps_per_epoch': 256, 'pretrain_patience': 2, 'pretrain_min_delta': 0.0001, 'pretrain_max_val_loss': 0.10, 'pretrain_max_epochs': 50, 'pretrain_min_epochs': 5, }, 'validation_split': 0.1, 'data_dependent_initialization_method': "lsuv", } grid = [] for layer_sizes in [[512, 256], [512, 512], [1024, 512], [1024, 1024]]: l1_base = 0.0000001 for l1 in [l1_base, l1_base / 10, l1_base / 100, l1_base / 1000, 0.0]: new = deepcopy(base_hyperparameters) new["topology"] = 'feedforward' new["layer_sizes"] = layer_sizes new["dense_layer_l1_regularization"] = l1 if not grid or new not in grid: grid.append(new) for layer_sizes in [[256, 512], [256, 256, 512], [256, 512, 512]]: l1_base = 0.0000001 for l1 in [l1_base, l1_base / 10, l1_base / 100, l1_base / 1000, 0.0]: new = deepcopy(base_hyperparameters) new["topology"] = 'with-skip-connections' new["layer_sizes"] = layer_sizes new["dense_layer_l1_regularization"] = l1 if not grid or new not in grid: grid.append(new) dump(grid, stdout) ================================================ FILE: downloads-generation/models_class1_pan/reassign_mass_spec_training_data.py ================================================ """ Reassign affinity values for mass spec data """ import sys import os import argparse import pandas parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument("data", metavar="CSV", help="Training data") parser.add_argument("--ms-only", action="store_true", default=False) parser.add_argument("--drop-negative-ms", action="store_true", default=False) parser.add_argument("--set-measurement-value", type=float) parser.add_argument("--out-csv") pandas.set_option('display.max_columns', 500) def go(args): df = pandas.read_csv(args.data) print(df) if args.drop_negative_ms: bad = df.loc[ (df.measurement_kind == "mass_spec") & (df.measurement_inequality != "<") ] print("Dropping ", len(bad)) df = df.loc[~df.index.isin(bad.index)].copy() if args.ms_only: print("Filtering to MS only") df = df.loc[df.measurement_kind == "mass_spec"].copy() if args.set_measurement_value is not None: indexer = df.measurement_kind == "mass_spec" df.loc[ indexer, "measurement_value" ] = args.set_measurement_value print("Reassigned:") print(df.loc[indexer]) if args.out_csv: out_csv = os.path.abspath(args.out_csv) df.to_csv(out_csv, index=False) print("Wrote", out_csv) if __name__ == "__main__": go(parser.parse_args(sys.argv[1:])) ================================================ FILE: downloads-generation/models_class1_pan_variants/GENERATE.WITH_HPC_CLUSTER.sh ================================================ bash GENERATE.sh cluster ================================================ FILE: downloads-generation/models_class1_pan_variants/GENERATE.sh ================================================ #!/bin/bash # # Uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # # Usage: GENERATE.sh # set -e set -x DOWNLOAD_NAME=models_class1_pan_variants SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") if [ "$1" != "cluster" ] then GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" if [ "$GPUS" -eq "0" ]; then NUM_JOBS=${NUM_JOBS-1} else NUM_JOBS=${NUM_JOBS-$GPUS} fi echo "Num jobs: $NUM_JOBS" PARALLELISM_ARGS+=" --num-jobs $NUM_JOBS --max-tasks-per-worker 1 --gpus $GPUS --max-workers-per-gpu 1" else PARALLELISM_ARGS+=" --cluster-parallelism --cluster-max-retries 3 --cluster-submit-command bsub --cluster-results-workdir $HOME/mhcflurry-scratch --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.gpu.lsf" fi mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 if [ "$2" != "continue-incomplete" ] then cp $SCRIPT_DIR/generate_hyperparameters.production.py . cp $SCRIPT_DIR/generate_hyperparameters.py . cp $SCRIPT_DIR/reassign_mass_spec_training_data.py . cp $SCRIPT_DIR/exclude_data_from_training.py . python generate_hyperparameters.production.py > hyperparameters.production.yaml python generate_hyperparameters.py hyperparameters.production.yaml no_pretrain > hyperparameters.no_pretrain.yaml python generate_hyperparameters.py hyperparameters.no_pretrain.yaml single_hidden > hyperparameters.single_hidden_no_pretrain.yaml python generate_hyperparameters.py hyperparameters.production.yaml compact_peptide > hyperparameters.compact_peptide.yaml fi #VARIANTS=( no_additional_ms_ms_only_0nm ms_only_0nm no_additional_ms_0nm 0nm 500nm no_additional_ms no_pretrain compact_peptide 34mer_sequence single_hidden_no_pretrain affinity_only ) VARIANTS=( no_additional_ms ) for kind in "${VARIANTS[@]}" do CONTINUE_INCOMPLETE_ARGS="" if [ "$2" == "continue-incomplete" ] && [ -d "models.unselected.${kind}" ] then echo "Will continue existing run: $kind" CONTINUE_INCOMPLETE_ARGS="--continue-incomplete" fi ALLELE_SEQUENCES="$(mhcflurry-downloads path allele_sequences)/allele_sequences.csv" HYPERPARAMETERS=hyperparameters.$kind.yaml if [ "$kind" == "34mer_sequence" ] then ALLELE_SEQUENCES="$(mhcflurry-downloads path allele_sequences)/allele_sequences.no_differentiation.csv" HYPERPARAMETERS=hyperparameters.production.yaml fi TRAINING_DATA="$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" if [ "$kind" == "no_additional_ms" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.no_additional_ms.csv.bz2" \ --set-measurement-value 100 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "no_additional_ms_ms_only_0nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.no_additional_ms.csv.bz2" \ --set-measurement-value 0 \ --drop-negative-ms \ --ms-only \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "no_additional_ms_0nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.no_additional_ms.csv.bz2" \ --set-measurement-value 0 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "0nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --set-measurement-value 0 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "500nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --set-measurement-value 500 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "50nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --set-measurement-value 50 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "ms_only_0nm" ] then TRAINING_DATA="train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.mass_spec.csv.bz2" \ --set-measurement-value 0 \ --drop-negative-ms \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "affinity_only" ] then TRAINING_DATA="$(mhcflurry-downloads path data_curated)/curated_training_data.affinity.csv.bz2" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "exclude_epitopes" ] then TRAINING_DATA="train_data.$kind.csv" python exclude_data_from_training.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --remove-filename "$(mhcflurry-downloads path data_published)/epitopes/30377561/2018ONCOIMM0037R-file002.xlsx" \ --remove-kind 30377561 \ --out "$TRAINING_DATA" \ --out-removed "removed_train_data.$kind.csv" HYPERPARAMETERS=hyperparameters.production.yaml fi if [ "$kind" == "exclude_epitopes_50nm" ] then TRAINING_DATA="train_data.$kind.csv" python exclude_data_from_training.py \ "$(mhcflurry-downloads path data_curated)/curated_training_data.csv.bz2" \ --remove-filename "$(mhcflurry-downloads path data_published)/epitopes/30377561/2018ONCOIMM0037R-file002.xlsx" \ --remove-kind 30377561 \ --out "$TRAINING_DATA" \ --out-removed "removed_train_data.$kind.csv" python reassign_mass_spec_training_data.py \ "$TRAINING_DATA" \ --set-measurement-value 50 \ --out-csv "$TRAINING_DATA" HYPERPARAMETERS=hyperparameters.production.yaml fi mhcflurry-class1-train-pan-allele-models \ --data "$TRAINING_DATA" \ --allele-sequences "$ALLELE_SEQUENCES" \ --pretrain-data "$(mhcflurry-downloads path random_peptide_predictions)/predictions.csv.bz2" \ --held-out-measurements-per-allele-fraction-and-max 0.25 100 \ --num-folds 4 \ --hyperparameters "$HYPERPARAMETERS" \ --out-models-dir $(pwd)/models.unselected.${kind} \ --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ $PARALLELISM_ARGS $CONTINUE_INCOMPLETE_ARGS done echo "Done training. Beginning model selection." for kind in "${VARIANTS[@]}" do MODELS_DIR="models.unselected.${kind}" mhcflurry-class1-select-pan-allele-models \ --data "$MODELS_DIR/train_data.csv.bz2" \ --models-dir "$MODELS_DIR" \ --out-models-dir models.${kind} \ --min-models 2 \ --max-models 8 \ $PARALLELISM_ARGS cp "$MODELS_DIR/train_data.csv.bz2" "models.${kind}/train_data.csv.bz2" done cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000M "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* # Write out just the selected models # Move unselected into a hidden dir so it is excluded in the glob (*). mkdir .ignored mv models.unselected.* .ignored/ RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.selected.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * mv .ignored/* . && rmdir .ignored echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/models_class1_pan_variants/cluster_submit_script_header.mssm_hpc.gpu.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q gpu # queue #BSUB -R rusage[ngpus_excl_p=1] # 1 exclusive GPU #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 46:00 # walltime in HH:MM #BSUB -R rusage[mem=30000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/.conda/envs/py36b/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 export NETMHC_BUNDLE_HOME=$HOME/sinai/git/netmhc-bundle export NETMHC_BUNDLE_TMPDIR=/local/JOBS/netmhctmp-{work_item_num} export PATH=$NETMHC_BUNDLE_HOME/bin:$PATH free -m module add cuda/10.1.105 cudnn/7.6.5 module list # python -c 'import tensorflow as tf ; print("GPU AVAILABLE" if tf.test.is_gpu_available() else "GPU NOT AVAILABLE")' env cd {work_dir} ================================================ FILE: downloads-generation/models_class1_pan_variants/exclude_data_from_training.py ================================================ """ Extract allele/peptide pairs to exclude from training data. """ import sys import os import argparse import pandas from mhcflurry.common import normalize_allele_name def normalize_allele_name_or_return_unknown(s): return normalize_allele_name( s, raise_on_error=False, default_value="UNKNOWN") parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument("data", metavar="CSV", help="Training data") parser.add_argument( "--remove-filename", action="append", default=[], metavar="NAME", help="Data to drop", required=True) parser.add_argument( "--remove-kind", action="append", default=[], metavar="KIND", help="Format of data to drop. For published data, use the PMID.", choices=[ "30377561" # Koşaloğlu-Yalçın, ..., Peters. Oncoimmunology 2018 [PMID 30377561] ], required=True) parser.add_argument("--out", metavar="CSV", help="Result data path") parser.add_argument( "--out-removed", metavar="CSV", help="Write removed data to given path") pandas.set_option('display.max_columns', 500) LOADERS = {} def load_30377561(filename): # Koşaloğlu-Yalçın, ..., Peters. Oncoimmunology 2018 [PMID 30377561] dfs = pandas.read_excel(filename, sheet_name=None) df1 = dfs['Supp Table 5 positive & random'] result_df = [] result_df.append(df1.rename( columns={ "mt.pep": "peptide", "hla": "allele", })[["allele", "peptide"]]) result_df.append(df1.rename( columns={ "wt.pep": "peptide", "hla": "allele", })[["allele", "peptide"]]) df2 = dfs["Supp Table 4 viral epitopes"] result_df.append( df2.rename( columns={ "Epitope": "peptide", "Restriction": "allele", })[["allele", "peptide"]]) result_df = pandas.concat(result_df, ignore_index=True) return result_df LOADERS["30377561"] = load_30377561 def go(args): df = pandas.read_csv(args.data) print("Read training data of length %d: " % len(df)) print(df) df["allele_peptide"] = df.allele + "~" + df.peptide if len(args.remove_kind) != len(args.remove_filename): parser.error( "Number of arguments mismatch: --remove-kind [%d] != " "--remove-filename [%d]" % ( len(args.remove_kind), len(args.remove_filename))) removed = [] for (i, (kind, path)) in enumerate( zip(args.remove_kind, args.remove_filename)): print( "Processing file %d / %d: %s %s" % ( i + 1, len(args.remove_kind), kind, path)) to_remove = LOADERS[kind](path) print("Remove data contains %d entries" % len(to_remove)) to_remove["normalized_allele"] = to_remove.allele.map( normalize_allele_name_or_return_unknown) remove_allele_peptides = set( to_remove.normalized_allele + "~" + to_remove.peptide) remove_mask = df.allele_peptide.isin(remove_allele_peptides) print("Will remove %d entries." % remove_mask.sum()) removed.append(df.loc[remove_mask].copy()) df = df.loc[~remove_mask].copy() print("New training data size: %d" % len(df)) print("Done processing.") removed_df = pandas.concat(removed) print("Removed %d entries in total:" % len(removed_df)) print(removed_df) if args.out_removed: removed_df.to_csv(args.out_removed, index=False) print("Wrote: ", args.out_removed) if args.out: df.to_csv(args.out, index=False) print("Wrote: ", args.out) if __name__ == "__main__": go(parser.parse_args(sys.argv[1:])) ================================================ FILE: downloads-generation/models_class1_pan_variants/generate_hyperparameters.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout, argv from copy import deepcopy from yaml import dump, load import argparse parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "production_hyperparameters", metavar="data.json", help="Production (i.e. standard) hyperparameters grid.") parser.add_argument( "kind", choices=('single_hidden', 'no_pretrain', 'compact_peptide'), help="Hyperameters variant to output") args = parser.parse_args(argv[1:]) with open(args.production_hyperparameters) as fd: production_hyperparameters_list = load(fd) def transform_to_single_hidden(hyperparameters): result = [] for size in [64, 128, 256, 1024]: new_hyperparameters = deepcopy(hyperparameters) new_hyperparameters['layer_sizes'] = [size] result.append(new_hyperparameters) return result def transform_to_no_pretrain(hyperparameters): result = deepcopy(hyperparameters) result['train_data']['pretrain'] = False return [result] def transform_to_compact_peptide(hyperparameters): result = deepcopy(hyperparameters) result['peptide_encoding']['alignment_method'] = 'left_pad_right_pad' return [result] TRANSFORMS={ "single_hidden": transform_to_single_hidden, "no_pretrain": transform_to_no_pretrain, "compact_peptide": transform_to_compact_peptide, } transform = TRANSFORMS[args.kind] result_list = [] for item in production_hyperparameters_list: results = transform(item) for result_item in results: if result_item not in result_list: result_list.append(result_item) dump(result_list, stdout) ================================================ FILE: downloads-generation/models_class1_presentation/GENERATE.sh ================================================ #!/bin/bash # # # Usage: GENERATE.sh # # cluster mode uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # set -e set -x DOWNLOAD_NAME=models_class1_presentation SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status mhcflurry-downloads info cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 if [ "$2" == "continue-incomplete" ] && [ -f "train_data.csv.bz2" ] then echo "Reusing existing training data" else cp $SCRIPT_DIR/make_train_data.py . time python make_train_data.py \ --hits "$(mhcflurry-downloads path models_class1_processing)/hits_with_tpm.csv.bz2" \ --proteome-peptides "$(mhcflurry-downloads path models_class1_processing)/proteome_peptides.csv.bz2" \ --decoys-per-hit 2 \ --exclude-pmid 31844290 31495665 31154438 \ --only-format MULTIALLELIC \ --sample-fraction 0.1 \ --out "$(pwd)/train_data.csv" bzip2 -f train_data.csv fi rm -rf commands mkdir commands if [ "$2" == "continue-incomplete" ] && [ -f "models/weights.csv" ] then echo "Reusing existing trained predictor" else echo time mhcflurry-class1-train-presentation-models \ --data "$(pwd)/train_data.csv.bz2" \ --affinity-predictor \""$(mhcflurry-downloads path models_class1_pan)/models.combined"\" \ --processing-predictor-with-flanks \""$(mhcflurry-downloads path models_class1_processing)/models.selected.short_flanks"\" \ --processing-predictor-without-flanks \""$(mhcflurry-downloads path models_class1_processing)/models.selected.no_flank"\" \ --out-models-dir "$(pwd)/models" >> commands/train.sh fi if [ "$2" == "continue-incomplete" ] && [ -f "models/percent_ranks.csv" ] then echo "Reusing existing percentile ranks" else echo time mhcflurry-calibrate-percentile-ranks \ --models-dir "$(pwd)/models" \ --match-amino-acid-distribution-data \""$(mhcflurry-downloads path models_class1_pan)/models.combined/train_data.csv.bz2"\" \ --alleles-file \""$(mhcflurry-downloads path models_class1_pan)/models.combined/train_data.csv.bz2"\" \ --predictor-kind class1_presentation \ --num-peptides-per-length 10000 \ --alleles-per-genotype 1 \ --num-genotypes 50 \ --verbosity 1 >> commands/train.sh fi ls -lh commands if [ "$1" != "cluster" ] then echo "Running locally" for i in $(ls commands/*.sh) do echo "# *******" echo "# Command $i" cat $i bash $i done else echo "Running on cluster" for i in $(ls commands/*.sh) do echo "# *******" echo "# Command $i" cat $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.lsf > ${i}.lsf echo cd "$(pwd)" >> ${i}.lsf cat $i >> ${i}.lsf cat ${i}.lsf bsub -K < "${i}.lsf" & done wait fi for i in $(ls commands/*.sh) do mv "$i" "${i}.FINISHED" done cp "$(mhcflurry-downloads path models_class1_pan)/models.combined/train_data.csv.bz2" models/affinity_predictor_train_data.csv.bz2 cp "$(mhcflurry-downloads path models_class1_processing)/models.selected.with_flanks/train_data.csv.bz2" models/processing_predictor_train_data.csv.bz2 cp "$(mhcflurry-downloads path models_class1_processing)/models.selected.no_flank/train_data.csv.bz2" models/processing_predictor_no_flank_train_data.csv.bz2 cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/models_class1_presentation/cluster_submit_script_header.mssm_hpc.lsf ================================================ #!/bin/bash #BSUB -J MHCf # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q premium # queue #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 40:00 # walltime in HH:MM #BSUB -R rusage[mem=45000] # mb memory requested #BSUB -o %J.stdout # output log (%J : JobID) #BSUB -eo %J.stderr # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/mhcflurry-conda-environment/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 free -m module list env ================================================ FILE: downloads-generation/models_class1_presentation/make_train_data.py ================================================ """ Make training data by selecting decoys, etc. """ import sys import argparse import os import numpy import collections import pandas import tqdm import mhcflurry parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--hits", metavar="CSV", required=True, help="Multiallelic mass spec") parser.add_argument( "--proteome-peptides", metavar="CSV", required=True, help="Proteome peptides") parser.add_argument( "--decoys-per-hit", type=float, metavar="N", default=99, help="Decoys per hit") parser.add_argument( "--exclude-pmid", nargs="+", default=[], help="Exclude given PMID") parser.add_argument( "--only-pmid", nargs="*", default=[], help="Include only the given PMID") parser.add_argument( "--exclude-train-data", nargs="+", default=[], help="Remove hits and decoys included in the given training data") parser.add_argument( "--only-format", choices=("MONOALLELIC", "MULTIALLELIC"), help="Include only data of the given format") parser.add_argument( "--sample-fraction", type=float, help="Subsample data by specified fraction (e.g. 0.1)") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") def run(): args = parser.parse_args(sys.argv[1:]) hit_df = pandas.read_csv(args.hits) hit_df["pmid"] = hit_df["pmid"].astype(str) original_samples_pmids = hit_df.pmid.unique() numpy.testing.assert_equal(hit_df.hit_id.nunique(), len(hit_df)) hit_df = hit_df.loc[ (hit_df.mhc_class == "I") & (hit_df.peptide.str.len() <= 11) & (hit_df.peptide.str.len() >= 8) & (~hit_df.protein_ensembl.isnull()) & (hit_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS))) ] hit_df['alleles'] = hit_df.hla.str.split().map(tuple) print("Loaded hits from %d samples" % hit_df.sample_id.nunique()) if args.only_format: hit_df = hit_df.loc[hit_df.format == args.only_format].copy() print("Subselected to %d %s samples" % ( hit_df.sample_id.nunique(), args.only_format)) if args.only_pmid or args.exclude_pmid: assert not (args.only_pmid and args.exclude_pmid) pmids = list(args.only_pmid) + list(args.exclude_pmid) missing = [pmid for pmid in pmids if pmid not in original_samples_pmids] assert not missing, (missing, original_samples_pmids) mask = hit_df.pmid.isin(pmids) if args.exclude_pmid: mask = ~mask new_hit_df = hit_df.loc[mask] print( "Selecting by pmids", pmids, "reduced dataset from", len(hit_df), "to", len(new_hit_df)) hit_df = new_hit_df.copy() print("Subselected by pmid to %d samples" % hit_df.sample_id.nunique()) allele_to_excluded_peptides = collections.defaultdict(set) for train_dataset in args.exclude_train_data: if not train_dataset: continue print("Excluding hits from", train_dataset) train_df = pandas.read_csv(train_dataset) for (allele, peptides) in train_df.groupby("allele").peptide.unique().iteritems(): allele_to_excluded_peptides[allele].update(peptides) train_counts = train_df.groupby( ["allele", "peptide"]).measurement_value.count().to_dict() hit_no_train = hit_df.loc[ [ not any([ train_counts.get((allele, row.peptide)) for allele in row.alleles ]) for _, row in tqdm.tqdm(hit_df.iterrows(), total=len(hit_df))] ] print( "Excluding hits from", train_dataset, "reduced dataset from", len(hit_df), "to", len(hit_no_train)) hit_df = hit_no_train sample_table = hit_df.drop_duplicates("sample_id").set_index("sample_id") grouped = hit_df.groupby("sample_id").nunique() for col in sample_table.columns: if (grouped[col] > 1).any(): del sample_table[col] print("Loading proteome peptides") all_peptides_df = pandas.read_csv(args.proteome_peptides) print("Loaded: ", all_peptides_df.shape) all_peptides_df = all_peptides_df.loc[ all_peptides_df.protein_accession.isin(hit_df.protein_accession.unique()) & all_peptides_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS)) ].copy() all_peptides_df["length"] = all_peptides_df.peptide.str.len() print("Subselected proteome peptides by accession: ", all_peptides_df.shape) all_peptides_by_length = dict(iter(all_peptides_df.groupby("length"))) print("Selecting decoys.") lengths = [8, 9, 10, 11] result_df = [] for sample_id, sub_df in tqdm.tqdm( hit_df.groupby("sample_id"), total=hit_df.sample_id.nunique()): result_df.append( sub_df[[ "protein_accession", "peptide", "sample_id", "n_flank", "c_flank", ]].copy()) result_df[-1]["hit"] = 1 excluded_peptides = set() for allele in sample_table.loc[sample_id].alleles: excluded_peptides.update(allele_to_excluded_peptides[allele]) print( sample_id, "will exclude", len(excluded_peptides), "peptides from decoy universe") for length in lengths: universe = all_peptides_by_length[length] possible_universe = universe.loc[ (~universe.peptide.isin(sub_df.peptide.unique())) & (~universe.peptide.isin(excluded_peptides)) & (universe.protein_accession.isin(sub_df.protein_accession.unique())) ] selected_decoys = possible_universe.sample( n=int(len(sub_df) * args.decoys_per_hit / len(lengths))) result_df.append(selected_decoys[ ["protein_accession", "peptide", "n_flank", "c_flank"] ].copy()) result_df[-1]["hit"] = 0 result_df[-1]["sample_id"] = sample_id result_df = pandas.concat(result_df, ignore_index=True, sort=False) result_df["hla"] = result_df.sample_id.map(sample_table.hla) print(result_df) print("Counts:") print(result_df.groupby(["sample_id", "hit"]).peptide.nunique()) print("Hit counts:") print( result_df.loc[ result_df.hit == 1 ].groupby("sample_id").hit.count().sort_values()) print("Hit rates:") print(result_df.groupby("sample_id").hit.mean().sort_values()) if args.sample_fraction: print("Subsampling to ", args.sample_fraction) result_df = result_df.sample(frac=args.sample_fraction) print("Subsampled:") print(result_df) print("Hit rates:") print(result_df.groupby("sample_id").hit.mean().sort_values()) result_df.to_csv(args.out, index=False) print("Wrote: ", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/models_class1_processing/GENERATE.WITH_HPC_CLUSTER.sh ================================================ bash GENERATE.sh cluster ================================================ FILE: downloads-generation/models_class1_processing/GENERATE.sh ================================================ #!/bin/bash # # # Usage: GENERATE.sh # # cluster mode uses an HPC cluster (Mount Sinai chimera cluster, which uses lsf job # scheduler). This would need to be modified for other sites. # set -e set -x DOWNLOAD_NAME=models_class1_processing SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") if [ "$1" != "cluster" ] then GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" if [ "$GPUS" -eq "0" ]; then NUM_JOBS=${NUM_JOBS-1} else NUM_JOBS=${NUM_JOBS-$GPUS} fi echo "Num jobs: $NUM_JOBS" PARALLELISM_ARGS+=" --num-jobs $NUM_JOBS --max-tasks-per-worker 1 --gpus $GPUS --max-workers-per-gpu 1" else PARALLELISM_ARGS+=" --cluster-parallelism --cluster-max-retries 3 --cluster-submit-command bsub --cluster-results-workdir $HOME/mhcflurry-scratch --cluster-script-prefix-path $SCRIPT_DIR/cluster_submit_script_header.mssm_hpc.lsf" fi mkdir -p "$SCRATCH_DIR" if [ "$2" != "continue-incomplete" ] then echo "Fresh run" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" else echo "Continuing incomplete run" fi # Send stdout and stderr to a logfile included with the archive. LOG="$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.$(date +%s).txt" exec > >(tee -ia "$LOG") exec 2> >(tee -ia "$LOG" >&2) # Log some environment info echo "Invocation: $0 $@" date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME export OMP_NUM_THREADS=1 export PYTHONUNBUFFERED=1 VARIANTS=( with_flanks no_flank short_flanks ) #VARIANTS=( with_flanks no_flank ) cp $SCRIPT_DIR/generate_hyperparameters.variants.py . cp $SCRIPT_DIR/generate_hyperparameters.base.py . python generate_hyperparameters.base.py > hyperparameters.base.yaml for kind in "${VARIANTS[@]}" do python generate_hyperparameters.variants.py hyperparameters.base.yaml $kind > hyperparameters.$kind.yaml done if [ "$2" == "continue-incomplete" ] && [ -f "hits_with_tpm.csv.bz2" ] then echo "Reusing existing expression-annotated hits data" else cp $SCRIPT_DIR/annotate_hits_with_expression.py . time python annotate_hits_with_expression.py \ --hits "$(mhcflurry-downloads path data_mass_spec_annotated)/annotated_ms.csv.bz2" \ --expression "$(mhcflurry-downloads path data_curated)/rna_expression.csv.bz2" \ --out "$(pwd)/hits_with_tpm.csv" bzip2 -f hits_with_tpm.csv fi if [ "$2" == "continue-incomplete" ] && [ -f "proteome_peptides.csv.bz2" ] then echo "Reusing existing proteome peptide list" else cp $SCRIPT_DIR/write_proteome_peptides.py . time python write_proteome_peptides.py \ "$(mhcflurry-downloads path data_mass_spec_annotated)/annotated_ms.csv.bz2" \ "$(mhcflurry-downloads path data_references)/uniprot_proteins.csv.bz2" \ --out "$(pwd)/proteome_peptides.csv" bzip2 -f proteome_peptides.csv fi if [ "$2" == "continue-incomplete" ] && [ -f "train_data.csv.bz2" ] then echo "Reusing existing training data" else cp $SCRIPT_DIR/make_train_data.py . echo "Using affinity predictor:" cat "$(mhcflurry-downloads path models_class1_pan)/models.combined/info.txt" time python "$(pwd)/make_train_data.py" \ --hits "$(pwd)/hits_with_tpm.csv.bz2" \ --affinity-predictor "$(mhcflurry-downloads path models_class1_pan)/models.combined" \ --proteome-peptides "$(pwd)/proteome_peptides.csv.bz2" \ --ppv-multiplier 100 \ --hit-multiplier-to-take 2 \ --out "$(pwd)/train_data.csv" \ $PARALLELISM_ARGS bzip2 -f "$(pwd)/train_data.csv" fi TRAIN_DATA="$(pwd)/train_data.csv.bz2" for kind in "${VARIANTS[@]}" do CONTINUE_INCOMPLETE_ARGS="" if [ "$2" == "continue-incomplete" ] && [ -d "models.unselected.$kind" ] then echo "Will continue existing run: $kind" CONTINUE_INCOMPLETE_ARGS="--continue-incomplete" fi mhcflurry-class1-train-processing-models \ --data "$TRAIN_DATA" \ --held-out-samples 10 \ --num-folds 4 \ --hyperparameters "$(pwd)/hyperparameters.$kind.yaml" \ --out-models-dir "$(pwd)/models.unselected.$kind" \ --worker-log-dir "$SCRATCH_DIR/$DOWNLOAD_NAME" \ $PARALLELISM_ARGS $CONTINUE_INCOMPLETE_ARGS done echo "Done training. Beginning model selection." for kind in "${VARIANTS[@]}" do if [ "$2" == "continue-incomplete" ] && [ -f "models.selected.$kind/train_data.csv.bz2" ] then echo "Reusing existing selected models for $kind" else MODELS_DIR="$(pwd)/models.unselected.$kind" mhcflurry-class1-select-processing-models \ --data "$MODELS_DIR/train_data.csv.bz2" \ --models-dir "$MODELS_DIR" \ --out-models-dir "$(pwd)/models.selected.$kind" \ --min-models 1 \ --max-models 2 \ $PARALLELISM_ARGS cp "$MODELS_DIR/train_data.csv.bz2" "models.selected.$kind/train_data.csv.bz2" fi done cp $SCRIPT_ABSOLUTE_PATH . bzip2 -f "$LOG" for i in $(ls LOG-worker.*.txt) ; do bzip2 -f $i ; done RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * echo "Created archive: $RESULT" # Split into <2GB chunks for GitHub PARTS="${RESULT}.part." # Check for pre-existing part files and rename them. for i in $(ls "${PARTS}"* ) do DEST="${i}.OLD.$(date +%s)" echo "WARNING: already exists: $i . Moving to $DEST" mv $i $DEST done split -b 2000M "$RESULT" "$PARTS" echo "Split into parts:" ls -lh "${PARTS}"* # Write out just the selected models # Move unselected into a hidden dir so it is excluded in the glob (*). mkdir .ignored mv models.unselected.* .ignored/ RESULT="$SCRATCH_DIR/${DOWNLOAD_NAME}.selected.$(date +%Y%m%d).tar.bz2" tar -cjf "$RESULT" * mv .ignored/* . && rmdir .ignored echo "Created archive: $RESULT" ================================================ FILE: downloads-generation/models_class1_processing/annotate_hits_with_expression.py ================================================ """ Annotate hits with expression (tpm), and roll up to just the highest-expressed gene for each peptide. """ import sys import argparse import os import pandas import tqdm parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--hits", metavar="CSV", required=True, help="Multiallelic mass spec") parser.add_argument( "--expression", metavar="CSV", required=True, help="Expression data") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") def run(): args = parser.parse_args(sys.argv[1:]) args.out = os.path.abspath(args.out) hit_df = pandas.read_csv(args.hits) hit_df = hit_df.loc[ (~hit_df.protein_ensembl.isnull()) ] print("Loaded hits from %d samples" % hit_df.sample_id.nunique()) expression_df = pandas.read_csv(args.expression, index_col=0).fillna(0) # Add a column to hit_df giving expression value for that sample and that gene print("Annotating expression.") hit_df["tpm"] = [ expression_df.reindex( row.protein_ensembl.split())[row.expression_dataset].sum() for _, row in tqdm.tqdm( hit_df.iterrows(), total=len(hit_df), ascii=True, maxinterval=10000) ] # Discard hits except those that have max expression for each hit_id print("Selecting max-expression transcripts for each hit.") max_gene_hit_df = hit_df.loc[ hit_df.tpm == hit_df.hit_id.map(hit_df.groupby("hit_id").tpm.max()) ].sample(frac=1.0).drop_duplicates("hit_id") max_gene_hit_df.to_csv(args.out, index=False) print("Wrote", args.out) if __name__ == '__main__': run() ================================================ FILE: downloads-generation/models_class1_processing/cluster_submit_script_header.mssm_hpc.lsf ================================================ #!/bin/bash #BSUB -J MHCf-{work_item_num} # Job name #BSUB -P acc_nkcancer # allocation account or Unix group #BSUB -q gpu # queue #BSUB -gpu "num=1:mode=exclusive_process:mps=no:j_exclusive=yes" #BSUB -R span[hosts=1] # one node #BSUB -n 1 # number of compute cores #BSUB -W 46:00 # walltime in HH:MM #BSUB -R rusage[mem=30000] # mb memory requested #BSUB -o {work_dir}/%J.stdout # output log (%J : JobID) #BSUB -eo {work_dir}/STDERR # error log #BSUB -L /bin/bash # Initialize the execution environment # set -e set -x echo "Subsequent stderr output redirected to stdout" >&2 exec 2>&1 export TMPDIR=/local/JOBS/mhcflurry-{work_item_num} export PATH=$HOME/mhcflurry-conda-environment/bin/:$PATH export PYTHONUNBUFFERED=1 export KMP_SETTINGS=1 #export TF_GPU_ALLOCATOR=cuda_malloc_async free -m module add cuda/11.8.0 cudnn/8.9.5-11 module list nvidia-smi export XLA_FLAGS=--xla_gpu_cuda_data_dir=$CUDA_PATH #export XLA_FLAGS='--xla_compile=False' python -c 'import tensorflow as tf ; print("GPU AVAILABLE" if tf.test.is_gpu_available() else "GPU NOT AVAILABLE")' env cd {work_dir} ================================================ FILE: downloads-generation/models_class1_processing/generate_hyperparameters.base.py ================================================ """ Generate grid of hyperparameters """ from __future__ import print_function from sys import stdout, stderr from copy import deepcopy from yaml import dump base_hyperparameters = dict( convolutional_filters=64, convolutional_kernel_size=8, convolutional_kernel_l1_l2=(0.00, 0.0), flanking_averages=True, n_flank_length=15, c_flank_length=15, post_convolutional_dense_layer_sizes=[], minibatch_size=512, dropout_rate=0.5, convolutional_activation="relu", patience=20, learning_rate=0.001) grid = [] def hyperparrameters_grid(): for learning_rate in [0.001]: for convolutional_activation in ["tanh", "relu"]: for convolutional_filters in [256, 512]: for flanking_averages in [True]: for convolutional_kernel_size in [11, 13, 15, 17]: for l1 in [0.0, 1e-6]: for s in [[8], [16]]: for d in [0.3, 0.5]: new = deepcopy(base_hyperparameters) new["learning_rate"] = learning_rate new["convolutional_activation"] = convolutional_activation new["convolutional_filters"] = convolutional_filters new["flanking_averages"] = flanking_averages new["convolutional_kernel_size"] = convolutional_kernel_size new["convolutional_kernel_l1_l2"] = (l1, 0.0) new["post_convolutional_dense_layer_sizes"] = s new["dropout_rate"] = d yield new for new in hyperparrameters_grid(): if new not in grid: grid.append(new) print("Hyperparameters grid size: %d" % len(grid), file=stderr) dump(grid, stdout) ================================================ FILE: downloads-generation/models_class1_processing/generate_hyperparameters.variants.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout, argv from copy import deepcopy from yaml import dump, unsafe_load import argparse parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "production_hyperparameters", metavar="data.json", help="Production (i.e. standard) hyperparameters grid.") parser.add_argument( "kind", choices=('with_flanks', 'no_n_flank', 'no_c_flank', 'no_flank', 'short_flanks'), help="Hyperameters variant to output") args = parser.parse_args(argv[1:]) with open(args.production_hyperparameters) as fd: production_hyperparameters_list = unsafe_load(fd) def transform(kind, hyperparameters): new_hyperparameters = deepcopy(hyperparameters) if kind == "no_n_flank" or kind == "no_flank": new_hyperparameters["n_flank_length"] = 0 if kind == "no_c_flank" or kind == "no_flank": new_hyperparameters["c_flank_length"] = 0 if kind == "short_flanks": new_hyperparameters["c_flank_length"] = 5 new_hyperparameters["n_flank_length"] = 5 return [new_hyperparameters] result_list = [] for item in production_hyperparameters_list: results = transform(args.kind, item) for result_item in results: if result_item not in result_list: result_list.append(result_item) dump(result_list, stdout) ================================================ FILE: downloads-generation/models_class1_processing/make_train_data.py ================================================ """ Make training data by selecting decoys, etc. """ import sys import argparse import os import numpy import time from functools import partial import pandas import tqdm tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 from mhcflurry.common import configure_logging from mhcflurry.local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from mhcflurry.cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--hits", metavar="CSV", required=True, help="Multiallelic mass spec") parser.add_argument( "--affinity-predictor", required=True, metavar="CSV", help="Class 1 affinity predictor to use") parser.add_argument( "--proteome-peptides", metavar="CSV", required=True, help="Proteome peptides") parser.add_argument( "--hit-multiplier-to-take", type=float, default=1, help="") parser.add_argument( "--ppv-multiplier", type=int, metavar="N", default=1000, help="Take top 1/N predictions.") parser.add_argument( "--exclude-contig", help="Exclude entries annotated to the given contig") parser.add_argument( "--out", metavar="CSV", required=True, help="File to write") parser.add_argument( "--alleles", nargs="+", help="Include only the specified alleles") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def do_process_samples(samples, constant_data=None): import mhcflurry import pandas import tqdm tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 columns_to_keep = [ "hit_id", "protein_accession", "n_flank", "c_flank", "peptide", "sample_id", "affinity_prediction", "hit", ] if constant_data is None: constant_data = GLOBAL_DATA args = constant_data['args'] lengths = constant_data['lengths'] all_peptides_by_length = constant_data['all_peptides_by_length'] sample_table = constant_data['sample_table'] hit_df = constant_data['hit_df'] hit_df = hit_df.loc[ hit_df.sample_id.isin(samples) ] affinity_predictor = mhcflurry.Class1AffinityPredictor.load( args.affinity_predictor) print("Loaded", affinity_predictor) result_df = [] for sample_id, sub_hit_df in tqdm.tqdm( hit_df.groupby("sample_id"), total=hit_df.sample_id.nunique()): sub_hit_df = sub_hit_df.copy() sub_hit_df["hit"] = 1 decoys_df = [] for length in lengths: universe = all_peptides_by_length[length] decoys_df.append( universe.loc[ (~universe.peptide.isin(sub_hit_df.peptide.unique())) & (universe.protein_accession.isin(sub_hit_df.protein_accession.unique())) ].sample( n=int(len(sub_hit_df) * args.ppv_multiplier / len(lengths)))[[ "protein_accession", "peptide", "n_flank", "c_flank" ]].drop_duplicates("peptide")) merged_df = pandas.concat( [sub_hit_df] + decoys_df, ignore_index=True, sort=False) prediction_col = "%s affinity" % sample_table.loc[sample_id].hla predictions_df = pandas.DataFrame( index=merged_df.peptide.unique(), columns=[prediction_col]) predictions_df[prediction_col] = affinity_predictor.predict( predictions_df.index, allele=sample_table.loc[sample_id].hla) merged_df["affinity_prediction"] = merged_df.peptide.map( predictions_df[prediction_col]) merged_df = merged_df.sort_values("affinity_prediction", ascending=True) num_to_take = int(len(sub_hit_df) * args.hit_multiplier_to_take) selected_df = merged_df.head(num_to_take)[ columns_to_keep ].sample(frac=1.0).copy() selected_df["hit"] = selected_df["hit"].fillna(0) selected_df["sample_id"] = sample_id result_df.append(selected_df) print( "Processed sample", sample_id, "with hit and decoys:\n", selected_df.hit.value_counts()) result_df = pandas.concat(result_df, ignore_index=True, sort=False) return result_df def run(): import mhcflurry args = parser.parse_args(sys.argv[1:]) configure_logging() serial_run = not args.cluster_parallelism and args.num_jobs == 0 hit_df = pandas.read_csv(args.hits) numpy.testing.assert_equal(hit_df.hit_id.nunique(), len(hit_df)) hit_df = hit_df.loc[ (hit_df.mhc_class == "I") & (hit_df.peptide.str.len() <= 11) & (hit_df.peptide.str.len() >= 8) & (~hit_df.protein_ensembl.isnull()) & (hit_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS))) ] print("Loaded hits from %d samples" % hit_df.sample_id.nunique()) hit_df = hit_df.loc[hit_df.format == "MONOALLELIC"].copy() print("Subselected to %d monoallelic samples" % hit_df.sample_id.nunique()) hit_df["allele"] = hit_df.hla hit_df = hit_df.loc[hit_df.allele.str.match("^HLA-[ABC]")] print("Subselected to %d HLA-A/B/C samples" % hit_df.sample_id.nunique()) if args.exclude_contig: new_hit_df = hit_df.loc[ hit_df.protein_primary_ensembl_contig.astype(str) != args.exclude_contig ] print( "Excluding contig", args.exclude_contig, "reduced dataset from", len(hit_df), "to", len(new_hit_df)) hit_df = new_hit_df.copy() if args.alleles: filter_alleles = set(args.alleles) new_hit_df = hit_df.loc[ hit_df.allele.isin(filter_alleles) ] print( "Selecting alleles", args.alleles, "reduced dataset from", len(hit_df), "to", len(new_hit_df)) hit_df = new_hit_df.copy() sample_table = hit_df.drop_duplicates("sample_id").set_index("sample_id") grouped = hit_df.groupby("sample_id").nunique() for col in sample_table.columns: if (grouped[col] > 1).any(): del sample_table[col] sample_table["total_hits"] = hit_df.groupby("sample_id").peptide.nunique() print("Loading proteome peptides") all_peptides_df = pandas.read_csv(args.proteome_peptides) print("Loaded: ", all_peptides_df.shape) all_peptides_df = all_peptides_df.loc[ all_peptides_df.protein_accession.isin(hit_df.protein_accession.unique()) & all_peptides_df.peptide.str.match("^[%s]+$" % "".join( mhcflurry.amino_acid.COMMON_AMINO_ACIDS)) ].copy() all_peptides_df["length"] = all_peptides_df.peptide.str.len() print("Subselected proteome peptides by accession: ", all_peptides_df.shape) all_peptides_by_length = dict(iter(all_peptides_df.groupby("length"))) print("Selecting decoys.") GLOBAL_DATA['args'] = args GLOBAL_DATA['lengths'] = [8, 9, 10, 11] GLOBAL_DATA['all_peptides_by_length'] = all_peptides_by_length GLOBAL_DATA['sample_table'] = sample_table GLOBAL_DATA['hit_df'] = hit_df worker_pool = None start = time.time() tasks = [ {"samples": [sample]} for sample in hit_df.sample_id.unique() ] if serial_run: # Serial run print("Running in serial.") results = [do_process_samples(hit_df.sample_id.unique())] elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=do_process_samples, work_items=tasks, constant_data=GLOBAL_DATA, input_serialization_method="dill", result_serialization_method="pickle", clear_constant_data=False) else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None results = worker_pool.imap_unordered( partial(call_wrapped_kwargs, do_process_samples), tasks, chunksize=1) print("Reading results") result_df = [] for worker_result in tqdm.tqdm(results, total=len(tasks)): for sample_id, selected_df in worker_result.groupby("sample_id"): print( "Received result for sample", sample_id, "with hit and decoys:\n", selected_df.hit.value_counts()) result_df.append(worker_result) print("Received all results in %0.2f sec" % (time.time() - start)) result_df = pandas.concat(result_df, ignore_index=True, sort=False) result_df["hla"] = result_df.sample_id.map(sample_table.hla) print(result_df) print("Counts:") print(result_df.groupby(["sample_id", "hit"]).peptide.nunique()) print("Hit counts:") print( result_df.loc[ result_df.hit == 1 ].groupby("sample_id").hit.count().sort_values()) print("Hit rates:") print(result_df.groupby("sample_id").hit.mean().sort_values()) result_df.to_csv(args.out, index=False) print("Wrote: ", args.out) if worker_pool: worker_pool.close() worker_pool.join() if __name__ == '__main__': run() ================================================ FILE: downloads-generation/models_class1_selected_no_mass_spec/GENERATE.sh ================================================ #!/bin/bash # # Model select standard MHCflurry Class I models. # set -e set -x DOWNLOAD_NAME=models_class1_selected_no_mass_spec SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/write_validation_data.py . mkdir models GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" time python ./write_validation_data.py \ --include "$(mhcflurry-downloads path data_curated)/curated_training_data.no_mass_spec.csv.bz2" \ --exclude "$(mhcflurry-downloads path models_class1_unselected)/models/train_data.csv.bz2" \ --only-alleles-present-in-exclude \ --out-data test.csv \ --out-summary test.summary.csv wc -l test.csv time mhcflurry-class1-select-allele-specific-models \ --data test.csv \ --models-dir "$(mhcflurry-downloads path models_class1_unselected)/models" \ --out-models-dir models \ --scoring combined:mse,consensus \ --consensus-num-peptides-per-length 10000 \ --combined-min-models 8 \ --combined-max-models 16 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 5 time mhcflurry-calibrate-percentile-ranks \ --models-dir models \ --num-peptides-per-length 100000 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_trained_with_mass_spec/GENERATE.sh ================================================ #!/bin/bash # # Model select MHCflurry Class I models that were trained on mass-spec. Model # selection uses both mass-spec and affinity data. # set -e set -x DOWNLOAD_NAME=models_class1_trained_with_mass_spec SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/write_validation_data.py . mkdir models GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" python ./write_validation_data.py \ --include "$(mhcflurry-downloads path data_curated)/curated_training_data.with_mass_spec.csv.bz2" \ --exclude "$(mhcflurry-downloads path models_class1_unselected_with_mass_spec)/models/train_data.csv.bz2" \ --only-alleles-present-in-exclude \ --out-data test.csv \ --out-summary test.summary.csv wc -l test.csv time mhcflurry-class1-select-allele-specific-models \ --data test.csv \ --models-dir "$(mhcflurry-downloads path models_class1_unselected_with_mass_spec)/models" \ --out-models-dir models \ --scoring combined:mass-spec,mse,consensus \ --consensus-num-peptides-per-length 10000 \ --combined-min-models 8 \ --combined-max-models 16 \ --unselected-accuracy-scorer combined:mass-spec,mse \ --unselected-accuracy-percentile-threshold 95 \ --mass-spec-min-measurements 500 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 1 time mhcflurry-calibrate-percentile-ranks \ --models-dir models \ --num-peptides-per-length 100000 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_unselected/GENERATE.sh ================================================ #!/bin/bash # # Train standard MHCflurry Class I models. # Calls mhcflurry-class1-train-allele-specific-models on curated training data # using the hyperparameters in "hyperparameters.yaml". # set -e set -x DOWNLOAD_NAME=models_class1_unselected SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME mkdir models cp $SCRIPT_DIR/class1_pseudosequences.csv . python $SCRIPT_DIR/generate_hyperparameters.py > hyperparameters.yaml GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" time mhcflurry-class1-train-allele-specific-models \ --data "$(mhcflurry-downloads path data_curated)/curated_training_data.no_mass_spec.csv.bz2" \ --allele-sequences class1_pseudosequences.csv \ --hyperparameters hyperparameters.yaml \ --out-models-dir models \ --held-out-fraction-reciprocal 10 \ --min-measurements-per-allele 25 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_unselected/README.md ================================================ # Class I allele-specific models (ensemble) This download contains trained MHC Class I MHCflurry models. To generate this download run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/models_class1_unselected/class1_pseudosequences.csv ================================================ allele,pseudosequence HLA-A*01:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:02,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:03,YFAMYQENMAHTDANTLYIMYRDYTWVARVYRGY HLA-A*01:06,YFAMYQENMAHTDANTLYIIYRDYTWVALAYRGY HLA-A*01:07,YFAMYQENVAHTDENTLYIIYRDYTWVARVYRGY HLA-A*01:08,YFAMYQENMAHTDANTLYIIYRDYTWVARVYWGY HLA-A*01:09,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:10,YFAMYQENMAHTDANTLYIIYRDYTWARRVYRGY HLA-A*01:12,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:13,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:14,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTGY HLA-A*01:17,YFAMYQENMAQTDANTLYIIYRDYTWVARVYRGY HLA-A*01:19,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:20,YSAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*01:21,YFAMYQENMAHTDANTLYIIYRDYTWAVRVYRGY HLA-A*01:23,YFAMYQENVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:24,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:25,YFAMYQENMAHTDANTLYIIYRDYTWVAQVYRGY HLA-A*01:26,YFAMYQENMAHTDANTLYIIYRDYTWAARVYRGY HLA-A*01:28,YFAMYQENMAHTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:29,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:30,YFAMYQENMAHTDANTLYIIYHYYTWVARVYRGY HLA-A*01:32,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:33,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:35,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:36,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:37,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:38,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:39,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:40,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:41,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:42,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:43,YYAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:44,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:45,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:46,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:47,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:48,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:49,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:50,YFAMYQENMAHTDANTLYIIYREYTWVARVYRGY HLA-A*01:51,YFAMYRNNVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:54,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:55,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:58,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:59,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:60,YFAMYPENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:61,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:62,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:63,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:64,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:65,YFAMYQENMAHTDANTLYIIYRDYTWVARVCRGY HLA-A*01:66,YFAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*02:01,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:02,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:03,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:04,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A*02:05,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:06,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:07,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:08,YYAMYGENVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:09,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:10,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:11,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:12,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:13,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A*02:14,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:16,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:17,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:18,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:19,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:20,YFAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:21,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:22,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:24,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:25,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:26,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:27,YFAMYGEKVAHTHVDTLYVRYHYYTWAAQAYTWY HLA-A*02:28,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:29,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:30,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:31,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:33,YFAMYGEKVAHTHVDTLYVRSHYYTWAVLAYTWY HLA-A*02:34,YFAMYGEKVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:35,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:36,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTGY HLA-A*02:37,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:38,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYRWY HLA-A*02:39,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:40,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:41,YYAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A*02:42,YFSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:44,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:45,YFAMYQEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:46,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:47,YFAMYGEKVAHSHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:48,YFAMYEEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:49,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A*02:50,YFAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:51,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:52,YFAMYGEKVAHTHVDTLYVRYEHYTWAVLAYTWY HLA-A*02:54,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:55,YFAMYRNNVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:56,YFAMYQENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:57,YYAMYGEKVAHTHVDTLYLMYHYYTWAVLAYTWY HLA-A*02:58,YFAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:59,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:60,YFAMYGEKVAHTHVDTLYVRYHFYTWAVLAYTWY HLA-A*02:61,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:62,YFAMYGENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:63,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:64,YFAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:65,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:66,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:67,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:68,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:69,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:70,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:71,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:72,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:73,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:74,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:75,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:76,YSAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:77,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:78,YYAMYQENVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:79,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:80,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A*02:81,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:84,YYAMYGEKVAHTHVDTLYFRYHYYTWAVLAYTWY HLA-A*02:85,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:86,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:87,YFAMYGEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:89,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:90,YFAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:91,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:92,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:93,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:95,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:96,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:97,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:99,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:101,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYRWY HLA-A*02:102,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:103,YFAMYQENVAQTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:104,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:105,YFAMYGEKVAHTHVDTLYVRYEYYTWAVLAYTWY HLA-A*02:106,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:107,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:108,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:109,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:110,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:111,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:112,YFAMYGEKVAHTDENIAYVRCHYYTWAVLAYTWY HLA-A*02:114,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:115,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:116,YFAMYGEKVAHTHLDTLYVRYHYYTWAVLAYTWY HLA-A*02:117,YFAMYGEKVAHTHVDTLYVRYQDYTWAEWAYTWY HLA-A*02:118,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:119,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:120,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:121,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:122,YYAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:123,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:124,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:126,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:127,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:128,YFAMYGENVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:129,YYAMYEEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:130,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:131,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:132,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:133,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:134,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:135,YFAMYGEKVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*02:136,YFAMYGEKVAHTDENIAYVRYHYYTWAVWAYTWY HLA-A*02:137,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:138,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:139,YFAMYGEKVTHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:140,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:141,YFVMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:142,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:143,YYAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:144,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:145,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:146,YFAMYGEKVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A*02:147,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:148,YFAMYGEKVAHTHVDTLYVRFHYYTWAEWAYTWY HLA-A*02:149,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:150,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:151,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:152,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:153,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:154,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYRWY HLA-A*02:155,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:156,YFAMYGEKVAHTHVDTLYIIYHYYTWAVLAYTWY HLA-A*02:157,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:158,YFAMYGEKVAHAHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:159,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:160,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:161,YFAVYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:162,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:163,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:164,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:165,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:166,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:167,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:168,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:169,YYAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:170,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:171,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:172,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:173,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:174,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:175,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:176,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:177,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:178,YYAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:179,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:180,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:181,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:182,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:183,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:184,YFAMYGEKVAHTHEDTLYVRYHYYTWAVLAYTWY HLA-A*02:185,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:186,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:187,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:188,YFAMYGEKVAHTHVDTLYVRYDSYTWAVLAYTWY HLA-A*02:189,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:190,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:191,YFAMYGEKVAHTHVDTLYVRCHYYTWAVWAYTWY HLA-A*02:192,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:193,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:194,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:195,YFAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:196,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:197,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:198,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:199,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:200,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:202,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:203,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:204,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:205,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:206,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:207,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:208,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:209,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:210,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:211,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:212,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:213,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:214,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:215,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:216,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:217,YFAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:218,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:219,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:220,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:221,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:224,YFAMYGEKVAHTHVDTLYVGYHYYTWAVLAYTWY HLA-A*02:228,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:229,YYAMYGEKVAHTHVDTLYLRYRYYTWAVWAYTWY HLA-A*02:230,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:231,YFAMYGEKVAHTHVDTLYVRNHYYTWAVLAYTWY HLA-A*02:232,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:233,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTRY HLA-A*02:234,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:235,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:236,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:237,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:238,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:239,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:240,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:241,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:242,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:243,YTAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:244,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:245,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:246,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:247,YFAMYGEKVAHTDENTLYVRYHYYTWAVLAYTWY HLA-A*02:248,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:249,YFAMYVEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:251,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:252,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:253,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:254,YFAMYGEKVAHTHVDTLYVRYNFYTWAVLAYTWY HLA-A*02:255,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTGY HLA-A*02:256,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:257,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:258,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:259,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:260,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:261,YFAMYGEKVAHTHMDTLYVRCHYYTWAVLAYTWY HLA-A*02:262,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLVYTWY HLA-A*02:263,YFAMYGEKVAHTHVDTLYVRYHYYTWSVLAYTWY HLA-A*02:264,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:265,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:266,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*03:01,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:02,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:04,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:05,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:06,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:07,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:08,YFAMYQENVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:09,YFAMYQENVAQTHVDTLYIIYRDYTWAELAYTWY HLA-A*03:10,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:12,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:13,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:14,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:15,YFAMYQENVAQTDVDTLYIIFRDYTWAELAYTWY HLA-A*03:16,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:17,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:18,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*03:19,YFAMYQENVAQTDVDTLYIIFHYYTWAELAYTWY HLA-A*03:20,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:22,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:23,YFAMYGEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:24,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:25,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:26,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:27,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:28,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:29,YFAMYQENVVQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:30,YFAMYEEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:31,YFAMYQENVAQTDVDTLYIIYRYYTWAVQAYTWY HLA-A*03:32,YFAMYQENVAHIDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:33,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:34,YFAMYQENVAPTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:35,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:37,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:38,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:39,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:40,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:41,YFAMYQENVAHTDANTLYIIYRDYTWAELAYTWY HLA-A*03:42,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:43,YFAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A*03:44,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:45,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:46,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:47,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:48,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:49,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:50,YFAMYQENVAQTDVDTLYIIYRDYTWAEWAYTWY HLA-A*03:51,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:52,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:53,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:54,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:55,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:56,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:57,YFAMYQENVAQTDANTLYIIYRDYTWAELAYTWY HLA-A*03:58,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:59,CFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:60,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:61,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:62,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:63,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:64,YFAMYQENVAQTDVDTLYIIYRDYTWADLAYTWY HLA-A*03:65,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTWY HLA-A*03:66,YFAMYQENVAQTDVDTLYIIYRDYTWAERAYTWY HLA-A*03:67,YFATYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:70,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:71,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:72,YSAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:73,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:74,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:75,YFAMYQENVAQTDVDTLYLMYRDYTWAELAYTWY HLA-A*03:76,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:77,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:78,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:79,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:80,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:81,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:82,YFAMYQENVAQTDVDTLYIIYEHYTWAVQAYTWY HLA-A*11:01,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:02,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:03,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:04,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A*11:05,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:06,YYAMYQENVAQTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:07,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:08,YYAMYQENVAQTDVDTLYIIYRDYTWAERAYRWY HLA-A*11:09,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:10,YYAMYRNNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:11,YYAMYLQNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:12,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:13,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:14,YYAMYQENVAQTDVDTLYIIYRDYTWARQAYRWY HLA-A*11:15,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:16,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:17,YYAMYQENMAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:18,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:19,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:20,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:22,YYAMYQENVAQTDVDTLYIIYPDYTWAAQAYRWY HLA-A*11:23,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:24,YYAMYQENVAQTDVDTLYIIYRDYTWAALAYRWY HLA-A*11:25,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A*11:26,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A*11:27,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTGY HLA-A*11:29,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:30,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:31,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A*11:32,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:33,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:34,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:35,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*11:36,YYAMYQENVAQTDVDTLYIICRDYTWAAQAYRWY HLA-A*11:37,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:38,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:39,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:40,YYAMYQENVAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:41,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:42,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:43,YTAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:44,YYAMYQENVAQTDVDTLYIIYRDYTWAARAYRWY HLA-A*11:45,YYAMYQENVAQTDADTLYIIYRDYTWAAQAYRWY HLA-A*11:46,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:47,YHAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:48,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:49,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:51,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:53,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:54,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:55,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:56,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:57,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:58,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:59,YYAMYQENVAQTDVDTLYIIYGDYTWAAQAYRWY HLA-A*11:60,YYAMYQENVAQTDVDTLYIIYRDYTWAVQAYRWY HLA-A*11:61,YYAMYQENAAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:62,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:63,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:64,YYAMYQENVAQTDVDTLHIIYRDYTWAAQAYRWY HLA-A*23:01,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*23:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:04,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*23:05,CSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:09,YSAMYQENMAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYRGY HLA-A*23:12,YSAMYEEKVAHTHENIAYLMFHYYTWAVLAYTGY HLA-A*23:13,YSAMYEEKVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:14,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:15,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:16,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:17,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:18,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:24,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:25,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:04,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:05,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*24:07,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:08,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A*24:13,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:14,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A*24:15,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:17,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:18,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTWY HLA-A*24:19,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVWVYTWY HLA-A*24:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:24,YSAMYRNNVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:25,CSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:27,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:28,YSAMYEEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:29,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:30,YSAMYEEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:31,YSAMYEQKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:32,YSAMYEEKVAHTDESIAYLMFHYYTWAVQAYTGY HLA-A*24:33,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:34,YSAMYEEKVAHIDENIAYLMFHYYTWAVQAYTGY HLA-A*24:35,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:37,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:38,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:39,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:41,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:42,YSAMYGEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:43,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:44,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:46,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRGY HLA-A*24:47,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:49,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:50,YYAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:51,YSAMYEEKVAHTDENIAYLIYHYYTWAVQAYTGY HLA-A*24:52,YSAMYEEKVAHTDENIAYLRFHYYTWAVQAYTGY HLA-A*24:53,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:54,YSAMYEEKVAHTDENIAYLMFHYYTWAVQPYTGY HLA-A*24:55,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEGY HLA-A*24:56,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A*24:57,YSAMYEEKVAHTDENIAYIMYHYYTWAVQAYTGY HLA-A*24:58,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:59,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A*24:61,YSAMYEEKVAHTDEKIAYLMFHYYTWAVQAYTGY HLA-A*24:62,YSAMYEEKVAHTDENIAYLMFQDYTWAVQAYTGY HLA-A*24:63,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:64,YSAMYEEKVAHTDENIAYLWIHYYTWAVQAYTGY HLA-A*24:66,YSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A*24:67,YSAMYRNNVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:68,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:69,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:70,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:71,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:72,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:73,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A*24:74,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:75,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:76,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:77,YSAMYQEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:78,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:79,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:80,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:81,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:82,YTAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:85,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:87,YSAMYEEKVAHTDENIAYLMFHYYTWAVRAYTGY HLA-A*24:88,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:89,YSAMYGEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:91,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:92,YSAMYEEKVAHTDENIAYIIYHYYTWAVQAYTGY HLA-A*24:93,YSAMYEEKVAHTDENIAYVMFHYYTWAVQAYTGY HLA-A*24:94,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*24:95,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:96,YSAMYEEKVAHTDENIAYLMFNFYTWAVQAYTGY HLA-A*24:97,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:98,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:99,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:100,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:101,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:102,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:103,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:104,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:105,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:106,YSAMYEEKVAHTDENIAYLMFDDYTWAVQAYTGY HLA-A*24:107,YSAMYEEKVAHTDENIAYLMFHYYTWAVHAYTGY HLA-A*24:108,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:109,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:110,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:111,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:112,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:113,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:114,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:115,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:116,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:117,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:118,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:119,YSAMYEEKVAHADENIAYLMFHYYTWAVQAYTGY HLA-A*24:120,YSAMYEEKVAHTDENIAYIMFHYYTWAVQAYTGY HLA-A*24:121,YSAMYEEKVAHTDENIAYLMFHSYTWAVQAYTGY HLA-A*24:122,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:123,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:124,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:125,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:126,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:127,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:128,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:129,YSAMYQENMAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:130,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:131,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:133,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:134,YSAMYEEKVAHTDENIAYLMFHYYPWAVQAYTGY HLA-A*24:135,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:136,YSAMYEEKVAHTDENIAYLMFHYYTWVVQAYTGY HLA-A*24:137,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:138,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTWY HLA-A*24:139,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:140,YSTMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:141,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:142,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:143,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYLGY HLA-A*24:144,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*25:01,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:02,YYAMYRNNVAQTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:03,YFAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:04,YYAMYRNNVAHTDESIAYIRYQDYTWAEQAYRWY HLA-A*25:05,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:06,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTWY HLA-A*25:07,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:08,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:09,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:10,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:11,YYAMYRNNVAHTHESIAYIRYQDYTWAEWAYRWY HLA-A*25:13,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*26:01,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:02,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A*26:03,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:04,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYLWY HLA-A*26:05,YYAMYRNNVAHTDENTLYIRYQDYTWAEWAYRWY HLA-A*26:06,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:07,YYAMYGEKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:08,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:09,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYTWY HLA-A*26:10,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:12,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:13,YYAMYRNNVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:14,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:15,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:16,YSAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:17,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:18,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:19,YYAMYQENVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:20,YFAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:21,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:22,YYAMYRNNVAHTDANTLYVRYQDYTWAEWAYRWY HLA-A*26:23,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:24,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:26,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:27,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:28,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:29,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:30,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:31,YYAMYPNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:32,YYAMYRNNVAHTDANTLYMVYQDYTWAEWAYRWY HLA-A*26:33,YYAMYRNNVAQIHANTLYIRYQDYTWAEWAYRWY HLA-A*26:34,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYWWY HLA-A*26:35,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:36,YYAMYRNNVAHTHANTLYIRYQDYTWAEWAYRWY HLA-A*26:37,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:38,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:39,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:40,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:41,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:42,YYAIYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:43,YYAMYRNNVAHTDANTLYIRYQDYTWAELAYRWY HLA-A*26:45,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:46,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:47,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:48,YYAMYRNKVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:49,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:50,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*29:01,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:02,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:03,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTGY HLA-A*29:04,YTAMYLQHVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:05,YTAMYLQNVAQTDANTLYIMYRDYTWAEQAYTWY HLA-A*29:06,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:07,YTAMYLQNVAQTDANTLYLMFRDYTWAVLAYTWY HLA-A*29:09,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:10,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:11,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:12,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:13,YTAMYLQNVAQTDESIAYIMYRDYTWAVLAYTWY HLA-A*29:14,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:15,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:16,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:17,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:18,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:19,YTAMYLQNVAHTHVDTLYIMYRDYTWAVLAYTWY HLA-A*29:20,YTAMYLQNVAHTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:21,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:22,YTAMYLQNVAQTDANTLYVRYRDYTWAVLAYTWY HLA-A*30:01,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:02,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:03,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:04,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:06,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:07,YSAMYEEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:08,YYAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:09,YSAMYQENVAHTDENTLYIIYEHYTWAVLAYTWY HLA-A*30:10,YSAMYQENVAHTDENTLYIIHEHYTWARLAYTWY HLA-A*30:11,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:12,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:13,YSAMYQENVAHTHVDTLYIIYEHYTWARLAYTWY HLA-A*30:15,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:16,YSAMYQENVAQTHVDTLYIIYEHYTWAWLAYTWY HLA-A*30:17,YSAMYQENVAQTDVDTLYIIYEHYTWAVWAYTWY HLA-A*30:18,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:19,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:20,YSAMYQENVAQTEVDTLYIIYEHYTWAWLAYTWY HLA-A*30:22,YSAMYGEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:23,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:24,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:25,YSAMYQENVAQTDENTLYIIYEHYTWARLAYTWY HLA-A*30:26,YSAMYQENVAQTDVDTLYIIYRDYTWAWLAYTWY HLA-A*30:28,YSAMYQENVAHTDENTLYIVYEHYTWARLAYTWY HLA-A*30:29,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTSY HLA-A*30:30,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:31,YSAMYQENVARTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:32,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:33,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:34,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:35,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:36,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:37,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:38,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:39,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:40,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:41,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*31:01,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:02,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:03,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:04,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:05,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*31:06,YTAMYQENVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*31:07,YTAMYQEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:08,YTAMYEEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:09,YTAMYQENVGHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:10,YTAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:11,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:12,YTAMYQENVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A*31:13,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:15,YTAMYQENVARIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:16,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:17,YTAMYQENVAHINVDTLYIMYQDYTWAVLAYTWY HLA-A*31:18,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A*31:19,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:20,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:21,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:22,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:23,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:24,YTAMYQENVAHIDVDTLYIMYQDYTWAAQAYRWY HLA-A*31:25,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYRWY HLA-A*31:26,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:27,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:28,YTAMYQENVTHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:29,YTAMYQENVAHIDVDTLYLMFQDYTWAVLAYTWY HLA-A*31:30,YTAMYQENVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A*31:31,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:32,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:33,YTAMYQENVAHIDGDTLYIMYQDYTWAVLAYTWY HLA-A*31:34,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:35,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:36,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:37,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*32:01,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:02,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:03,YFAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*32:04,YFAMYQENVAHTDESIAYIIYRDYTWAELAYTWY HLA-A*32:05,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:06,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:07,YSAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:08,YFAMYQENVAHTHESIAYIMYQDYTWAVLAYTWY HLA-A*32:09,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTRY HLA-A*32:10,YFAMYQENVAHTDESIAYIMYQDYTWAEWAYTWY HLA-A*32:12,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:13,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTGY HLA-A*32:14,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:15,YFAMYRNNVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:16,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:17,YFAMYQENVAQTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:18,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:20,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:21,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:22,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:23,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:24,YFAMYQENMAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:25,YFAMYHENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*33:01,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:03,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:04,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:05,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:06,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:07,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:08,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:09,YTAMYGENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:10,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*33:11,YTAMYRNNVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:12,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:13,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*33:14,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:15,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:16,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:17,YTAMYRNNVAHIDADTLYIMYQDYTWAVLAYTWY HLA-A*33:18,YTAMYRNNVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*33:19,YTAMYRNNVAHIDVDTLYLMFHYYTWAVQAYTGY HLA-A*33:20,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:21,YTAMYEENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:22,YTAMYRNNVAHIDVDTLYVRYQDYTWAVLAYTWY HLA-A*33:23,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:24,YTAMYRNNVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*33:25,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:26,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:27,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:28,YTAMYRNNVAHIDVDTLYIMYQDYTWAELAYTWY HLA-A*33:29,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:30,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:31,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*34:01,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:02,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:03,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:04,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:05,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYTWY HLA-A*34:07,YYAMYRNNVSQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:08,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*36:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*36:02,YFAMYQENMAHTDANTLYIIYRDYTWVARAYTWY HLA-A*36:03,YFAMYQENMAHTDANTLYLMYRDYTWVARVYTWY HLA-A*36:04,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A*36:05,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*43:01,YYAMYLQNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*66:01,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:02,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:03,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:04,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWH HLA-A*66:05,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYRWY HLA-A*66:07,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:08,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:09,YYAMYRNNVAQTDVDTLYVRYQDYTWAEWAYRWY HLA-A*66:10,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRGY HLA-A*66:11,YYAMYRNNVAQTDADTLYIRYQDYTWAEWAYRWY HLA-A*66:12,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:13,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:14,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:15,YYAMYRNNVAHIDVDTLYIRYQDYTWAEWAYRWY HLA-A*68:01,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:02,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:03,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:04,YYAMYRNNVAHIDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:05,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:06,YYAMYRNNVAQTDVDTLYIMYEHYTWAVWAYTWY HLA-A*68:07,YYAMYRNNVAQTDVDTLYIMYRHYTWAVWAYTWY HLA-A*68:08,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A*68:09,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A*68:10,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:12,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:13,YYAMYRENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:14,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:15,YYAMYRNNVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*68:16,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:17,YYAMYRNNVAQTDVDTLYIMYRVYTWAVWAYTWY HLA-A*68:19,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:20,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:21,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:22,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:23,YYAMYRNNVAQTDVDTLYIRYRDYTWAVWAYTWY HLA-A*68:24,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:25,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:26,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTGY HLA-A*68:27,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:28,YYAMYRNNVAQTDVDTLYIRYHYYTWAVRAYTWY HLA-A*68:29,YTAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:30,YYAMYGENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:31,YYAMYRNNVAHTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:32,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:33,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:34,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYMWY HLA-A*68:35,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:36,YYAMYRNNVAQTDENIAYIMYRDYTWAVWAYTWY HLA-A*68:37,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:38,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:39,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:40,YYAMYRNNVGQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:41,YYAMYRNNVAQTDVDTLYIMYRDYTWVVWAYTWY HLA-A*68:42,YYAMYRNNVAQTDVDTLYIMYRDYTWAEWAYTWY HLA-A*68:43,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:44,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:45,YSAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:46,YYAMYRNNVAQTDVNTLYIMYRDYTWAVWAYTWY HLA-A*68:47,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:48,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:50,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:51,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:52,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:53,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:54,YYAMYRNNVAQTDVDTLYIRYHYYTWAEWAYTWY HLA-A*69:01,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*74:01,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:02,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:03,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:04,YFAMYGEKVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:05,YFAMYQENVAHADVDTLYIMYQDYTWAVLAYTWY HLA-A*74:06,YFAMYQENVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*74:07,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:08,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:09,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:10,YFAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*74:11,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:13,YFAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A*80:01,YFAMYEENVAHTNANTLYIIYRDYTWARLAYEGY HLA-A*80:02,YFAMYEENVAHTDVDTLYIIYRDYTWARLAYEGY HLA-B*07:02,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:03,YYSEYRNIYTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:04,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B*07:05,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:06,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:07,YYSEYRNIYAQTDESNLYLRYDYYTWAERAYEWY HLA-B*07:08,YYSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:09,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:10,YYSEYRNICAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:11,YYSEYRNIYAQTDENNLYLSYDSYTWAERAYEWY HLA-B*07:12,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:13,YYSGYREKYRQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:14,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:15,YYSEYRNIYAQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:16,YYSEYRNIYTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:17,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:18,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:19,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYTWY HLA-B*07:20,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLSY HLA-B*07:21,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:22,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:23,YYSEYRNIYAQTDESNLHLSYDYYTWAERAYEWY HLA-B*07:24,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:25,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYEWY HLA-B*07:26,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYEWY HLA-B*07:27,YYSEYRNISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*07:28,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B*07:29,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:30,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:31,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYTWY HLA-B*07:32,YYSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:33,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:34,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B*07:35,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:36,YYSEYRNIYAQTDENIAYLSYDYYTWAERAYEWY HLA-B*07:37,YYSEYRNIYANTYESNLYLSYDYYTWAERAYEWY HLA-B*07:38,YYSEYRNIFTNTYENIAYLSYDYYTWAERAYEWY HLA-B*07:39,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:40,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:41,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:42,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:43,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYTWY HLA-B*07:44,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:45,YYSEYRNIYAQTDESNLYLSYDYYTWAERTYEWY HLA-B*07:46,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:47,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:48,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYEWY HLA-B*07:50,YYSEYRNISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:51,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYEWY HLA-B*07:52,YYSEYRNIYAQTDESNLYLSYDYYTWAERVYEWY HLA-B*07:53,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:54,YYSEYREIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:55,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYEWY HLA-B*07:56,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:57,YYSEYRNIYAQTDENNLYLSYDYYTWAERAYEWY HLA-B*07:58,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:59,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:60,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:61,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:62,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:63,YYSDYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:64,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEGY HLA-B*07:65,YYATYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:66,YYSEYRNIYAQTDESNLYLSYDYYTWAEQAYEWY HLA-B*07:68,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:69,YYSEYRNICTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:70,YCSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:71,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:72,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:73,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:74,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:75,YYSEYRNIYAQTYENNLYLSYDYYTWAERAYEWY HLA-B*07:76,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:77,YYSEYRNIYAQTDESNLYLRSDYYTWAERAYEWY HLA-B*07:78,YYSEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*07:79,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:80,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYEWY HLA-B*07:81,YYSEYRNIYAQTDESIAYLSYDYYTWAERAYEWY HLA-B*07:82,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:83,YYSEYRNIFAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:84,YYSEYRNIYAQTDESNLYWTYDYYTWAERAYEWY HLA-B*07:85,YYSEYRNICTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:86,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:87,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:88,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:89,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:90,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:91,YYSEYRNIYAQTYESNLYLSYDYYTWAERAYEWY HLA-B*07:92,YYSEYRNIYAQTDVSNLYLSYDYYTWAERAYEWY HLA-B*07:93,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:94,YYSEYWNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:95,YYSEYRNIYAQTDESNLYFSYDYYTWAERAYEWY HLA-B*07:96,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:97,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:98,YYSEYRNIYAQTDESNLYLSYDYYTCAERAYEWY HLA-B*07:99,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:100,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYLWY HLA-B*07:101,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:102,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:103,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:104,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:105,YYSEYRNIYAQTVESNLYLSYNYYTWAERAYEWY HLA-B*07:106,YYSEYRNIYAQTDESNLYLSYDYYTRAERAYEWY HLA-B*07:107,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:108,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:109,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:110,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:112,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:113,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:114,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:115,YYSEYRNIYAQTDESNLYLSYNFYTWAERAYEWY HLA-B*08:01,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:02,YDSEYRNIFTNTDENTAYLSYNYYTWAVDAYTWY HLA-B*08:03,YDSEYRNIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B*08:04,YDSEYRNISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:05,YDSEYRNTFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:07,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B*08:09,YDSEYRNIFTNTDESNLYWTYNYYTWAVDAYTWY HLA-B*08:10,YDSEYRDIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:11,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYAWY HLA-B*08:12,YDSEYRNIFTNTDESNLYLRYNYYTWAVDAYTWY HLA-B*08:13,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYTWY HLA-B*08:14,YDSEYRNIFTNTDESNLYLSYHDYTWAVDAYTWY HLA-B*08:15,YDSEYRNIFTNTDVSNLYLSYNYYTWAVDAYTWY HLA-B*08:16,YDSEYRNIFTNADESNLYLRYNYYTWAVDAYTWY HLA-B*08:17,YDSEYREISTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:18,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:20,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYTWY HLA-B*08:21,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B*08:22,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:23,YDSEYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:24,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:25,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYLWY HLA-B*08:26,YYAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:27,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:28,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:29,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:31,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:32,YDSTYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:33,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:34,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:35,YDSEYRNIFTNTDESNLYLSYNSYTWAVDAYTWY HLA-B*08:36,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:37,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:38,YDSEYREIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:39,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:40,YDSEYRNIFTNTDESNLYLSYNYYTWAVRAYEWY HLA-B*08:41,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:42,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:43,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:44,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:45,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:46,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:47,YDSEYRNIFTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:48,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:49,YDSEYRNIFTNTDESNLYIRSNFYTWAVDAYTWY HLA-B*08:50,YYSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:51,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:52,YDSEYRNIFTNTDESIAYLSYNYYTWAVDAYTWY HLA-B*08:53,YDSEYRNIFTNTDESNLYLSYNYYTWAEDAYTWY HLA-B*08:54,YDSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:55,YDSEYRNIFTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*08:56,YDAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:57,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:58,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:59,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:60,YDSEYRNIFTNTDESNLYISYNYYTWAVDAYTWY HLA-B*08:61,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:62,YHSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*13:01,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:02,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:03,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B*13:04,YYTMYREISTNTYENTAYWTYDSYTWAVLAYLWY HLA-B*13:06,YYTMYREISTNTYENTAYIRYNLYTWAVLAYTWY HLA-B*13:09,YYTMYREISTNTYESNLYWTYNLYTWAVLAYEWY HLA-B*13:10,YYTMYREISTNTYENTAYLRYDSYTWAVLAYEWY HLA-B*13:11,YYTMYREISTNTYENTAYLRYNLYTWAVLAYEWY HLA-B*13:12,YYTMYREISTNTYENTAYIRYNLYTWAVLAYGWY HLA-B*13:13,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:14,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:15,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWH HLA-B*13:16,YYTMYREISTNTYENTAYWTYNLYTWAELAYEWY HLA-B*13:17,YYAMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:18,YYTMYREISTNTYENTAYWTYNLYTWAVRAYEWY HLA-B*13:19,YYTMYREVSTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:20,YYTMYREISTNTYENTAYIRYNLYTWAELAYEWY HLA-B*13:21,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:22,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:23,YHTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:25,YYTMYREISTNTYESTAYIRYNLYTWAVLAYEWY HLA-B*13:26,YYTMYREISTNTYENTAYIRYDSYTWAVLAYEWY HLA-B*13:27,YYTMYREISTNTYENTAYWTFNLYTWAVLAYEWY HLA-B*13:28,YYTMYREISTNTYENTACIRYNLYTWAVLAYEWY HLA-B*13:29,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:30,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:31,YYTMYREISTNTYENTAYWTYNLYTWAEWAYEWY HLA-B*13:32,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:33,YYAMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:34,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:35,YYTMYREISTNTYENTAYWTYDYYTWAVLAYEWY HLA-B*13:36,YYTMYRNISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:37,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:38,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:39,YYTMYREISTNTYENNLYIRYNLYTWAVLAYEWY HLA-B*14:01,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:02,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:03,YYSEYRNICTNTDESNLYLWYNFYTWAERAYTWH HLA-B*14:04,HYSEYRNNCTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:05,YYSEYRNICTNTDESNLYLSYNFYTWAELAYTWH HLA-B*14:06,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:08,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:09,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:10,YYSEYRNICTNTDESNLYIRYNFYTWAELAYTWH HLA-B*14:11,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:12,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:13,YYSEYRNICTNTDESNLYLSYNYYTWAELAYTWH HLA-B*14:14,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*14:15,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:16,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:17,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:18,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*15:01,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:02,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:03,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:04,YYAMYREISTNTYESNLYWTYDSYTWAEWAYLWY HLA-B*15:05,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:06,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:07,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:08,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:09,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWY HLA-B*15:10,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B*15:11,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:12,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:13,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B*15:14,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLSY HLA-B*15:15,YYAMYRNISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:16,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:17,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:18,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:19,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:20,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*15:21,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:23,YYSEYRNICTNTYENIAYLRYDSYTWAELAYLWY HLA-B*15:24,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:25,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:27,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:28,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:29,YYSEYRNIFTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:30,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:31,YYAMYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:32,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B*15:33,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:34,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:35,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:36,YYAMYREISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:37,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWH HLA-B*15:38,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWH HLA-B*15:39,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:40,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:42,YYAMYREISTNTYESNLYWTYNLYTWAELAYTWY HLA-B*15:43,YYAMYREISTNTYEDTLYLRYDSYTWAEWAYLWY HLA-B*15:44,YYAMYRNICTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:45,YYAMYREISTNTYESNLYLSYDYYTWAEWAYLWY HLA-B*15:46,YYAKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:47,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:48,YYAMYREISTNTYESNLYLRYNYYTWAVLTYLWY HLA-B*15:49,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:50,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWY HLA-B*15:51,YYSEYRNICTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:52,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:53,YYTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:54,YYSEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:55,YYAMYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*15:56,YYAMYREIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:57,YYAMYREISTNTYVNNLYLRYDSYTWAEWAYLWY HLA-B*15:58,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B*15:60,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:61,YYSEYREISTNTDESNLYLRYDSYTWAELAYLWY HLA-B*15:62,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:63,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B*15:64,YYSEYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:65,YYAMYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B*15:66,YYAMYREICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:67,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:68,YYSEYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:69,YYSEYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B*15:70,YYAMYREISTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:71,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:72,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:73,YYAMYREISTNTYESNLYLRYNLYTWAEWAYLWY HLA-B*15:74,YYSEYREISINTYESNLYLRYDSYTWAELAYLWY HLA-B*15:75,YYAMYREISTNTYESNLYLRYDSYTWAQWAYLWY HLA-B*15:76,YYAMYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:77,YYAMYREISTNTYESNLYIRYDDYTWAEWAYLWY HLA-B*15:78,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:80,YYSEYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:81,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:82,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:83,YYAMYREISTNTYESNLYWTYNYYTWAVDAYTWY HLA-B*15:84,YYAMYREISTNTYESNLYLRFDSYTWAVRAYLWY HLA-B*15:85,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:86,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B*15:87,YYAMYREISTNTYESIAYLRYDSYTWAEWAYLWY HLA-B*15:88,YYAMYRNISTNTYESNLYIRYDSYTWATLAYLWY HLA-B*15:89,YYAMYRNISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:90,YYSEYRNICTNTYESNLYLRYDYYTWAELVYLWY HLA-B*15:91,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLSY HLA-B*15:92,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:93,YYSEYRNICTNTYESNLYLRYDSYTWAELAYTWY HLA-B*15:95,YYAMYQENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:96,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:97,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:98,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:99,YYSEYRNICTNTYESNLYLRYDYYTWAERAYLWY HLA-B*15:101,YYAMYREIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:102,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:103,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:104,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:105,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:106,YYAKYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:107,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:108,YYSEYRNICTNTYESNLYLRYDSYTWAELTYLWY HLA-B*15:109,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:110,YYAMYREISTNTYESNLYLRCDSYTWAEWAYLWY HLA-B*15:112,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:113,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:114,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:115,YYSEYRNICTNTYESTAYLRYDSYTWAELAYLWY HLA-B*15:116,YYAMYREISTNTYESNLYLRYDSYSLAEWAYLWY HLA-B*15:117,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*15:118,YYAMYREISTNTYESNLYLMYDSYTWAEWAYLWY HLA-B*15:119,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:120,YYAMYRDISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:121,YYAMYRNISTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:122,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:123,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:124,YYSEYRNICTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*15:125,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:126,YYAMYREISTNTYESNLYLSYDSCTWAEWAYLWY HLA-B*15:127,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:128,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:129,YYAMYREISTNTYESNLYLNYDSYTWAEWAYLWY HLA-B*15:131,YYSEYREISTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:132,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:133,YYSEYRNICTNTYESNLYLRYDFYTWAELAYLWY HLA-B*15:134,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:135,YYAMYREISTNTYENNLYLRYDSYTWAEWAYLWY HLA-B*15:136,YYAMYREISTNTYESNLYLRYDSYTWAVLTYLWY HLA-B*15:137,YYAMYREISTNTYESNLYWTYNFYTWAEWAYLWY HLA-B*15:138,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:139,YYAMYRNISANTYESNLYIRYDSYTWAELAYLWY HLA-B*15:140,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:141,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:142,YDAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:143,YYAKYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:144,YYAMYRNISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:145,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:146,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:147,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:148,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:150,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:151,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:152,YYAMYREIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:153,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:154,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:155,YYAMYREISTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*15:156,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:157,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:158,YYSEYREISTNTYESNLFLRYDSYTWAELAYLWY HLA-B*15:159,YYAMYREISTNTYESNLHLRYDSYTWAEWAYLWY HLA-B*15:160,YYAMHREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:161,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:162,YYAMYRENMASTYENIAYLRYHDYTWAALAYLWY HLA-B*15:163,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:164,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:165,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:166,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:167,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:168,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:169,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:170,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:171,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:172,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:173,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:174,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:175,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:176,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:177,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:178,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:179,YYAMYREISTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:180,YDSEYRNIFTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:183,YYTMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:184,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:185,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*15:186,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*15:187,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:188,YYAMYREISTNTYESNLYLRYNYYTWAVLAYTWY HLA-B*15:189,YYAMYRNICTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:191,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:192,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:193,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:194,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:195,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:196,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:197,YYSEYRNICTNTYESNLYLSYDSYTWAELAYLWY HLA-B*15:198,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:199,YYAMYREISTNTYESNLYLRYDSYTWAEDAYTWY HLA-B*15:200,YYSEYRNICTNTYESNLYLRYDSYTWATLAYLWY HLA-B*15:201,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:202,YYATYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*18:01,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:02,YHSTYRNISTNTYESNLYLNYDSYTWAVLAYTWH HLA-B*18:03,YHSTYRNISTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*18:04,YYATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:05,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:06,YHSTYRNISTNTYVSNLYLRYDSYTWAVLAYTWH HLA-B*18:07,YHSTYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:08,YHSTYRNISTNTYESNLYLRCDSYTWAVLAYTWH HLA-B*18:09,YHSTYRNISTNTYENTAYLRYDSYTWAVLAYTWH HLA-B*18:10,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:11,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B*18:12,YHSTYREISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:13,YHSTYRNISTNTYESNLYLRYDSYTWAVRAYTWH HLA-B*18:14,YHSTYRNISTNTYESNLYLSYDSYTWAVLAYTWH HLA-B*18:15,YHSTYRNISTNTYESNLYLRYDSYTWAELAYTWH HLA-B*18:18,YHSTYRNISTNTYESNLYLRSDSYTWAVLAYTWH HLA-B*18:19,YHSTYRNISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B*18:20,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:21,YHSTYRNISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*18:22,YHSTYRNISTNTYESNLYISYDSYTWAVLAYTWH HLA-B*18:24,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:25,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:26,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B*18:27,YHSTYRNISTNTYESNLYLMFDSYTWAVLAYTWH HLA-B*18:28,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:29,YHATYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:30,YHSTYRNISTNTYESNLYLRYDSYTWAERAYTWH HLA-B*18:31,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:32,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:33,YHSTYRNICTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:34,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:35,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:36,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*18:37,YHSEYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:38,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:39,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:40,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:41,YHSTYRNISTNTYESNLYLRYESYTWAVLAYTWH HLA-B*18:42,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:43,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:44,YHSTYRNISTNTYESNLYLWYDSYTWAVLAYTWH HLA-B*18:45,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:46,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:47,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:48,YHSKYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:49,YHSTYRNISTNTYENNLYLRYDSYTWAVLAYTWH HLA-B*18:50,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWH HLA-B*27:01,YHTEYREICAKTYENTAYLNYHDYTWAVLAYEWY HLA-B*27:02,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:03,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:04,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:05,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:06,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B*27:07,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:08,YHTEYREICAKTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:09,YHTEYREICAKTDEDTLYLNYHHYTWAVLAYEWY HLA-B*27:10,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:11,YHTEYREICAKTDESTLYLSYNYYTWAVLAYEWY HLA-B*27:12,YHTEYREICTNTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:13,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:14,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B*27:15,YHTEYREICAKTDESTLYLNYHDYTWAELAYTWY HLA-B*27:16,YHTEYREICTNTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:17,YHTEFREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:18,YHTEYREISTNTYESNLYLNYHDYTWAELAYEWY HLA-B*27:19,YHTEYREICAKTDEDTLYIRYHDYTWAVLAYEWY HLA-B*27:20,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B*27:21,YHTEYREICAKTDESTLYLRYDYYTWAELAYEWY HLA-B*27:23,YHTEYRNIFTNTYESTLYLNYHDYTWAVLAYEWY HLA-B*27:24,YHTEYREICAKTDESTLYLSYNYYSWAELAYEWY HLA-B*27:25,YHTEYREICAKTDESTLYLNYHDYTWAEWAYLWY HLA-B*27:26,YHTEYREICAQTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:27,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYEWY HLA-B*27:28,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWH HLA-B*27:29,YHTEYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*27:30,YHTEYREICAKTDENIAYIRYHDYTWAVLAYEWY HLA-B*27:31,YHTEYREICAQTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:32,YHTEYREICAKTDEDTLYLSYHDYTWAVLAYEWY HLA-B*27:33,YHTEYREICAKTDESNLYLSYNYYTWAVLAYEWY HLA-B*27:34,YHTEYREICAKTDEDTLYLSYDYYTWAVLAYEWY HLA-B*27:35,YHTEYREICAKTDEDTLYLNYNFYTWAVLAYEWY HLA-B*27:36,YHTEYREICAKTDESTLYLNYHDYSLAVLAYEWY HLA-B*27:37,YYTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:38,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B*27:39,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:40,YHTEYREICAKTDESNLYLNYHDYTWAELAYEWY HLA-B*27:41,YHTEYREICAKTDEDTLYLNYDSYTWAVLAYEWY HLA-B*27:42,YHTEYREICAKTDEDNLYLNYHDYTWAVLAYEWY HLA-B*27:43,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:44,YHTEYREICAKTYESNLYLNYHDYTWAVLAYEWY HLA-B*27:45,YHTEYREICAKTDEDTLYLNYHDYTWAVRAYEWY HLA-B*27:46,YHTEYREICAKTDEDTLYLNYHYYTWAVLAYEWY HLA-B*27:47,YHTEYREICAKTDEDTLYLNYHDYTWAVDAYLSY HLA-B*27:48,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:49,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:50,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYESY HLA-B*27:51,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:52,YHTTYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:53,YHTEYREICAKTDEDIAYLNYHDYTWAVLAYEWY HLA-B*27:54,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:55,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:56,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:57,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:58,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:60,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:61,YHTEYREICAKTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:62,YHTEYREICAKTDENIAYLNYHDYTWAVLAYTWH HLA-B*27:63,YHTEYREICAKTDESTLYLNYHDYTWAELAYLWY HLA-B*27:67,YHTMYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:68,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:69,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*35:01,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:02,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:03,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:04,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:05,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:06,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:07,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:08,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:09,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:10,YYATYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:11,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWY HLA-B*35:12,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:13,YYATYREIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:14,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*35:15,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYEWY HLA-B*35:16,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:17,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:18,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B*35:19,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:20,YYATYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:21,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWH HLA-B*35:22,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYLWY HLA-B*35:23,YYATYRNIFTNTYESNLYIRFDSYTWAVLAYLWY HLA-B*35:24,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B*35:25,YYSEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:26,YYAEYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:27,YYATYRNIFTNTYENNLYIRYDSYTWAVLAYLWY HLA-B*35:28,YYATYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:29,YYATYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:30,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:31,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*35:32,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:33,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYEWY HLA-B*35:34,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:35,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYTWY HLA-B*35:36,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:37,YYATYRNIFTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*35:38,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLWY HLA-B*35:39,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:41,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B*35:42,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:43,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:44,YYATYRNIFTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*35:45,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLSY HLA-B*35:46,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:47,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:48,YYATYRNIFTNTYESNLYIRSDSYTWAVLAYLWY HLA-B*35:49,YYAEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:50,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:51,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:52,YYATYRNIFTNTYECNLYIRYDSYTWAVLAYLWY HLA-B*35:54,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:55,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:56,YYATYRNIFTNTYENNLYIRYDFYTWAVLAYLWY HLA-B*35:57,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:58,YYATYRNIFTNTYESNLYLSYDSYTWAELAYLWY HLA-B*35:59,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:60,YYATYRNIFTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*35:61,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:62,YYATYRNIFTNTYESNLYIRYDSYTWAVWAYLWY HLA-B*35:63,YHTKYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:64,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:66,YYATYRNIFTNTYESNLYLSYDSYTWAVRAYEWY HLA-B*35:67,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:68,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:69,YYATYREIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:70,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:71,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLSY HLA-B*35:72,YYATYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:74,YYATYRNIFTNTYVSNLYIRYDFYTWAVLAYLWY HLA-B*35:75,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B*35:76,YYATYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:77,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:78,YYATYRNIFANTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:79,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:80,YYATYREIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:81,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWH HLA-B*35:82,YYATYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:83,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:84,YHTTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:85,YYATYRNICTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:86,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*35:87,YYATYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*35:88,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*35:89,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:90,YYTTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:91,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:92,YYATYRNIFTNAYESNLYIRYDSYTWAVLAYLWY HLA-B*35:93,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYTWY HLA-B*35:94,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:95,YYATYRNISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:96,YYATYRNIFTNTYESNLYIRYDFYTWAELAYTWH HLA-B*35:97,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:98,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:99,YYATYRNIFTNTYESNLYLRYDSYTWAERAYLWY HLA-B*35:100,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:101,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:102,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:103,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:104,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:105,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:106,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:107,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:108,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:109,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWH HLA-B*35:110,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:111,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:112,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:113,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:114,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:115,YYATYRNIFTNTYESNLYIRYDSYTWAVDAYLWY HLA-B*35:116,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:117,YYATYRNIFTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*35:118,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:119,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:120,YYATYRNIFTNTYESNLYIRHDSYTWAVLAYLWY HLA-B*35:121,YYATYRNIFTNTYESNLYIRYHSYTWAVLAYLWY HLA-B*35:122,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:123,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:124,YYSTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:125,YYSTYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:126,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:127,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:128,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:131,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:132,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:133,YYATYRNIFTNTYESNLYIRYVSYTWAVLAYLWY HLA-B*35:135,YYATYRNICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:136,YYATYRNIFTNTDESNLYIRYDFYTWAVLAYLWY HLA-B*35:137,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:138,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:139,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:140,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:141,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:142,YYSTYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:143,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:144,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*37:01,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:02,YHSTYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*37:04,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWH HLA-B*37:05,YHSTYREISTNTYEDNLYIRSNFYTWAVDAYTWY HLA-B*37:06,YHSKYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:07,YHSTYREISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*37:08,YHSTYRNISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:09,YHSTYREISTNTYEDTLYLSYDYYTWAVDAYTWY HLA-B*37:10,YHSTYREISTNTYENTAYIRSNFYTWAVDAYTWY HLA-B*37:11,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:12,YHSTYREISTNTYEDTLYIRYNYYTWAVDAYTWY HLA-B*37:13,YHSTYREISTNTYEDTLYIRSNFYTWAEDAYTWY HLA-B*37:14,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:15,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:17,YHSTYREISTNTYEDTLYIRSNFYTWTVDAYTWY HLA-B*37:18,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:19,YHSTYREISTNTYEDTLYIRYNFYTWAVDAYTWY HLA-B*37:20,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:21,YHSTYREIFTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:22,YHATYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:23,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*38:01,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:02,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:03,YYSEYREISTNTDESTAYLRYNFYTWAVLTYTWY HLA-B*38:04,YYSEYREICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:05,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:06,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:07,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:08,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYMWY HLA-B*38:09,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:10,YYSEYRNICTNTYENIAYLRYNFYTWAELAYTWY HLA-B*38:11,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:12,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:13,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:14,YYSEYRNICTNTDENIAYLRYNFYTWAVLTYTWY HLA-B*38:15,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:16,YYTEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:17,YYSEYRNICTNTYEDTLYLRYNFYTWAVLTYTWY HLA-B*38:18,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:19,YYSEYRNICTNTYENIAYLSYNFYTWAVLTYTWY HLA-B*38:20,YYSEYRNICTNTYENIAYIRYNFYTWAVLTYTWY HLA-B*38:21,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:22,YYSEYRNICTNTYENIAYLNYNFYTWAVLTYKWY HLA-B*38:23,YYSEYRNICTNTYENTAYFRYNFYTWAVLTYTWY HLA-B*39:01,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:02,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:03,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:04,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:05,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:06,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:07,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*39:08,YYSEYREISTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:09,YYSEYRNICTNTDESNLYLRSNFYTWAVLTYTWY HLA-B*39:10,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:11,YYSEYRNICTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:12,YDSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:13,YYSEYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:14,YYSEYRNICTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*39:15,YYSEYRNICTNTDESNLYLRYDFYTWAVLTYTWY HLA-B*39:16,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:17,YYSEYRNIYTNTDESNLYLRYNLYTWAVLTYTWY HLA-B*39:18,YYSEYRNICTNTDESNLYLRYNFYTWAEWTYTWY HLA-B*39:19,YYSTYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:20,YYSEYRNIYTNTYENNLYLRYNFYTWAVLTYTWY HLA-B*39:22,YYSEYREICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:23,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:24,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:26,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:27,YYSEYRNICTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B*39:28,YYSEYRNICTNTDESNLYLTYNFYTWAVLTYTWY HLA-B*39:29,YYSEYRNICTNTDESNLYLSYDYYTWAVLTYTWY HLA-B*39:30,YYSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B*39:31,YHSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:32,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWH HLA-B*39:33,YYSEYRNICTNTDESNLYWTYNFYTWAVRAYLWY HLA-B*39:34,YYSEYRNICTNTDESNLYWTYNFYTWAVLAYTWY HLA-B*39:35,YYSEYRNICTNTDESNLYLRYNFYTWAELTYTWY HLA-B*39:36,YYSEYRNICTNTDESNLYLRYNFYTWAEWAYTWY HLA-B*39:37,YYSEYRNICTNTYESNLYLSYNFYTWAVLTYTWY HLA-B*39:39,YYSEYRNISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:41,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:42,YYSEYRNICTNTDESNLYIRYNFYTWAVLTYTWY HLA-B*39:43,YYSEYRNICTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*39:44,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:45,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:46,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:47,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYEWY HLA-B*39:48,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWH HLA-B*39:49,YYSEYREISTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:50,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYEWY HLA-B*39:51,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:52,YYSEYRNICTDTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:53,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:54,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:55,YYSEYRNICTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:56,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:57,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:58,YYSEYRNIFTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:59,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:60,YYSEYRNICTNTDESNLYLRYNFYTWAALTYTWY HLA-B*40:01,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:02,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:03,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B*40:04,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:05,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWY HLA-B*40:06,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:07,YHTKYREIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:08,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:09,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:10,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:11,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:12,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:13,YHTKYREIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:14,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:15,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:16,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:18,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:19,YHTKYREISTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:20,YHTKYREISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*40:21,YYAMYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:23,YHTKYREISTNTYESNLYLRYNYYSWAERAYEWY HLA-B*40:24,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:25,YHTKYRNISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:26,YHTKYREISTNTYESNLYLRYNYYTWAELAYLWY HLA-B*40:27,YHTKYREISTNTYESNLYLSYNNYTWAVLAYEWY HLA-B*40:28,YHTKYREISTNTYESNLYIRYNYYTWAELAYLWH HLA-B*40:29,YHTKYPEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:30,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:31,YHTKYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B*40:32,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:33,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:34,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:35,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:36,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B*40:37,YHTKYREISTNTYENNLYLSYNYYTWAVLAYEWY HLA-B*40:38,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B*40:39,YHTKYREISTNTYESNLYLSYNYYTWAVLAYTWY HLA-B*40:40,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:42,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:43,YHTKYREISTNTDESNLYLRYNYYSLAVLAYEWY HLA-B*40:44,YHTKYREISTNTYESNLYWTYDYYTWAVLAYEWY HLA-B*40:45,YHTKYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B*40:46,YHTEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:47,YHTKYREISTNTYENTAYLRYNYYSLAVLAYEWY HLA-B*40:48,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B*40:49,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:50,YHTKYREISTNTDESNLYLSYNYYTWAVLAYEWY HLA-B*40:51,YHTKYREISTNTYESNLYLRYNYYSWAELAYTWH HLA-B*40:52,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*40:53,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:54,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:55,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:56,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:57,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:58,YYAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:59,YHTKYREISTNTYESNLYIRYDSYSLAVLAYEWY HLA-B*40:60,YHTKYREISTNTYESNLYLRSDSYSLAVLAYEWY HLA-B*40:61,YHTKYREIYTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:62,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:63,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:64,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:65,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:66,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:67,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:68,YHTKYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:69,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:70,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:71,YHTKYREISTNTYESNLYLSYNLYTWAVLAYLWY HLA-B*40:72,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B*40:73,YHTKYREISTNTYVSNLYLRYNYYSLAVLAYEWY HLA-B*40:74,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:75,YHTKYREICTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:76,YHTKYREISTNTYESKLYLRYNYYSLAVLAYEWY HLA-B*40:77,YHTKYREISTNTYESNLYLRYNFYTLAVLAYEWY HLA-B*40:78,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:79,YHTKYREISTNTYESNLHLRYNYYSLAVLAYEWY HLA-B*40:80,YHTKYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*40:81,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:82,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:83,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:84,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:85,YHTKYREISTNTYESNLYLSYNYYIWAVLAYEWY HLA-B*40:86,YHTKYREISTNTYESNLYWTYNFYTWAVLAYEWY HLA-B*40:87,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:88,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:89,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:90,YHTKYREISTNTYESNLYLSYNYYTWAVLAHEWY HLA-B*40:91,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:92,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:93,YHTEYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:94,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:95,YHTKYREISTNTYESNLYWTYNYYTWAELAYEWY HLA-B*40:96,YHTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:97,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:98,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:99,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:100,YHTKYREISTNTYESNLYLRFNYYSLAVLAYEWY HLA-B*40:101,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:102,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:103,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:104,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:105,YHTKYREISTNTYESNLYLSYNSYTWAVLAYEWY HLA-B*40:106,YHTKYRNIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:107,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:108,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:109,YHTKYREISTNTYESIAYWTYNYYTWAVLAYEWY HLA-B*40:110,YYTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:111,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:112,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:113,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWH HLA-B*40:114,YHTKYREISTNTYESNLYLRYNYYSWAVLAYEWY HLA-B*40:115,YHTKYWEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:116,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:117,YHTKYREISTNTYENIAYLRYNYYSLAVLAYEWY HLA-B*40:119,YHTKYREISTNTYDSNLYLSYNYYTWAVLAYEWY HLA-B*40:120,YHTKYREISTNTYESNLYIRYDYYTWAVLAYEWY HLA-B*40:121,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:122,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:123,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:124,YHTKYREISTNTYESNLYLRYHDYSLAVLAYEWY HLA-B*40:125,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:126,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:127,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:128,YHTKYREISTNTYESNLYLRYNYYSLAVRAYEWY HLA-B*40:129,YYTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:130,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:131,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:132,YHTKYREISTNTYESNLYLRYNYYSLAVLAYESY HLA-B*40:134,YHTKYREISTNIYESNLYLRYNYYSLAVLAYEWY HLA-B*40:135,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:136,YHTKYREISTNTYESNLYLRYNYYTWAVDAYEWY HLA-B*40:137,YYAMYREISTNTYESNLYIRYNYYSLAVLAYEWY HLA-B*40:138,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:139,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:140,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:141,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:143,YHTKYREISTNTYESNLYLSFNYYTWAVLAYEWY HLA-B*40:145,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:146,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:147,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*41:01,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:02,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:03,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:04,YHTKYREISTNTYESNLYLSYDYYTWAVDAYTWY HLA-B*41:05,YHTKYREISTNTYESKLYWRYNYYTWAVDAYTWY HLA-B*41:06,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:07,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:08,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:09,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:10,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:11,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:12,YHAKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*42:01,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:02,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:04,YYSEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*42:05,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:06,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B*42:07,YYSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:08,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:09,YHSEYRNIYAQTDESNLYLSYDSYTWAVDAYTWY HLA-B*42:10,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:11,YYSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*42:12,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:13,YYSEYRNIYAQTDESNLYIRYNYYTWAVDAYTWY HLA-B*42:14,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*44:02,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:03,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:04,YYTKYREISTNTYENTAYIRYDDYTWAVRAYTSY HLA-B*44:05,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:06,YYATYRNIFTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:07,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:08,YYTMYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:09,YYTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B*44:10,YYTKYREISTNTYENTAYIRFNLYTWAVLAYLSY HLA-B*44:11,YYTKYREISTNTYENTPYIRYDDYTWAVDAYLSY HLA-B*44:12,YYTKYRNISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:13,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:14,YYTKYREISTNTYENTAYIRYNDYTWAVDAYLSY HLA-B*44:15,YHTKYREISTNTYESTAYWRYNLYTWAVDAYLSY HLA-B*44:16,YYTKYREISTNTYENTAYIRYDDYTWAVDAYEWY HLA-B*44:17,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B*44:18,YHTKYREISTNTYENIAYWRYNLYTWAVDAYLSY HLA-B*44:20,YYTKYREISTNTYENTAYWTYDDYTWAVDAYLSY HLA-B*44:21,YYTKYREISTNTYENTAYIRYDDYTWAVDAYESY HLA-B*44:22,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:24,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:25,YYTKYREISTNTYENIAYIRYDYYTWAVDAYLSY HLA-B*44:26,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:27,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:28,YYTKYREISTNTYENTAYIRYDDYTWAVRAYLSY HLA-B*44:29,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B*44:30,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:31,YYTKYREISTNTYENTAYLRYNYYSLAVLAYESY HLA-B*44:32,YYTKYPEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:33,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:34,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:35,YYTKYREISTNTYENTAYIRYDDYTWAVEAYLSY HLA-B*44:36,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:37,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWY HLA-B*44:38,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:39,YYPKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:40,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:41,YYTKYREISTNTYENTAYLRYDDYTWAVDAYLSY HLA-B*44:42,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLWY HLA-B*44:43,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B*44:44,YYTEYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:45,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:46,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B*44:47,YYTKYREISTNTYENTAYWTYDDYTWAVLAYLSY HLA-B*44:48,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:49,YDTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:50,YYTKYREISTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*44:51,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:53,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:54,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B*44:55,YHTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:57,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:59,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:60,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:62,YYTKYREISTNTYENTAYIRYNYYTWAVDAYLSY HLA-B*44:63,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:64,YYTKYREISTNTYENTAYIRYDDYTWAVLAYEWY HLA-B*44:65,YYTKYREISTNTYENTAYLRYDDYTWAVLAYLSY HLA-B*44:66,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:67,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:68,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:69,YYTKYWEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:70,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:71,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:72,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:73,YYTKYREISTNTYENTAYIRYDDYTWAVDGYLSY HLA-B*44:74,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:75,YYTKYREISTNTYENNLYIRYDYYTWAVDAYLSY HLA-B*44:76,YYTKYREISTNTYENTAYIRYDDYTWAERAYLSY HLA-B*44:77,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:78,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:79,YYTKYREISTNTYENTAYIRYDDYTWAELAYLSY HLA-B*44:80,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:81,YYTNYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:82,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:83,YYATYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:84,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:85,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:86,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:87,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:88,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:89,YYTKYREISTNTYENTAYIRYDDYTWAVDTYLSY HLA-B*44:90,YYTKYREIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B*44:91,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLWY HLA-B*44:92,YYTKYREISTNTYENTAYIRYDDYTWAMLAYLSY HLA-B*44:93,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:94,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:95,YYTKYREISTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:96,YYTKYREISTNTYENTAYIGYDDYTWAVLAYLSY HLA-B*44:97,YYTKYREICAKTDENTAYIRYDDYTWAVDAYLSY HLA-B*44:98,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:99,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:100,YYTKYREISTNTYENTAYWRYDDYTWAVDAYLSY HLA-B*44:101,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:102,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:103,YHTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:104,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:105,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:106,YYTKYREISTNTYENTAYLSYDDYTWAVDAYLSY HLA-B*44:107,YYTKYREISTNTYENTAYIRYDYYTWAVLAYLSY HLA-B*44:109,YYTKYREISTNTYESTAYIRYDDYTWAVLAYLSY HLA-B*44:110,YYTKYREISTNTYENTAYISYDDYTWAVLAYLSY HLA-B*45:01,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:02,YHTKYREISTNTYESNLYWRYNFYTWAVDAYLSY HLA-B*45:03,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:04,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLWY HLA-B*45:05,YHTKYREISTNTYESNLYWRYNLYTWAVDVYLSY HLA-B*45:06,YHTKYREIYAQTDESNLYWRYNLYTWAVDAYLSY HLA-B*45:07,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:08,YHTKYREISTNTYESNLYWRYNLYTWAVDAYTWY HLA-B*45:09,YHTKYREISTNTYESNLYWRYDSYTWAVDAYLSY HLA-B*45:10,YHTKYREISTNTYESNLYWRYNLYTWAVDAYEWY HLA-B*45:11,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:12,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*46:01,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:02,YYAMYREKYRQTGVSNLYLRYDSYTWAEWAYLWY HLA-B*46:03,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-B*46:04,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:05,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:06,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYEWY HLA-B*46:08,YYAMYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-B*46:09,YYAMYREKYRQTDVSNLYLRYDSYTWAVWAYLWY HLA-B*46:10,YYTMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:11,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYLWY HLA-B*46:12,YYAMYREKYRQTDVSNLYLSYDSYTWAEWAYLWY HLA-B*46:13,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-B*46:14,YHAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:16,YYAMYREKFRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:17,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLSY HLA-B*46:18,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYTWY HLA-B*46:19,YYAMYREKYRQTDVSNLYLRYDSYTWAVLTYLWY HLA-B*46:20,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:21,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYTWY HLA-B*46:22,YYAMYREKYRRTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:23,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:24,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*47:01,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:02,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:03,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:04,YYTKYREISTNTYENTAYLNYHDYTWAVLAYEWY HLA-B*47:05,YYTKYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*47:06,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:07,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*48:01,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:02,YYSEYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*48:03,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*48:04,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:05,YYSEYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*48:06,YYSEYRNIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:07,YYSEYREISTNTYESNLYLSYNFYSLAVLAYEWY HLA-B*48:08,YYSEYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*48:09,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:10,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:11,YYSEYREISTNTYESNLYLSYNYYSLAVLAYELY HLA-B*48:12,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:13,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:14,YYSEYREISTNTYESNLYLSYNSYTLAVLAYEWY HLA-B*48:15,YYSEYREISTNTYESNLYLSYNYYSLAELAYEWY HLA-B*48:16,YYSEYRVISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:17,YYSEYREISTNTYESNLYIRYNFYSLAVLAYEWY HLA-B*48:18,YYSEYREISTNTYESIAYLSYNYYSLAVLAYEWY HLA-B*48:19,YYSEYREISTNTYESNLYLSYNYYSLAVWAYEWY HLA-B*48:20,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:21,YYSEYREISTNTYESNLYLNYNYYSLAVLAYEWY HLA-B*48:22,YHSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:23,YYSEYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*49:01,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:02,YHTKYREISTNTYENTAYWRYNLYTWAELAYLWY HLA-B*49:03,YHATYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:04,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:05,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:06,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:07,YHTKYREISTNTYENIAYWRYNLYTWAELAYEWY HLA-B*49:08,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:09,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWH HLA-B*49:10,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*50:01,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:02,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B*50:04,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:05,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:06,YHTRYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:07,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:08,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:09,YHTKYREISTNTYESNLYWRYNFYTWAELAYLWY HLA-B*51:01,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:02,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B*51:03,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLGH HLA-B*51:04,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:05,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWY HLA-B*51:06,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWH HLA-B*51:07,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:08,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*51:09,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:12,YYATYRNIFTNTYENIADWTYNYYTWAELAYLWH HLA-B*51:13,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B*51:14,YYATYRNIFTNTYENIAYWTYKYYTWAELAYLWH HLA-B*51:15,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*51:16,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWH HLA-B*51:17,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:18,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:19,YYATYRNIFTNTYENIAYWTYNYYTWAVLTYLWH HLA-B*51:20,YYATYRNIFTNTDENIAYWTYNYYTWAVDAYLWH HLA-B*51:21,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWH HLA-B*51:22,YYATYRNICTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:23,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLSY HLA-B*51:24,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:26,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:28,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:29,YYATYRNIFTNTYENIAYWTYNYYTWAERAYLWH HLA-B*51:30,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:31,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWH HLA-B*51:32,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:33,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:34,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWY HLA-B*51:35,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:36,YYATYRNIFTNTYENIAYWTYNYYTWAEDAYTWY HLA-B*51:37,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B*51:38,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:39,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:40,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*51:42,YYATYRNIFTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*51:43,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:45,YYATYRNIFTNTYENIAYLRYDSYTWAELAYLWH HLA-B*51:46,YYATYRNIFTNTYENIAYITYNYYTWAELAYLWH HLA-B*51:48,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:49,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:50,YYATYRNIFTNTYENGLYWTYNYYTWAELAYLWH HLA-B*51:51,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:52,YYATYRNIFTNTHENIAYWTYNYYTWAELAYLWH HLA-B*51:53,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:54,YYATYRNIFTNTYENTAYWTYNYYTWAVRAYLWY HLA-B*51:55,YYATYRNIFTNTYENIAYWTYNYYTWAEQAYLWH HLA-B*51:56,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:57,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:58,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:59,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWY HLA-B*51:60,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:61,YYATYRNIFTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*51:62,YYATYRNIFTNTYENIAYLRYNLYTWAELAYLWH HLA-B*51:63,YYATYRNIFTNTYENIAYWTYNSYTWAELAYLWH HLA-B*51:64,YYATYRNIFTNTYENIAYLSYNYYTWAELAYLWH HLA-B*51:65,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:66,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:67,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:68,YDATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:69,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:70,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:71,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:72,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:73,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:74,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:75,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:76,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:77,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:78,YYATYRNIFTNTYENTAYWTYNYYTWAELAYLWH HLA-B*51:79,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:80,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:81,YYATYRNIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*51:82,YYATYRNIFTNTYENIAYWTYNYYTWAERAYEWH HLA-B*51:83,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:84,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:85,YYATYRNIFTNTYENIAYWTYHDYTWAELAYLWH HLA-B*51:86,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:87,YYATYRNIFTNTYENIAYWTYNYYTWADLAYLWH HLA-B*51:88,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:89,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:90,YYATYRNIFTNTYENIAYWTYDYYTWAELAYLWH HLA-B*51:91,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:92,YYATYRNIFTNTYENIAYWTYDFYTWAELAYLWH HLA-B*51:93,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWY HLA-B*51:94,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:95,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:96,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:01,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:02,YYAMYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:03,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*52:04,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:05,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:06,YYATYREIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:07,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:08,YYATYREISTNTYENIAYWTYNYYTWAELAYEWH HLA-B*52:09,YYATYREISTNTYESIAYWTYNYYTWAELAYLWH HLA-B*52:10,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*52:11,YYATYREISTNTYENIAYWTYNYYTWAELAYLWY HLA-B*52:12,YYATYREISTNTYENIAYWTYDYYTWAELAYLWH HLA-B*52:13,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:14,YYATYREISTNTYENIAYWTYNFYTWAELAYLWH HLA-B*52:15,YYATYREISTNTYENIAYWTYNYYTWAELAYLSH HLA-B*52:16,YYSEYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:17,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:18,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:19,YYATYREISTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*52:20,YYATYREISTNTYENTAYWTYNYYTWAELAYLWH HLA-B*52:21,YYATYREISTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*53:01,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:02,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWH HLA-B*53:03,YYATYRNIFTNTYEDTLYIRYDSYTWAVLAYLWY HLA-B*53:04,YYATYRNIFTNTYENIAYIRYDFYTWAVLAYLWY HLA-B*53:05,YYATYRNIFTNTYESIAYIRYDSYTWAVLAYLWY HLA-B*53:06,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWH HLA-B*53:07,YYATYRNIFTNTYENIAYIRSNFYTWAVLAYLWY HLA-B*53:08,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWY HLA-B*53:09,YYATYRNISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:10,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:11,YYATYRNIFTNTYENTAYIRYDSYTWAVRAYLWY HLA-B*53:12,YYATYRNIFTNTYESTAYIRYDSYTWAVLAYLWY HLA-B*53:13,YYATYRNIFTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:14,YYATYRNIFTNTYENIAYLSYDSYTWAVLAYLWY HLA-B*53:15,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:16,YYATYRNIFTNTYESIAYIRYDSYTWAVRAYLWY HLA-B*53:17,YYATYREISTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:18,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:19,YYATYRNIFTNTYENIAYIRYNYYTWAVLAYLWY HLA-B*53:20,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:21,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:22,YYATYRNIFTNTYENIAYIRYDSYTWAVDAYLSY HLA-B*53:23,YYATYRNIFTNTDENIAYIRYDSYTWAVLAYLWY HLA-B*54:01,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:02,YHAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:03,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*54:04,YYAGYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B*54:06,YYAGYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*54:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:09,YYAGYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*54:10,YYAGYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*54:11,YYAGYRNIYAQTDESNLYWTYNYYSWAVLAYTWY HLA-B*54:12,YYAGYRNIYAQTDENIAYWTYNLYTWAVLAYTWY HLA-B*54:13,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:14,YYAGYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*54:15,YYAGYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*54:16,YYAGYRNIYAQTDESNLYWTYDLYTWAVLAYTWY HLA-B*54:17,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:18,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:19,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:20,YYAGYRNIYAQTDESNLYWTYNLYTWAERAYTWY HLA-B*54:21,YYSGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:22,YYAGYRNIYAQTDESNLYWTYNLYSWAVLAYTWY HLA-B*54:23,YYAGYRNIYAQTEESNLYWTYNLYTWAVLAYTWY HLA-B*55:01,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:02,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:03,YYAEYRNIYAQTDVSNLYWTYNLYTWAELAYTWY HLA-B*55:04,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYTWY HLA-B*55:05,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:08,YYAEYRNIYAQTDESNLYLRYNYYTWAVLAYLWY HLA-B*55:09,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*55:10,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:11,YYAEYRNIYAQTDESNLYWMYNLYTWAELAYTWY HLA-B*55:12,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYTWY HLA-B*55:13,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYTWY HLA-B*55:14,YYAEYRNIYAQTDESNLYIVYDSYTWAELAYTWY HLA-B*55:15,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:16,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:17,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:18,YYAEYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*55:19,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:20,YYAEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*55:21,YYAEYRNIYAQTDESNLYWTYNLYTWAEWAYTWY HLA-B*55:22,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B*55:23,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*55:24,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYEWY HLA-B*55:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:27,YYAEYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*55:28,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:29,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:30,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:31,YYAEYRNIYAQTYESNLYWTYNLYTWAELAYTWY HLA-B*55:32,YYAEYRNIYAQTDESNLYWTYNSYTWAVLAYTWY HLA-B*55:33,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:34,YYAEYREISAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:35,YYAMYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:36,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:37,YYAEYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*55:38,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:39,YYAEYRNIYAQTDESNLYWTYNLHTWAVLAYTWY HLA-B*55:40,YYAEYREIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:41,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:42,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:43,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*56:01,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:02,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:03,YYAEYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*56:04,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:05,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:06,YYATYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:07,YYAEYRNIYAQTDENTAYWTYNLYTWAVLAYLWY HLA-B*56:08,YYAEYREKYGQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:09,YYAEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*56:10,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYTWY HLA-B*56:11,YYAEYRNIYAQTDESNLYIRYDFYTWAVLAYLWY HLA-B*56:12,YYAEYRNIYAQTDESNLYIRYNYYTWAVLAYTWY HLA-B*56:13,YYAEYRNIYAQTDESNLYWTYNLYTWAVDAYLWY HLA-B*56:14,YYAEYREKYRQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:15,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYLWY HLA-B*56:16,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:17,YYAEYRNIYANTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:18,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*56:20,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:21,YYAEYRNIYAQTDENIAYWTYNYYTWAELAYLWH HLA-B*56:22,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYLWY HLA-B*56:23,YYAEYRNIYANTYESNLYWTYNLYTWAVLAYTWY HLA-B*56:24,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYLWY HLA-B*56:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:27,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:29,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*57:01,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:02,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B*57:03,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:04,YYAMYGENMASTYENIAYIVYDDYTWAVRAYLWY HLA-B*57:05,YYAMYGENMASTYENIAYIRYNYYTWAVRAYLWY HLA-B*57:06,YYAMYGENMASTYENIAYIVYDSYIWAVLAYLWY HLA-B*57:07,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLSY HLA-B*57:08,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:09,YYAMYGENMASTYENIAYIVYNYYTWAEDAYLWY HLA-B*57:10,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:11,YYAMYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*57:12,YYAMYGENMASTYESNLYIVYNYYTWAVRAYLWY HLA-B*57:13,YYAMYGENMASTYENIAYIVYDSYTWAERAYEWY HLA-B*57:14,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWH HLA-B*57:15,YYAMYGENVASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:16,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:17,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:18,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:19,YYAMYGENMASTYENIAYIVYDSYTWAVRAYLWY HLA-B*57:20,YYAMYGKNMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:21,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:22,YYAMYGENMASTYENIAYIVYDSYTWAELAYLWY HLA-B*57:23,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:24,YYAMYGENMASTYENIAYIVYDSYTWAVDAYLWY HLA-B*57:25,YYAMYGENMASTYENIAYIVYDSYTWAVLAYEWY HLA-B*57:26,YYAMYGENMASTYENIAYIVYDSYTWAVLAYTWY HLA-B*57:27,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:29,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:30,YYAMYGENMASTYENIAYIVYDSYTWAARAYLWY HLA-B*57:31,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:32,YYAMYGENMASTYENIAYIVYHDYTWAVLAYLWY HLA-B*58:01,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:02,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:04,YYATYEENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:05,YYATYGENMASTYENIAYIRYDSYTLAALAYTWY HLA-B*58:06,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B*58:07,YYATYGENMASTYENIAYLWYDSYTWAVLAYLSY HLA-B*58:08,YYATYGENMASTYENIAYWTYNYYTWAELAYLWH HLA-B*58:09,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWH HLA-B*58:11,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:12,YYSTYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:13,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:14,YYATYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*58:15,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:16,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:18,YYATYGENMASTYENIAYLSYDSYTWAVLAYLWY HLA-B*58:19,YYATYGENMASTYENIAYIRYDSYTWAELAYLWY HLA-B*58:20,YYATYGENMASTYENIAYLRYNFYTWAVLTYTWY HLA-B*58:21,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:22,YYATYGENMASTYENIAYIRYDSYTWAVRAYLWY HLA-B*58:23,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:24,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:25,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:26,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:27,YYATYGENMASTYENIAYLSYNYYTWAVLAYEWY HLA-B*58:28,YYATYGENMASTYENIAYIRYNYYTWAVLAYLWY HLA-B*58:29,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:30,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*59:01,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*59:02,YYAEYRNIFTNTYENIAYWTYNYYTWAVLAYTWY HLA-B*59:03,YYAEYRNIFTNTYENIAYWTYNFYTWAVLAYTWY HLA-B*59:04,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*59:05,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*67:01,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B*67:02,YYSGYREKYRQADVSNLYLRYNFYTWAVLTYTWY HLA-B*73:01,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*73:02,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*78:01,YYATYRNIFTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:02,YYATYRNIFTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:03,YYATYRNICTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:04,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B*78:05,YYATYREISTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:06,YYATYREISTNTYENNLYWTYNYYTWAELAYLWH HLA-B*78:07,YYATYRNIFTNTDESNLYWTYNYYTWAELAYTWH HLA-B*81:01,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:02,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:03,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:05,YYSEYRNIFAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*82:01,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:02,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:03,YYSEYRNIYAQTDESNLYLRYNLYTWAVDAYLSY HLA-B*83:01,YYSEYRNIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-C*01:02,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:03,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:04,YFSGYREKYRQTDVSNLYLWCDSYTWAEWAYTWY HLA-C*01:05,YFSGYREKYRQTDVSNLYLRSDYYTWAERAYTWY HLA-C*01:06,YFSGYREKYRQTDVSNLYLWCDYYTWAVRAYTWY HLA-C*01:07,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:08,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:09,YFSGYREKYRQTDVSNLYLWCDYYTWAEWAYTWY HLA-C*01:10,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYEWY HLA-C*01:11,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:12,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C*01:13,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:14,YFSGYREKYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C*01:15,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:16,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:17,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:18,YFSGYREKYHQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:19,YFSGYREKYRQTDVCNLYLWCDYYTWAERAYTWY HLA-C*01:20,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:21,YFSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*01:22,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYTWY HLA-C*01:23,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:24,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:25,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:26,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:27,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:28,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:29,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTCY HLA-C*01:30,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWH HLA-C*01:31,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYMWY HLA-C*01:32,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:33,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:34,YFSGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*01:35,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYLWY HLA-C*01:36,YFSGYREKYRQTDVSNLYLRFDYYTWAERAYTWY HLA-C*01:38,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:39,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:40,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*02:02,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:03,YYAGYREKYRQTDVNKLYLRYDSYTWAVLAYEWY HLA-C*02:04,CYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYEWY HLA-C*02:06,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C*02:07,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C*02:08,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:09,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:10,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:11,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:12,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYEWY HLA-C*02:13,YYAGYREKYRQTDVNKLYLRYDSYTWAAWAYEWY HLA-C*02:14,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:15,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:16,YYAGYREKYRQTDVNKLYLRYDSYTWAELAYEWY HLA-C*02:17,YYAGYREKYRQTDVNKLYLWFDSYTWAEWAYEWY HLA-C*02:18,YYAGYREKYRQTDVNKLYLRYDSYTWAALAYEWY HLA-C*02:19,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:20,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:22,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYEWY HLA-C*02:23,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:24,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:26,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:27,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-C*02:28,YYAGYREKYRQTDVNKLYLRYDSYTWAVWAYEWY HLA-C*02:29,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:30,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:31,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:32,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYEWY HLA-C*02:33,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:34,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:35,YYAGYREKYRQTDVNKLHLRYDSYTWAEWAYEWY HLA-C*02:36,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:37,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:39,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:40,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*03:01,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:02,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:03,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:04,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:05,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:06,YYAGYREKYRQTDVSNLYIRYVYYTWAELAYLWY HLA-C*03:07,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:08,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:09,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:10,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:11,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:12,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:13,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:14,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C*03:15,YYAGYREKYRQADVNKLYLRYDSYTWAELAYLWY HLA-C*03:16,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C*03:17,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C*03:18,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:19,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:21,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:23,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:24,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:25,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:26,YYAGYREKYRQTDVSNLYIRYDFYTWAELAYLWY HLA-C*03:27,YYAGYREKYRQADVSNLYLSYDYYTWAELAYLWY HLA-C*03:28,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:29,YYAGYRENYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:30,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:31,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:32,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:33,YYAGYREKYRQTDVSNLCLRYDSYTWAELAYLWY HLA-C*03:34,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWY HLA-C*03:35,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:36,YYAGYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-C*03:37,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:38,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:39,YDSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:40,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:41,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:42,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:43,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:44,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:45,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:46,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:47,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:48,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:49,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:50,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:51,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWH HLA-C*03:52,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:53,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:54,YYAGYREKYRQTDVSNLYIRYDYYTWAELPYLWY HLA-C*03:55,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:56,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:57,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:58,YYAGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*03:59,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:60,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:61,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:62,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:63,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:64,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:65,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:66,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:67,YDAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:68,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:69,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:70,YYAGYREKYRQTDESNLYIRYDYYTWAELAYLWY HLA-C*03:71,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYLWY HLA-C*03:72,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:73,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:74,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:75,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:76,HYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:77,YYAGYREKYRQTDVSNLYIRYDYYTWAVLAYLWY HLA-C*03:78,YYAGYREKYRQTDVSNLYIRYDYYTWAEMAYLWY HLA-C*03:79,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:80,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:81,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:82,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:83,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:84,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:85,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:86,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*03:87,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:88,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:89,YYAGYREKYRQTDVSNLYLRFDSYTWAELAYLWY HLA-C*03:90,YYAGYREKYRQTDVSNLYIRSDYYTWAELAYLWY HLA-C*03:91,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:92,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:93,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:94,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*04:01,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:03,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:04,YSAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:05,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:06,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:07,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:08,YSAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C*04:10,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C*04:11,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:12,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:13,YSAGYREKYRQADVNKLYLRFNFYTWAALAYTWY HLA-C*04:14,YSAGYREKYRQADVNKLYLRFNFYTWAEQAYTWY HLA-C*04:15,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:16,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:17,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:18,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:19,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:20,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:23,YSAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C*04:24,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:25,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:26,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:27,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:28,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:29,YSAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C*04:30,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:31,YSAGYREKYRQADVNKLYLRFNFYTWVERAYTWY HLA-C*04:32,YSAGYREKYRQADVNKLYLRFNFYTWAERAYEWY HLA-C*04:33,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:34,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYLWY HLA-C*04:35,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:36,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:37,YSAGYREKYRQADVNKLYLWCNFYTWAERAYTWY HLA-C*04:38,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:39,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:40,YSAGYREKYRQADVNKLYFRFNFYTWAERAYTWY HLA-C*04:41,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:42,YDAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:43,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:44,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:45,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:46,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:47,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:48,YSAGYREKYRQADVNKLYLRFNFYTWAERPYTWY HLA-C*04:49,YSAGYWEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:50,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:51,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:52,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:53,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:54,YSAGYREKYRQADVNKLYLRFDSYTWAERAYTWY HLA-C*04:55,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:56,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:57,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:58,YSAGYREKYRQADVNKLYLRFNFYTLAALAYTWY HLA-C*04:60,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:61,YSAGYREKYRQADVNKLYLRFNFYTWAARAYTWY HLA-C*04:62,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:63,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:64,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:65,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:66,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:67,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:68,YSAGYREKYRQADVNKLYLRFNFYTWAAQAYTWY HLA-C*04:69,YSAGYGEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:70,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*05:01,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:03,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:04,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C*05:05,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:06,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:08,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C*05:09,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:10,YYAGYREKYRQTDVNKLYIRYNFYTWAERAYTWY HLA-C*05:11,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYTWY HLA-C*05:12,YYAGYREKYRQTDVNKLYLRYNFYTWAVRAYTWY HLA-C*05:13,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:14,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:15,YYAGYWEKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:16,YYAGYREKYRQTDVNKLYLWYNFYTWAERAYTWY HLA-C*05:17,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C*05:18,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:19,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:20,YYAGYREKYRQTDVNNLYLRYNFYTWAERAYTWY HLA-C*05:21,YYAGYREKYRQTDVNKLHLRYNFYTWAERAYTWY HLA-C*05:22,YYAGYREKYRQTDVNKLYLRYDFYTWAERAYTWY HLA-C*05:23,YYAGYREKYRQTDVNKLYLRYNFYTLAERAYTWY HLA-C*05:24,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:25,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:26,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:27,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYLWY HLA-C*05:28,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:29,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:30,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:31,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:32,YYAGYREKYRQTDVNRLYLRYNFYTWAERAYTWY HLA-C*05:33,YYAGCREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:34,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:35,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:36,YYAGYRENYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:37,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:38,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:39,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYLWY HLA-C*05:40,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:41,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:42,YYAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*05:43,YDAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:44,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:45,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*06:02,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:03,YYSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:04,YDSGYREKYRQADVNKLYLWYDSYTWAELAYTWY HLA-C*06:05,YDSGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*06:06,YDSGYREKYRQADVNKLYLWYDSYTWAERAYTWY HLA-C*06:07,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:08,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYEWY HLA-C*06:09,YDSGYREKYRQADVNKLYLWYNFYTWAEWAYTWY HLA-C*06:10,YDPGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:11,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*06:12,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:13,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:14,YDSGYREKYRQADVNKLYIWYDSYTWAEWAYTWY HLA-C*06:15,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:17,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:18,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:19,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:20,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:21,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:22,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:23,YDSGYREKYRQADVNKLYLWCDSYTWAEWAYTWY HLA-C*06:24,YDSGYREKYRQADVNKLYLWYDSYTWAEWAHTWY HLA-C*06:25,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:26,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:27,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:28,YDAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:29,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:30,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:31,YDSGYREKYRQADVNKLYLWYDSYTWAAWAYTWY HLA-C*06:32,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:33,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:34,YDSGYREKYRQADVNKLYLWYDFYTWAEWAYTWY HLA-C*06:35,YDSGYREKYRQADVNKLYIRSDSYTWAEWAYTWY HLA-C*06:36,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:37,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:38,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:39,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:40,YDSGYREKYRQADVNKLYLWYDSYTWAEWTYTWY HLA-C*06:41,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:42,YDSGYREKYRQADVNKLYLWYDSYTRAEWAYTWY HLA-C*06:43,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:44,YDSGYRENYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*06:45,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*07:01,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:02,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:03,YDSGYREKYRQADVSNLYLRSDSYTWAALAYLWY HLA-C*07:04,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:05,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C*07:06,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:07,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:08,YDSGYREKYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:09,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:10,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C*07:11,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:12,YDSGYREKYRQADVSNLYFRYDFYTWAADAYTWY HLA-C*07:13,YDSGYREKYRQADVSNLYLRSDFYTLAALAYTWY HLA-C*07:14,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:15,YDSGYREKYRQADVSNLYLRSDSYTLAALAYEWY HLA-C*07:16,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:17,YDSGYREKYRQADVSNLYLRSDSYTWAALAYTWY HLA-C*07:18,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:19,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:20,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:21,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:22,YDSGYRENYRQADVSNLYLRYDSYTLAAWAYTWY HLA-C*07:23,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:24,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:25,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:26,YYSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:27,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:28,YDSGYRENYRQADVSNLYLRYNFYTLAALAYTWY HLA-C*07:29,YDSGYREKYRQADVSNLYLRSDYYTLAALAYTWY HLA-C*07:30,YDSGYRENYRQADVSNLYLRYDSYTLAGLAYTWY HLA-C*07:31,YDSGYREKYRQADVSNLYLWYDSYTLAALAYTWY HLA-C*07:35,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:36,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:37,YDSGYREKYRQADVSNLYLRSDSYTLAARAYTWY HLA-C*07:38,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:39,YDSGYREKYRQTDVSNLYLRSDSYTLAALAYTWY HLA-C*07:40,YDSGYRENYRQTDVSNLYLRYDSYTLAALAYTWY HLA-C*07:41,YDSGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*07:42,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:43,YDSGYREKYRQADVSNLYIRYDSYTLAALAYTWY HLA-C*07:44,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:45,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:46,YDSEYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:47,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:48,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:49,YDSGYREKYRQADVNNLYLRSDSYTLAALAYTWY HLA-C*07:50,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:51,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:52,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:53,YDSGYRENYRQADVSNLYLRYDSYTLAAQAYTWY HLA-C*07:54,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:56,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:57,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:58,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:59,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:60,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:62,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:63,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:64,YSAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:65,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:66,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:67,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:68,YDSGYREKYRQADVSNLYLRSDSYTLAADAYTWY HLA-C*07:69,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:70,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:71,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:72,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:73,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:74,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:75,YDSGYREKYRQADVSNLHLRSDSYTLAALAYTWY HLA-C*07:76,YDSGYREKYRQADVNKLYLRSDSYTLAALAYTWY HLA-C*07:77,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:78,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:79,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:80,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:81,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:82,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:83,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:84,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:85,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:86,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:87,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:88,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:89,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:90,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:91,YDSGYRENYRQADVSNLYLRYDSYTLTALAYTWY HLA-C*07:92,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:93,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:94,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:95,YDSGYRENYRQADVSNLYLRYDSYTLAVLAYTWY HLA-C*07:96,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:97,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:99,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:100,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:101,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:102,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:103,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:105,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:106,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:107,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:108,YDSGYRENYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:109,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:110,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:111,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:112,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:113,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:114,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:115,YDSGYRENYRQADVSDLYLRYDSYTLAALAYTWY HLA-C*07:116,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:117,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:118,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:119,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:120,YDSGYRENYRQADVSNLYLRYDSYTLAALAYPWY HLA-C*07:122,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:123,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:124,YDSGYRENYRQADESNLYLRYDSYTLAALAYTWY HLA-C*07:125,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:126,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:127,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:128,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:129,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:130,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:131,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:132,DDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:133,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:134,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:135,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:136,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:137,YDSGYREKYRQADVSNLYLRSDSYTLAALTYTWY HLA-C*07:138,YDSGYREKYRQADVSNLYLRSDSYTLAAWAYTWY HLA-C*07:139,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:140,YDSGYRENYRQADVSNLYLRYDSYTWAVDAYTWY HLA-C*07:141,YDSGYRENYRQADVSNLYLRYDSYTWAALAYTWY HLA-C*07:142,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:143,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:144,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:145,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:146,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:147,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:148,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:149,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*08:01,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:02,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:03,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:04,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:05,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:06,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYAWY HLA-C*08:07,YYAGYREKYRQTDVSNLYLRYNFYTLAERAYTWY HLA-C*08:08,YYAGYREKYRQTDVSNLYLSYNFYTWATLAYTWY HLA-C*08:09,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:10,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C*08:11,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:12,YYAGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*08:13,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:14,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:15,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:16,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:17,YYAGYREKYCQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:18,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:19,YYAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*08:20,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:21,YYAGYREKYRQADVSNLYLRYNFYTWATLAYTWY HLA-C*08:22,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:23,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:24,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:25,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:27,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:28,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:29,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:30,YYAGYREKYRQTDVSNLYLRYNFYTWPERAYTWY HLA-C*08:31,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYEWY HLA-C*08:32,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:33,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:34,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:35,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*12:02,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:03,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:04,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*12:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:06,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:07,YYAGYREKYRQADVGNLYLWYDSYTWAEWAYTWY HLA-C*12:08,YYAGYRENYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:09,YYAGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*12:10,YYAGYREKYRQADVSNLYLRFDSYTWAEWAYTWY HLA-C*12:11,YYAGYREKYRQADVSNLYLWSDSYTWAEWAYTWY HLA-C*12:12,YYAGYREKYRQADESNLYLWYDSYTWAEWAYTWY HLA-C*12:13,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:14,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*12:15,YYAGYREKYRQADVSNLYLWYDLYTWAEWAYTWY HLA-C*12:16,YDSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:17,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:18,YYAGYREKYRQADVSNLYLRYDSYTWAELAYTWY HLA-C*12:19,YYAGYREKYRQADVSNLYLWYDSYTWAECAYTWY HLA-C*12:20,YYAGYREKYRQADVSNLYLWYDSYTWAELAYTWY HLA-C*12:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYTWY HLA-C*12:22,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:23,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:24,YYAGYREKYRQADVSNLYLWYDSYTWAERAYTWY HLA-C*12:25,YYAGYPEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:26,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:27,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:28,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:29,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:30,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:31,YYAGYREKYRQADVSNLYLWYNFYTWAEWAYTWY HLA-C*12:32,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:33,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:34,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:35,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:36,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:37,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:38,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:40,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:41,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C*12:43,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:44,YYAGYREKYRQADVSNLYIRYDSYTWAEWAYTWY HLA-C*14:02,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:03,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:04,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C*14:05,YSAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C*14:06,YSAGYREKYRQTDVSNLYLWFDSYTWAELAYTWY HLA-C*14:08,YSAGYREKYRQTDVSNLYPWFDSYTWAERAYTWY HLA-C*14:09,YSAGYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-C*14:10,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:11,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:12,YSAGYREKYRQTDVNKLYLWFDSYTWAERAYTWY HLA-C*14:13,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:14,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:15,YSAGYREKYRQTDVSNLYLWFDSYTWAALAYTWY HLA-C*14:16,YSAGYREKYRQTDVSNLYLWFDSYTWAEWAYTWY HLA-C*14:17,YSAGYREKYRQTDVSNLYLWFDSYTLAARAYTWY HLA-C*14:18,YSSGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:19,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:20,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYLWY HLA-C*15:02,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:03,YYAGYRENYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:04,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:05,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:06,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C*15:07,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C*15:08,YYAGYRENYRQTDVNKLYIRYDLYTWAERAYTWY HLA-C*15:09,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:10,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:11,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:12,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:13,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:15,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYLWY HLA-C*15:16,YYAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:17,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:18,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:19,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:20,YYAGYREKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:21,YYAGYRENYRQTDVSKLYIRYDLYTWAELAYTWY HLA-C*15:22,YYAGYRENYRQTDVNKLYLRYDFYTWAELAYTWY HLA-C*15:23,YDAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:24,YYAGYRENYRQTDVNKLYIRYNYYTWAELAYTWY HLA-C*15:25,YYAGYREKYRQADVSNLYIRYNFYTWAEDAYTSY HLA-C*15:26,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:27,YYAGYRNKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:28,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:29,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:30,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:31,YYAGYRENYRQTDVNKLYIRYDLYTWAALAYTWY HLA-C*15:33,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:34,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:35,YYAGYRENYRQTDVNKLHIRYDLYTWAELAYTWY HLA-C*16:01,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:02,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:04,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C*16:06,YYAGYREKYRQTDVSNLYLRSDSYTWAAQAYTWY HLA-C*16:07,YYAGYREKYRQTDVSNLYLRYDSYTWAAQAYTWY HLA-C*16:08,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:09,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:10,YYAGYREKYRQTDVSNLYLWYDDYTWAAQAYTWY HLA-C*16:11,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:12,YYAGYGEKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:13,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:14,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:15,YYAGYREKYRQADVSNLYLWYDSYTWAAQAYTWY HLA-C*16:17,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:18,YYAGYREKYRQTDVSNLYLWCDSYTWAAQAYTWY HLA-C*16:19,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:20,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:21,YDAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:22,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:23,YYAGYREKYRQTDVSNLYLWFDSYTWAAQAYTWY HLA-C*16:24,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:25,YYAGYREKYRQADVNKLYLWYDSYTWAAQAYTWY HLA-C*16:26,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*17:01,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:02,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:03,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:04,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:05,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:06,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:07,YYAGYREKYRQADVNKLYIRYNFYSLAELAYLWY HLA-C*18:01,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:02,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:03,YDSGYREKYRQADVNKLYLRFNFYTWAEWAYEWY ================================================ FILE: downloads-generation/models_class1_unselected/generate_hyperparameters.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout from copy import deepcopy from yaml import dump base_hyperparameters = { ########################################## # ENSEMBLE SIZE ########################################## "n_models": 4, ########################################## # OPTIMIZATION ########################################## "max_epochs": 500, "patience": 20, "early_stopping": True, "validation_split": 0.1, "minibatch_size": None, "loss": "custom:mse_with_inequalities", ########################################## # RANDOM NEGATIVE PEPTIDES ########################################## "random_negative_rate": 0.0, "random_negative_constant": 25, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, ########################################## # PEPTIDE REPRESENTATION ########################################## # One of "one-hot", "embedding", or "BLOSUM62". "peptide_amino_acid_encoding": "BLOSUM62", "use_embedding": False, # maintained for backward compatability "embedding_output_dim": 8, # only used if using embedding "kmer_size": 15, ########################################## # NEURAL NETWORK ARCHITECTURE ########################################## "locally_connected_layers": [ { "filters": 8, "activation": "tanh", "kernel_size": 3 } ], "activation": "tanh", "output_activation": "sigmoid", "layer_sizes": [16], "dense_layer_l1_regularization": None, "batch_normalization": False, "dropout_probability": 0.0, ########################################## # TRAINING Data ########################################## "train_data": {"subset": "all", "pretrain_min_points": 1000}, } grid = [] for train_subset in ["all", "quantitative"]: for minibatch_size in [128]: for dense_layer_size in [8, 16, 32, 64]: for l1 in [0.0, 0.001]: for num_lc in [0, 1, 2]: for lc_kernel_size in [3, 5]: new = deepcopy(base_hyperparameters) new["minibatch_size"] = minibatch_size new["train_data"]["subset"] = train_subset new["layer_sizes"] = [dense_layer_size] new["dense_layer_l1_regularization"] = l1 (lc_layer,) = new["locally_connected_layers"] lc_layer['kernel_size'] = lc_kernel_size if num_lc == 0: new["locally_connected_layers"] = [] elif num_lc == 1: new["locally_connected_layers"] = [lc_layer] elif num_lc == 2: new["locally_connected_layers"] = [lc_layer, deepcopy(lc_layer)] if not grid or new not in grid: grid.append(new) dump(grid, stdout) ================================================ FILE: downloads-generation/models_class1_unselected_with_mass_spec/GENERATE.sh ================================================ #!/bin/bash # # Train standard MHCflurry Class I models. # Calls mhcflurry-class1-train-allele-specific-models on curated training data # using the hyperparameters in "hyperparameters.yaml". # set -e set -x DOWNLOAD_NAME=models_class1_unselected_with_mass_spec SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME mkdir models cp $SCRIPT_DIR/class1_pseudosequences.csv . python $SCRIPT_DIR/generate_hyperparameters.py > hyperparameters.yaml GPUS=$(nvidia-smi -L 2> /dev/null | wc -l) || GPUS=0 echo "Detected GPUS: $GPUS" PROCESSORS=$(getconf _NPROCESSORS_ONLN) echo "Detected processors: $PROCESSORS" time mhcflurry-class1-train-allele-specific-models \ --data "$(mhcflurry-downloads path data_curated)/curated_training_data.with_mass_spec.csv.bz2" \ --allele-sequences class1_pseudosequences.csv \ --hyperparameters hyperparameters.yaml \ --out-models-dir models \ --held-out-fraction-reciprocal 10 \ --min-measurements-per-allele 25 \ --num-jobs $(expr $PROCESSORS \* 2) --gpus $GPUS --max-workers-per-gpu 2 --max-tasks-per-worker 50 cp $SCRIPT_ABSOLUTE_PATH . bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/models_class1_unselected_with_mass_spec/README.md ================================================ # Class I allele-specific models (ensemble) This download contains trained MHC Class I MHCflurry models. To generate this download run: ``` ./GENERATE.sh ``` ================================================ FILE: downloads-generation/models_class1_unselected_with_mass_spec/class1_pseudosequences.csv ================================================ allele,pseudosequence HLA-A*01:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:02,YSAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:03,YFAMYQENMAHTDANTLYIMYRDYTWVARVYRGY HLA-A*01:06,YFAMYQENMAHTDANTLYIIYRDYTWVALAYRGY HLA-A*01:07,YFAMYQENVAHTDENTLYIIYRDYTWVARVYRGY HLA-A*01:08,YFAMYQENMAHTDANTLYIIYRDYTWVARVYWGY HLA-A*01:09,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:10,YFAMYQENMAHTDANTLYIIYRDYTWARRVYRGY HLA-A*01:12,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:13,YFAMYQENMAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:14,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTGY HLA-A*01:17,YFAMYQENMAQTDANTLYIIYRDYTWVARVYRGY HLA-A*01:19,YFAMYQENMAHTDANTLYIIYRDYTWAVQAYTGY HLA-A*01:20,YSAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*01:21,YFAMYQENMAHTDANTLYIIYRDYTWAVRVYRGY HLA-A*01:23,YFAMYQENVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:24,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:25,YFAMYQENMAHTDANTLYIIYRDYTWVAQVYRGY HLA-A*01:26,YFAMYQENMAHTDANTLYIIYRDYTWAARVYRGY HLA-A*01:28,YFAMYQENMAHTDVDTLYIIYRDYTWVARVYRGY HLA-A*01:29,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:30,YFAMYQENMAHTDANTLYIIYHYYTWVARVYRGY HLA-A*01:32,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:33,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:35,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:36,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:37,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:38,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:39,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:40,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:41,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:42,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:43,YYAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:44,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:45,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:46,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:47,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:48,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:49,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:50,YFAMYQENMAHTDANTLYIIYREYTWVARVYRGY HLA-A*01:51,YFAMYRNNVAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:54,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:55,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:58,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:59,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:60,YFAMYPENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:61,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:62,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:63,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:64,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRGY HLA-A*01:65,YFAMYQENMAHTDANTLYIIYRDYTWVARVCRGY HLA-A*01:66,YFAMYQENMAHTDANTLYVRYRDYTWVARVYRGY HLA-A*02:01,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:02,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:03,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:04,YFAMYGEKVAHTHVDTLYVMYHYYTWAVLAYTWY HLA-A*02:05,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:06,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:07,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:08,YYAMYGENVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:09,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:10,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:11,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:12,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:13,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYTWY HLA-A*02:14,YYAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:16,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:17,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:18,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:19,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:20,YFAMYGENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:21,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:22,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:24,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:25,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:26,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:27,YFAMYGEKVAHTHVDTLYVRYHYYTWAAQAYTWY HLA-A*02:28,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:29,YFAMYGEQVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:30,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:31,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:33,YFAMYGEKVAHTHVDTLYVRSHYYTWAVLAYTWY HLA-A*02:34,YFAMYGEKVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:35,YFAMYGEKVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:36,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTGY HLA-A*02:37,YFAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:38,YFAMYGEKVAHTHVDTLYVRYHYYTWAEQAYRWY HLA-A*02:39,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:40,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:41,YYAMYGEKVAHTHVDTLYVRYQYYTWAVLAYTWY HLA-A*02:42,YFSMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:44,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:45,YFAMYQEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:46,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:47,YFAMYGEKVAHSHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:48,YFAMYEEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:49,YFAMYGEKVAHTHVDTLYVRYHYYTWAVRAYTWY HLA-A*02:50,YFAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:51,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:52,YFAMYGEKVAHTHVDTLYVRYEHYTWAVLAYTWY HLA-A*02:54,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTGY HLA-A*02:55,YFAMYRNNVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:56,YFAMYQENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:57,YYAMYGEKVAHTHVDTLYLMYHYYTWAVLAYTWY HLA-A*02:58,YFAMYGEKVAHTHVDTLYLRYHYYTWAVLAYTWY HLA-A*02:59,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:60,YFAMYGEKVAHTHVDTLYVRYHFYTWAVLAYTWY HLA-A*02:61,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:62,YFAMYGENVAQTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:63,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:64,YFAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:65,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:66,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:67,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:68,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:69,YFAMYGEKVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:70,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:71,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:72,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:73,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:74,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:75,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:76,YSAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:77,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:78,YYAMYQENVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:79,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:80,YFAMYGEKVAHTHVDTLYVRYQDYTWAVLAYTWY HLA-A*02:81,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:84,YYAMYGEKVAHTHVDTLYFRYHYYTWAVLAYTWY HLA-A*02:85,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:86,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:87,YFAMYGEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:89,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:90,YFAMYGEKVAHTDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:91,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:92,YFAMYEEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:93,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:95,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:96,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:97,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:99,YYAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:101,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYRWY HLA-A*02:102,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:103,YFAMYQENVAQTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:104,YFAMYGEKVAHTHVDTLYVRYHYYTWAVWAYTWY HLA-A*02:105,YFAMYGEKVAHTHVDTLYVRYEYYTWAVLAYTWY HLA-A*02:106,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:107,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:108,YYAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:109,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:110,YFAMYGEKVAHTHVDTLYLMFHYYTWAVLAYTWY HLA-A*02:111,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:112,YFAMYGEKVAHTDENIAYVRCHYYTWAVLAYTWY HLA-A*02:114,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:115,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:116,YFAMYGEKVAHTHLDTLYVRYHYYTWAVLAYTWY HLA-A*02:117,YFAMYGEKVAHTHVDTLYVRYQDYTWAEWAYTWY HLA-A*02:118,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:119,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:120,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:121,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:122,YYAMYGEKVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*02:123,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:124,YFAMYGEKVAHTDESIAYVRYHYYTWAVLAYTWY HLA-A*02:126,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:127,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:128,YFAMYGENVAHIDVDTLYVRYHYYTWAVLAYTWY HLA-A*02:129,YYAMYEEKVAHTDENIAYVRYHYYTWAVLAYTWY HLA-A*02:130,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:131,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYEWY HLA-A*02:132,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:133,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:134,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:135,YFAMYGEKVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*02:136,YFAMYGEKVAHTDENIAYVRYHYYTWAVWAYTWY HLA-A*02:137,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:138,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:139,YFAMYGEKVTHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:140,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:141,YFVMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:142,YYAMYGEKVAHTHVDTLYVRYHYYTWAVQAYTWY HLA-A*02:143,YYAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:144,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:145,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:146,YFAMYGEKVAHTDANTLYVRYHYYTWAVLAYTWY HLA-A*02:147,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:148,YFAMYGEKVAHTHVDTLYVRFHYYTWAEWAYTWY HLA-A*02:149,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:150,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:151,YFAMYGEKVAHTHVDTLYVRYDYYTWAVLAYTWY HLA-A*02:152,YFAMYGEKVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*02:153,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:154,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYRWY HLA-A*02:155,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:156,YFAMYGEKVAHTHVDTLYIIYHYYTWAVLAYTWY HLA-A*02:157,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:158,YFAMYGEKVAHAHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:159,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:160,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:161,YFAVYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:162,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:163,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:164,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:165,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:166,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:167,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYKWY HLA-A*02:168,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:169,YYAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:170,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:171,YFAMYGEKVAHTHVDTLYVRYHYYTWAELAYTWY HLA-A*02:172,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:173,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:174,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:175,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:176,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:177,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:178,YYAMYGEKVAHTHVDTLYVRYHSYTWAVLAYTWY HLA-A*02:179,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:180,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:181,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:182,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:183,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:184,YFAMYGEKVAHTHEDTLYVRYHYYTWAVLAYTWY HLA-A*02:185,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:186,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:187,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:188,YFAMYGEKVAHTHVDTLYVRYDSYTWAVLAYTWY HLA-A*02:189,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:190,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:191,YFAMYGEKVAHTHVDTLYVRCHYYTWAVWAYTWY HLA-A*02:192,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:193,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:194,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:195,YFAMYQENVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:196,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:197,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:198,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:199,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:200,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:201,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:202,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:203,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:204,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:205,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:206,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:207,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:208,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:209,YFAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:210,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:211,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:212,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:213,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:214,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:215,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:216,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:217,YFAMYREKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:218,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:219,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:220,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:221,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:224,YFAMYGEKVAHTHVDTLYVGYHYYTWAVLAYTWY HLA-A*02:228,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:229,YYAMYGEKVAHTHVDTLYLRYRYYTWAVWAYTWY HLA-A*02:230,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:231,YFAMYGEKVAHTHVDTLYVRNHYYTWAVLAYTWY HLA-A*02:232,YYAMYGEKVAHTHVDTLYLRYHYYTWAVWAYTWY HLA-A*02:233,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTRY HLA-A*02:234,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:235,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:236,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:237,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:238,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:239,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:240,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:241,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:242,YFAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:243,YTAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:244,YYAMYGEKVAHTHVDTLYVRFHYYTWAVLAYTWY HLA-A*02:245,YFAMYGEKVAHTHVDTLYIRYHYYTWAVLAYTWY HLA-A*02:246,YFAMYGEKVAHTHVDTLYVRYRDYTWAVLAYTWY HLA-A*02:247,YFAMYGEKVAHTDENTLYVRYHYYTWAVLAYTWY HLA-A*02:248,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:249,YFAMYVEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:251,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:252,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:253,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:254,YFAMYGEKVAHTHVDTLYVRYNFYTWAVLAYTWY HLA-A*02:255,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTGY HLA-A*02:256,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:257,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:258,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:259,YYAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:260,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*02:261,YFAMYGEKVAHTHMDTLYVRCHYYTWAVLAYTWY HLA-A*02:262,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLVYTWY HLA-A*02:263,YFAMYGEKVAHTHVDTLYVRYHYYTWSVLAYTWY HLA-A*02:264,YFAMYGEKVAHTHVDTLYVRYHYYTWAEWAYTWY HLA-A*02:265,YFAMYGEKVAHTHVDTLYVRCHYYTWAVLAYTWY HLA-A*02:266,YFAMYGEKVAHTHVDTLYVRYHYYTWAVLAYTWY HLA-A*03:01,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:02,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:04,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:05,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:06,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:07,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:08,YFAMYQENVAHTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:09,YFAMYQENVAQTHVDTLYIIYRDYTWAELAYTWY HLA-A*03:10,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:12,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:13,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:14,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:15,YFAMYQENVAQTDVDTLYIIFRDYTWAELAYTWY HLA-A*03:16,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:17,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:18,YFAMYQENVAQTDVDTLYIIYRDYTWVARVYRGY HLA-A*03:19,YFAMYQENVAQTDVDTLYIIFHYYTWAELAYTWY HLA-A*03:20,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:22,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:23,YFAMYGEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:24,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:25,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:26,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:27,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:28,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:29,YFAMYQENVVQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:30,YFAMYEEKVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:31,YFAMYQENVAQTDVDTLYIIYRYYTWAVQAYTWY HLA-A*03:32,YFAMYQENVAHIDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:33,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:34,YFAMYQENVAPTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:35,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:37,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:38,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:39,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:40,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:41,YFAMYQENVAHTDANTLYIIYRDYTWAELAYTWY HLA-A*03:42,YFAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*03:43,YFAMYQENVAQTDVDTLYIIYEHYTWAELAYTWY HLA-A*03:44,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:45,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:46,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:47,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:48,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:49,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:50,YFAMYQENVAQTDVDTLYIIYRDYTWAEWAYTWY HLA-A*03:51,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:52,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:53,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:54,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:55,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:56,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:57,YFAMYQENVAQTDANTLYIIYRDYTWAELAYTWY HLA-A*03:58,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:59,CFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:60,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:61,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:62,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:63,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:64,YFAMYQENVAQTDVDTLYIIYRDYTWADLAYTWY HLA-A*03:65,YFAMYQENVAQTDVDTLYIIYRDYTWAEQAYTWY HLA-A*03:66,YFAMYQENVAQTDVDTLYIIYRDYTWAERAYTWY HLA-A*03:67,YFATYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:70,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:71,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:72,YSAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:73,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:74,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:75,YFAMYQENVAQTDVDTLYLMYRDYTWAELAYTWY HLA-A*03:76,YFAMYQENVAQTDVDTLYIIYRDYTWAVQAYTWY HLA-A*03:77,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:78,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:79,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:80,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:81,YFAMYQENVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*03:82,YFAMYQENVAQTDVDTLYIIYEHYTWAVQAYTWY HLA-A*11:01,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:02,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:03,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:04,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTWY HLA-A*11:05,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:06,YYAMYQENVAQTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:07,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:08,YYAMYQENVAQTDVDTLYIIYRDYTWAERAYRWY HLA-A*11:09,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:10,YYAMYRNNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:11,YYAMYLQNVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:12,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:13,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:14,YYAMYQENVAQTDVDTLYIIYRDYTWARQAYRWY HLA-A*11:15,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:16,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:17,YYAMYQENMAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:18,YYAMYQENVAHTHVDTLYIIYRDYTWAAQAYRWY HLA-A*11:19,YYAMYQENVAHTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:20,YYAMYQENVAQTDVDTLYIIYRDYTWAEQAYRWY HLA-A*11:22,YYAMYQENVAQTDVDTLYIIYPDYTWAAQAYRWY HLA-A*11:23,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:24,YYAMYQENVAQTDVDTLYIIYRDYTWAALAYRWY HLA-A*11:25,YYAMYQENVAQTDVDTLYIIYRDYTWAELAYRWY HLA-A*11:26,YYAMYQENVAQTDVDTLYIMYRDYTWAAQAYRWY HLA-A*11:27,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYTGY HLA-A*11:29,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:30,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:31,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYRWY HLA-A*11:32,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:33,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:34,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:35,YYAMYQENVAQTDVDTLYIIYRDYTWAVLAYTWY HLA-A*11:36,YYAMYQENVAQTDVDTLYIICRDYTWAAQAYRWY HLA-A*11:37,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:38,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:39,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRGY HLA-A*11:40,YYAMYQENVAHTDANTLYIIYRDYTWAAQAYRWY HLA-A*11:41,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:42,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:43,YTAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:44,YYAMYQENVAQTDVDTLYIIYRDYTWAARAYRWY HLA-A*11:45,YYAMYQENVAQTDADTLYIIYRDYTWAAQAYRWY HLA-A*11:46,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:47,YHAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:48,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:49,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:51,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:53,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:54,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:55,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:56,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:57,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:58,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:59,YYAMYQENVAQTDVDTLYIIYGDYTWAAQAYRWY HLA-A*11:60,YYAMYQENVAQTDVDTLYIIYRDYTWAVQAYRWY HLA-A*11:61,YYAMYQENAAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:62,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:63,YYAMYQENVAQTDVDTLYIIYRDYTWAAQAYRWY HLA-A*11:64,YYAMYQENVAQTDVDTLHIIYRDYTWAAQAYRWY HLA-A*23:01,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*23:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:04,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*23:05,CSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:09,YSAMYQENMAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYRGY HLA-A*23:12,YSAMYEEKVAHTHENIAYLMFHYYTWAVLAYTGY HLA-A*23:13,YSAMYEEKVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:14,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:15,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:16,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:17,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:18,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:24,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:25,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*23:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:02,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:03,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:04,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:05,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:06,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTGY HLA-A*24:07,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:08,YSAMYGEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:10,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRWY HLA-A*24:13,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:14,YSAMYEEKVAHTDENIAYVRYHYYTWAVQAYTGY HLA-A*24:15,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:17,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:18,YSAMYEEKVAHTDENIAYLMFHYYTWAELAYTWY HLA-A*24:19,YSAMYEEKVAQTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:20,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:21,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:22,YSAMYEEKVAHTDENIAYLMFHYYTWAVWVYTWY HLA-A*24:23,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:24,YSAMYRNNVAQTDENIAYLMFHYYTWAVLAYTGY HLA-A*24:25,CSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:26,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:27,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:28,YSAMYEEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:29,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:30,YSAMYEEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:31,YSAMYEQKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:32,YSAMYEEKVAHTDESIAYLMFHYYTWAVQAYTGY HLA-A*24:33,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:34,YSAMYEEKVAHIDENIAYLMFHYYTWAVQAYTGY HLA-A*24:35,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:37,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:38,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:39,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:41,YSAMYEEKVAHTDENIAYLMFRDYTWAVQAYTGY HLA-A*24:42,YSAMYGEKVAHTHENIAYLMFHYYTWAVQAYTGY HLA-A*24:43,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:44,YSAMYEEKVAHTDVDTLYLMFHYYTWAVQAYTGY HLA-A*24:46,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYRGY HLA-A*24:47,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:49,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:50,YYAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:51,YSAMYEEKVAHTDENIAYLIYHYYTWAVQAYTGY HLA-A*24:52,YSAMYEEKVAHTDENIAYLRFHYYTWAVQAYTGY HLA-A*24:53,YSAMYEEKVAHTDENIAYLMYHYYTWAVQAYTGY HLA-A*24:54,YSAMYEEKVAHTDENIAYLMFHYYTWAVQPYTGY HLA-A*24:55,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYEGY HLA-A*24:56,YSAMYEEKVAHTDENIAYLMFHYYTWAEQAYTGY HLA-A*24:57,YSAMYEEKVAHTDENIAYIMYHYYTWAVQAYTGY HLA-A*24:58,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:59,YSAMYEEKVAHTDENIAYLMFHYYTWAAQAYTGY HLA-A*24:61,YSAMYEEKVAHTDEKIAYLMFHYYTWAVQAYTGY HLA-A*24:62,YSAMYEEKVAHTDENIAYLMFQDYTWAVQAYTGY HLA-A*24:63,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:64,YSAMYEEKVAHTDENIAYLWIHYYTWAVQAYTGY HLA-A*24:66,YSAMYEEKVAHTDENIAYLMFEHYTWAVQAYTGY HLA-A*24:67,YSAMYRNNVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:68,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:69,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:70,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:71,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:72,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:73,YSAMYEEKVAHTDENIAYLMFDYYTWAVQAYTGY HLA-A*24:74,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:75,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:76,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:77,YSAMYQEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:78,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:79,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:80,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:81,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:82,YTAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:85,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:87,YSAMYEEKVAHTDENIAYLMFHYYTWAVRAYTGY HLA-A*24:88,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:89,YSAMYGEKVAHTHVDTLYLMFHYYTWAVQAYTGY HLA-A*24:91,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:92,YSAMYEEKVAHTDENIAYIIYHYYTWAVQAYTGY HLA-A*24:93,YSAMYEEKVAHTDENIAYVMFHYYTWAVQAYTGY HLA-A*24:94,YSAMYEEKVAHTDENIAYLMFHYYTWAVLAYTWY HLA-A*24:95,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:96,YSAMYEEKVAHTDENIAYLMFNFYTWAVQAYTGY HLA-A*24:97,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:98,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:99,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:100,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:101,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:102,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:103,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:104,YFAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:105,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:106,YSAMYEEKVAHTDENIAYLMFDDYTWAVQAYTGY HLA-A*24:107,YSAMYEEKVAHTDENIAYLMFHYYTWAVHAYTGY HLA-A*24:108,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:109,YSAMYEEKVAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:110,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:111,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:112,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:113,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:114,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:115,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:116,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:117,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:118,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:119,YSAMYEEKVAHADENIAYLMFHYYTWAVQAYTGY HLA-A*24:120,YSAMYEEKVAHTDENIAYIMFHYYTWAVQAYTGY HLA-A*24:121,YSAMYEEKVAHTDENIAYLMFHSYTWAVQAYTGY HLA-A*24:122,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:123,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:124,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:125,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTWY HLA-A*24:126,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:127,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:128,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:129,YSAMYQENMAHTDANTLYLMFHYYTWAVQAYTGY HLA-A*24:130,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:131,YSAMYEEKVAQTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:133,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:134,YSAMYEEKVAHTDENIAYLMFHYYPWAVQAYTGY HLA-A*24:135,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:136,YSAMYEEKVAHTDENIAYLMFHYYTWVVQAYTGY HLA-A*24:137,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:138,YSAMYEEKVAHTDENIAYLMFHYYTWAVWAYTWY HLA-A*24:139,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:140,YSTMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:141,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:142,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*24:143,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYLGY HLA-A*24:144,YSAMYEEKVAHTDENIAYLMFHYYTWAVQAYTGY HLA-A*25:01,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:02,YYAMYRNNVAQTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:03,YFAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:04,YYAMYRNNVAHTDESIAYIRYQDYTWAEQAYRWY HLA-A*25:05,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:06,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYTWY HLA-A*25:07,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:08,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:09,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:10,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*25:11,YYAMYRNNVAHTHESIAYIRYQDYTWAEWAYRWY HLA-A*25:13,YYAMYRNNVAHTDESIAYIRYQDYTWAEWAYRWY HLA-A*26:01,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:02,YYAMYRNNVAHTDANTLYIRYQNYTWAEWAYRWY HLA-A*26:03,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:04,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYLWY HLA-A*26:05,YYAMYRNNVAHTDENTLYIRYQDYTWAEWAYRWY HLA-A*26:06,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:07,YYAMYGEKVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:08,YYAMYRNNVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:09,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYTWY HLA-A*26:10,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:12,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:13,YYAMYRNNVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:14,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:15,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:16,YSAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:17,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:18,YYAMYRNNVAHTDANTLYIRYQDYTWAVWAYRWY HLA-A*26:19,YYAMYQENVAQTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:20,YFAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:21,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:22,YYAMYRNNVAHTDANTLYVRYQDYTWAEWAYRWY HLA-A*26:23,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:24,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:26,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:27,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:28,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:29,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:30,YYAMYRNNVAHTHVDTLYIRYQDYTWAEWAYRWY HLA-A*26:31,YYAMYPNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:32,YYAMYRNNVAHTDANTLYMVYQDYTWAEWAYRWY HLA-A*26:33,YYAMYRNNVAQIHANTLYIRYQDYTWAEWAYRWY HLA-A*26:34,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYWWY HLA-A*26:35,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:36,YYAMYRNNVAHTHANTLYIRYQDYTWAEWAYRWY HLA-A*26:37,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:38,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:39,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:40,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:41,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:42,YYAIYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:43,YYAMYRNNVAHTDANTLYIRYQDYTWAELAYRWY HLA-A*26:45,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:46,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:47,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*26:48,YYAMYRNKVAHTDANTLYIRYQDYTWAEQAYRWY HLA-A*26:49,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRGY HLA-A*26:50,YYAMYRNNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*29:01,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:02,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:03,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTGY HLA-A*29:04,YTAMYLQHVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:05,YTAMYLQNVAQTDANTLYIMYRDYTWAEQAYTWY HLA-A*29:06,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:07,YTAMYLQNVAQTDANTLYLMFRDYTWAVLAYTWY HLA-A*29:09,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:10,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:11,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:12,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:13,YTAMYLQNVAQTDESIAYIMYRDYTWAVLAYTWY HLA-A*29:14,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:15,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:16,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:17,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:18,YTAMYQENVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:19,YTAMYLQNVAHTHVDTLYIMYRDYTWAVLAYTWY HLA-A*29:20,YTAMYLQNVAHTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:21,YTAMYLQNVAQTDANTLYIMYRDYTWAVLAYTWY HLA-A*29:22,YTAMYLQNVAQTDANTLYVRYRDYTWAVLAYTWY HLA-A*30:01,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:02,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:03,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:04,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:06,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTWY HLA-A*30:07,YSAMYEEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:08,YYAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:09,YSAMYQENVAHTDENTLYIIYEHYTWAVLAYTWY HLA-A*30:10,YSAMYQENVAHTDENTLYIIHEHYTWARLAYTWY HLA-A*30:11,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:12,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:13,YSAMYQENVAHTHVDTLYIIYEHYTWARLAYTWY HLA-A*30:15,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:16,YSAMYQENVAQTHVDTLYIIYEHYTWAWLAYTWY HLA-A*30:17,YSAMYQENVAQTDVDTLYIIYEHYTWAVWAYTWY HLA-A*30:18,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:19,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:20,YSAMYQENVAQTEVDTLYIIYEHYTWAWLAYTWY HLA-A*30:22,YSAMYGEKVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:23,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:24,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:25,YSAMYQENVAQTDENTLYIIYEHYTWARLAYTWY HLA-A*30:26,YSAMYQENVAQTDVDTLYIIYRDYTWAWLAYTWY HLA-A*30:28,YSAMYQENVAHTDENTLYIVYEHYTWARLAYTWY HLA-A*30:29,YSAMYQENVAHTDENTLYIIYEHYTWAVWAYTSY HLA-A*30:30,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:31,YSAMYQENVARTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:32,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:33,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:34,YSAMYQENVAHTDENTLYIIYEHYTWARLAYTWY HLA-A*30:35,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:36,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:37,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:38,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:39,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:40,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*30:41,YSAMYQENVAQTDVDTLYIIYEHYTWAWLAYTWY HLA-A*31:01,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:02,YTAMYQEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:03,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:04,YTAMYQENVAHIDVDTLYIIYRDYTWAVLAYTWY HLA-A*31:05,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*31:06,YTAMYQENVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*31:07,YTAMYQEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:08,YTAMYEEKVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:09,YTAMYQENVGHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:10,YTAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*31:11,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:12,YTAMYQENVAHIDVDTLYIKYQDYTWAVLAYTWY HLA-A*31:13,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:15,YTAMYQENVARIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:16,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:17,YTAMYQENVAHINVDTLYIMYQDYTWAVLAYTWY HLA-A*31:18,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTRY HLA-A*31:19,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:20,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:21,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:22,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:23,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:24,YTAMYQENVAHIDVDTLYIMYQDYTWAAQAYRWY HLA-A*31:25,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYRWY HLA-A*31:26,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:27,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:28,YTAMYQENVTHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:29,YTAMYQENVAHIDVDTLYLMFQDYTWAVLAYTWY HLA-A*31:30,YTAMYQENVAHIDVDTLYIMYQDYTWAVWAYTWY HLA-A*31:31,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:32,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:33,YTAMYQENVAHIDGDTLYIMYQDYTWAVLAYTWY HLA-A*31:34,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:35,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:36,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*31:37,YTAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*32:01,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:02,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:03,YFAMYQENVAHTDENIAYIMYQDYTWAVLAYTWY HLA-A*32:04,YFAMYQENVAHTDESIAYIIYRDYTWAELAYTWY HLA-A*32:05,YFAMYQEKVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:06,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:07,YSAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:08,YFAMYQENVAHTHESIAYIMYQDYTWAVLAYTWY HLA-A*32:09,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTRY HLA-A*32:10,YFAMYQENVAHTDESIAYIMYQDYTWAEWAYTWY HLA-A*32:12,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:13,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTGY HLA-A*32:14,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:15,YFAMYRNNVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:16,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:17,YFAMYQENVAQTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:18,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:20,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:21,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:22,YFAMYQENVAHTDESIAYIMYQDYTWAVQAYTWY HLA-A*32:23,YFAMYQENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:24,YFAMYQENMAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*32:25,YFAMYHENVAHTDESIAYIMYQDYTWAVLAYTWY HLA-A*33:01,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:03,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:04,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:05,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:06,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:07,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:08,YTAMYGEKVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:09,YTAMYGENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:10,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTGY HLA-A*33:11,YTAMYRNNVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:12,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:13,YTAMYRNNVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*33:14,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:15,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:16,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:17,YTAMYRNNVAHIDADTLYIMYQDYTWAVLAYTWY HLA-A*33:18,YTAMYRNNVAHIDVDTLYIMYRDYTWAVLAYTWY HLA-A*33:19,YTAMYRNNVAHIDVDTLYLMFHYYTWAVQAYTGY HLA-A*33:20,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:21,YTAMYEENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:22,YTAMYRNNVAHIDVDTLYVRYQDYTWAVLAYTWY HLA-A*33:23,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:24,YTAMYRNNVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*33:25,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:26,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:27,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWH HLA-A*33:28,YTAMYRNNVAHIDVDTLYIMYQDYTWAELAYTWY HLA-A*33:29,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:30,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*33:31,YTAMYRNNVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*34:01,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:02,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:03,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:04,YYAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:05,YYAMYRNKVAQTDVDTLYIRYQDYTWAEWAYTWY HLA-A*34:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYTWY HLA-A*34:07,YYAMYRNNVSQTDVDTLYIIYRDYTWAELAYTWY HLA-A*34:08,YFAMYRNNVAQTDVDTLYIIYRDYTWAELAYTWY HLA-A*36:01,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*36:02,YFAMYQENMAHTDANTLYIIYRDYTWVARAYTWY HLA-A*36:03,YFAMYQENMAHTDANTLYLMYRDYTWVARVYTWY HLA-A*36:04,YFAMYQENMAHTDANTLYIIYRDYTWVARVYRWY HLA-A*36:05,YFAMYQENMAHTDANTLYIIYRDYTWVARVYTWY HLA-A*43:01,YYAMYLQNVAHTDANTLYIRYQDYTWAEWAYRWY HLA-A*66:01,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:02,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:03,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYEWY HLA-A*66:04,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWH HLA-A*66:05,YYAMYRNNVAHTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:06,YYAMYRNNVAQTDVDTLYIRYQDYTWAVLAYRWY HLA-A*66:07,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:08,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:09,YYAMYRNNVAQTDVDTLYVRYQDYTWAEWAYRWY HLA-A*66:10,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRGY HLA-A*66:11,YYAMYRNNVAQTDADTLYIRYQDYTWAEWAYRWY HLA-A*66:12,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:13,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:14,YYAMYRNNVAQTDVDTLYIRYQDYTWAEWAYRWY HLA-A*66:15,YYAMYRNNVAHIDVDTLYIRYQDYTWAEWAYRWY HLA-A*68:01,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:02,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:03,YYAMYRNNVAHTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:04,YYAMYRNNVAHIDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:05,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:06,YYAMYRNNVAQTDVDTLYIMYEHYTWAVWAYTWY HLA-A*68:07,YYAMYRNNVAQTDVDTLYIMYRHYTWAVWAYTWY HLA-A*68:08,YYAMYRNNVAQTDVDTLYIMYRDYTWAVLAYTWY HLA-A*68:09,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTWY HLA-A*68:10,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:12,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:13,YYAMYRENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:14,YYAMYEENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:15,YYAMYRNNVAHTHVDTLYIRYHYYTWAVWAYTWY HLA-A*68:16,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:17,YYAMYRNNVAQTDVDTLYIMYRVYTWAVWAYTWY HLA-A*68:19,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:20,YYAMYRNNVAHTHVDTLYIMYRDYTWAVWAYTWY HLA-A*68:21,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:22,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:23,YYAMYRNNVAQTDVDTLYIRYRDYTWAVWAYTWY HLA-A*68:24,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:25,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:26,YYAMYRNNVAQTDVDTLYIMYRDYTWAVQAYTGY HLA-A*68:27,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:28,YYAMYRNNVAQTDVDTLYIRYHYYTWAVRAYTWY HLA-A*68:29,YTAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:30,YYAMYGENVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:31,YYAMYRNNVAHTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:32,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:33,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:34,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYMWY HLA-A*68:35,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:36,YYAMYRNNVAQTDENIAYIMYRDYTWAVWAYTWY HLA-A*68:37,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:38,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:39,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:40,YYAMYRNNVGQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:41,YYAMYRNNVAQTDVDTLYIMYRDYTWVVWAYTWY HLA-A*68:42,YYAMYRNNVAQTDVDTLYIMYRDYTWAEWAYTWY HLA-A*68:43,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:44,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:45,YSAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:46,YYAMYRNNVAQTDVNTLYIMYRDYTWAVWAYTWY HLA-A*68:47,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:48,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:50,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:51,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:52,YYAMYRNNVAQTDVDTLYIMYRDYTWAVWAYTWY HLA-A*68:53,YYAMYRNNVAQTDVDTLYIRYHYYTWAVWAYTWY HLA-A*68:54,YYAMYRNNVAQTDVDTLYIRYHYYTWAEWAYTWY HLA-A*69:01,YYAMYRNNVAQTDVDTLYVRYHYYTWAVLAYTWY HLA-A*74:01,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:02,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:03,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:04,YFAMYGEKVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:05,YFAMYQENVAHADVDTLYIMYQDYTWAVLAYTWY HLA-A*74:06,YFAMYQENVAHTHVDTLYIMYQDYTWAVLAYTWY HLA-A*74:07,YFAMYQENVAHIDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:08,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:09,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:10,YFAMYQENVAHTDANTLYIMYQDYTWAVLAYTWY HLA-A*74:11,YFAMYQENVAHTDVDTLYIMYQDYTWAVLAYTWY HLA-A*74:13,YFAMYQENVAQTDVDTLYIMYQDYTWAVLAYTWY HLA-A*80:01,YFAMYEENVAHTNANTLYIIYRDYTWARLAYEGY HLA-A*80:02,YFAMYEENVAHTDVDTLYIIYRDYTWARLAYEGY HLA-B*07:02,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:03,YYSEYRNIYTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:04,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYEWY HLA-B*07:05,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:06,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:07,YYSEYRNIYAQTDESNLYLRYDYYTWAERAYEWY HLA-B*07:08,YYSEYRNIFTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:09,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:10,YYSEYRNICAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:11,YYSEYRNIYAQTDENNLYLSYDSYTWAERAYEWY HLA-B*07:12,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:13,YYSGYREKYRQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:14,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:15,YYSEYRNIYAQADVSNLYLSYDYYTWAERAYEWY HLA-B*07:16,YYSEYRNIYTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:17,YYSEYRNIYAQTDESNLYLSYDSYTWAERAYEWY HLA-B*07:18,YYSEYRNIYAQTDESNLYIRYDYYTWAERAYEWY HLA-B*07:19,YYSEYRNIYAQTDESNLYLSYDYYTWAEDAYTWY HLA-B*07:20,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLSY HLA-B*07:21,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:22,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:23,YYSEYRNIYAQTDESNLHLSYDYYTWAERAYEWY HLA-B*07:24,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:25,YYSEYRNIYAQTDESNLYLSYDYYTWAVDAYEWY HLA-B*07:26,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYEWY HLA-B*07:27,YYSEYRNISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*07:28,YYSEYRNIYAQTDESNLYLSYDDYTWAERAYEWY HLA-B*07:29,YDSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:30,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:31,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYTWY HLA-B*07:32,YYSEYRNIFTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:33,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:34,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYTWY HLA-B*07:35,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:36,YYSEYRNIYAQTDENIAYLSYDYYTWAERAYEWY HLA-B*07:37,YYSEYRNIYANTYESNLYLSYDYYTWAERAYEWY HLA-B*07:38,YYSEYRNIFTNTYENIAYLSYDYYTWAERAYEWY HLA-B*07:39,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:40,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:41,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:42,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:43,YYSEYRNIYAQTDESNLYLSYDYYTWAELAYTWY HLA-B*07:44,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:45,YYSEYRNIYAQTDESNLYLSYDYYTWAERTYEWY HLA-B*07:46,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:47,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:48,YYSEYRNIYAQTDESNLYLSYDYYTWAVLAYEWY HLA-B*07:50,YYSEYRNISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*07:51,YYSEYRNIYAQTDESNLYLSYDYYTWAARAYEWY HLA-B*07:52,YYSEYRNIYAQTDESNLYLSYDYYTWAERVYEWY HLA-B*07:53,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:54,YYSEYREIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:55,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYEWY HLA-B*07:56,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:57,YYSEYRNIYAQTDENNLYLSYDYYTWAERAYEWY HLA-B*07:58,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:59,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:60,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYLWY HLA-B*07:61,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:62,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:63,YYSDYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:64,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEGY HLA-B*07:65,YYATYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:66,YYSEYRNIYAQTDESNLYLSYDYYTWAEQAYEWY HLA-B*07:68,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:69,YYSEYRNICTNTDESNLYLSYNYYTWAERAYEWY HLA-B*07:70,YCSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:71,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:72,YYAEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:73,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:74,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:75,YYSEYRNIYAQTYENNLYLSYDYYTWAERAYEWY HLA-B*07:76,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:77,YYSEYRNIYAQTDESNLYLRSDYYTWAERAYEWY HLA-B*07:78,YYSEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*07:79,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:80,YYSEYRNIYAQTDESNLYLSYNYYTWAELAYEWY HLA-B*07:81,YYSEYRNIYAQTDESIAYLSYDYYTWAERAYEWY HLA-B*07:82,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:83,YYSEYRNIFAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:84,YYSEYRNIYAQTDESNLYWTYDYYTWAERAYEWY HLA-B*07:85,YYSEYRNICTNTDESNLYLSYDYYTWAERAYEWY HLA-B*07:86,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:87,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:88,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:89,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:90,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:91,YYSEYRNIYAQTYESNLYLSYDYYTWAERAYEWY HLA-B*07:92,YYSEYRNIYAQTDVSNLYLSYDYYTWAERAYEWY HLA-B*07:93,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:94,YYSEYWNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:95,YYSEYRNIYAQTDESNLYFSYDYYTWAERAYEWY HLA-B*07:96,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:97,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:98,YYSEYRNIYAQTDESNLYLSYDYYTCAERAYEWY HLA-B*07:99,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:100,YYSEYRNIYAQTDESNLYLSYDYYTWAEWAYLWY HLA-B*07:101,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:102,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:103,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:104,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:105,YYSEYRNIYAQTVESNLYLSYNYYTWAERAYEWY HLA-B*07:106,YYSEYRNIYAQTDESNLYLSYDYYTRAERAYEWY HLA-B*07:107,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:108,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:109,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:110,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:112,YYSEYRNIYAQTDESNLYLSYNYYTWAERAYEWY HLA-B*07:113,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:114,YYSEYRNIYAQTDESNLYLSYDYYTWAERAYEWY HLA-B*07:115,YYSEYRNIYAQTDESNLYLSYNFYTWAERAYEWY HLA-B*08:01,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:02,YDSEYRNIFTNTDENTAYLSYNYYTWAVDAYTWY HLA-B*08:03,YDSEYRNIFTNTYENIAYLSYNYYTWAVDAYTWY HLA-B*08:04,YDSEYRNISTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:05,YDSEYRNTFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:07,YDSEYRNIFTNTDESNLYLSYDYYTWAVDAYTWY HLA-B*08:09,YDSEYRNIFTNTDESNLYWTYNYYTWAVDAYTWY HLA-B*08:10,YDSEYRDIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:11,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYAWY HLA-B*08:12,YDSEYRNIFTNTDESNLYLRYNYYTWAVDAYTWY HLA-B*08:13,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYTWY HLA-B*08:14,YDSEYRNIFTNTDESNLYLSYHDYTWAVDAYTWY HLA-B*08:15,YDSEYRNIFTNTDVSNLYLSYNYYTWAVDAYTWY HLA-B*08:16,YDSEYRNIFTNADESNLYLRYNYYTWAVDAYTWY HLA-B*08:17,YDSEYREISTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:18,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:20,YDSEYRNIFTNTDESNLYLSYNYYTWAERAYTWY HLA-B*08:21,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYLWY HLA-B*08:22,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:23,YDSEYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:24,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:25,YDSEYRNIFTNTDESNLYLSYNYYTWAVLAYLWY HLA-B*08:26,YYAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:27,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:28,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:29,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:31,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:32,YDSTYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:33,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:34,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:35,YDSEYRNIFTNTDESNLYLSYNSYTWAVDAYTWY HLA-B*08:36,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:37,YDSEYRNIFTNTDESNLYLSYDSYTWAVDAYTWY HLA-B*08:38,YDSEYREIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:39,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:40,YDSEYRNIFTNTDESNLYLSYNYYTWAVRAYEWY HLA-B*08:41,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:42,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:43,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:44,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:45,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:46,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:47,YDSEYRNIFTNTDENNLYLSYNYYTWAVDAYTWY HLA-B*08:48,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:49,YDSEYRNIFTNTDESNLYIRSNFYTWAVDAYTWY HLA-B*08:50,YYSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:51,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:52,YDSEYRNIFTNTDESIAYLSYNYYTWAVDAYTWY HLA-B*08:53,YDSEYRNIFTNTDESNLYLSYNYYTWAEDAYTWY HLA-B*08:54,YDSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*08:55,YDSEYRNIFTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*08:56,YDAEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:57,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:58,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:59,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:60,YDSEYRNIFTNTDESNLYISYNYYTWAVDAYTWY HLA-B*08:61,YDSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*08:62,YHSEYRNIFTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*13:01,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:02,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:03,YYTMYREISTNTYENTAYWTYNLYTWAVLAYLWY HLA-B*13:04,YYTMYREISTNTYENTAYWTYDSYTWAVLAYLWY HLA-B*13:06,YYTMYREISTNTYENTAYIRYNLYTWAVLAYTWY HLA-B*13:09,YYTMYREISTNTYESNLYWTYNLYTWAVLAYEWY HLA-B*13:10,YYTMYREISTNTYENTAYLRYDSYTWAVLAYEWY HLA-B*13:11,YYTMYREISTNTYENTAYLRYNLYTWAVLAYEWY HLA-B*13:12,YYTMYREISTNTYENTAYIRYNLYTWAVLAYGWY HLA-B*13:13,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:14,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:15,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWH HLA-B*13:16,YYTMYREISTNTYENTAYWTYNLYTWAELAYEWY HLA-B*13:17,YYAMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:18,YYTMYREISTNTYENTAYWTYNLYTWAVRAYEWY HLA-B*13:19,YYTMYREVSTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:20,YYTMYREISTNTYENTAYIRYNLYTWAELAYEWY HLA-B*13:21,YYTMYREISTNTYENTAYIRYNYYTWAVLAYEWY HLA-B*13:22,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:23,YHTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:25,YYTMYREISTNTYESTAYIRYNLYTWAVLAYEWY HLA-B*13:26,YYTMYREISTNTYENTAYIRYDSYTWAVLAYEWY HLA-B*13:27,YYTMYREISTNTYENTAYWTFNLYTWAVLAYEWY HLA-B*13:28,YYTMYREISTNTYENTACIRYNLYTWAVLAYEWY HLA-B*13:29,YYTMYREISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:30,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:31,YYTMYREISTNTYENTAYWTYNLYTWAEWAYEWY HLA-B*13:32,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:33,YYAMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:34,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:35,YYTMYREISTNTYENTAYWTYDYYTWAVLAYEWY HLA-B*13:36,YYTMYRNISTNTYENTAYIRYNLYTWAVLAYEWY HLA-B*13:37,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:38,YYTMYREISTNTYENTAYWTYNLYTWAVLAYEWY HLA-B*13:39,YYTMYREISTNTYENNLYIRYNLYTWAVLAYEWY HLA-B*14:01,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:02,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:03,YYSEYRNICTNTDESNLYLWYNFYTWAERAYTWH HLA-B*14:04,HYSEYRNNCTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:05,YYSEYRNICTNTDESNLYLSYNFYTWAELAYTWH HLA-B*14:06,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:08,YYSEYRNICTNTDESNLYLRYNFYTWAELAYTWH HLA-B*14:09,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:10,YYSEYRNICTNTDESNLYIRYNFYTWAELAYTWH HLA-B*14:11,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:12,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:13,YYSEYRNICTNTDESNLYLSYNYYTWAELAYTWH HLA-B*14:14,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*14:15,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:16,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:17,YYSEYRNICTNTDESNLYLWYNFYTWAELAYTWH HLA-B*14:18,YYSEYRNICTNTYESNLYLWYNFYTWAELAYTWH HLA-B*15:01,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:02,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:03,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:04,YYAMYREISTNTYESNLYWTYDSYTWAEWAYLWY HLA-B*15:05,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:06,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:07,YYAMYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:08,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:09,YYSEYRNICTNTYESNLYLRYNYYTWAELAYLWY HLA-B*15:10,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWY HLA-B*15:11,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:12,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:13,YYAMYRNISTNTYENIAYIRYDSYTWAELAYLWY HLA-B*15:14,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLSY HLA-B*15:15,YYAMYRNISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:16,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:17,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:18,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:19,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLGY HLA-B*15:20,YYAMYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*15:21,YYAMYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:23,YYSEYRNICTNTYENIAYLRYDSYTWAELAYLWY HLA-B*15:24,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:25,YYAMYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:27,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:28,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:29,YYSEYRNIFTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:30,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:31,YYAMYRNISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:32,YYAMYREISTNTYESNLYLRSDSYTWAEWAYLWY HLA-B*15:33,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:34,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:35,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:36,YYAMYREISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:37,YYSEYRNICTNTYESNLYLRYDYYTWAELAYLWH HLA-B*15:38,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWH HLA-B*15:39,YYAMYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:40,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:42,YYAMYREISTNTYESNLYWTYNLYTWAELAYTWY HLA-B*15:43,YYAMYREISTNTYEDTLYLRYDSYTWAEWAYLWY HLA-B*15:44,YYAMYRNICTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:45,YYAMYREISTNTYESNLYLSYDYYTWAEWAYLWY HLA-B*15:46,YYAKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:47,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:48,YYAMYREISTNTYESNLYLRYNYYTWAVLTYLWY HLA-B*15:49,YYSEYREISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*15:50,YYAMYREISTNTYESNLYLRYDSYTWAEWAYTWY HLA-B*15:51,YYSEYRNICTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:52,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:53,YYTKYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:54,YYSEYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:55,YYAMYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*15:56,YYAMYREIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:57,YYAMYREISTNTYVNNLYLRYDSYTWAEWAYLWY HLA-B*15:58,YYAMYREISTNTYESNLYLRYNFYTWAEWAYLWY HLA-B*15:60,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:61,YYSEYREISTNTDESNLYLRYDSYTWAELAYLWY HLA-B*15:62,YYSEYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:63,YYAMYREISTNTYESNLYLRYDYYTWAEWAYLWY HLA-B*15:64,YYSEYRNISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:65,YYAMYREISTNTYESNLYLRYDSYTWAERAYLWY HLA-B*15:66,YYAMYREICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:67,YYAMYRENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:68,YYSEYREISTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*15:69,YYSEYREISTNTYESNLYLRYDSYTWAELTYTWY HLA-B*15:70,YYAMYREISTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:71,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:72,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:73,YYAMYREISTNTYESNLYLRYNLYTWAEWAYLWY HLA-B*15:74,YYSEYREISINTYESNLYLRYDSYTWAELAYLWY HLA-B*15:75,YYAMYREISTNTYESNLYLRYDSYTWAQWAYLWY HLA-B*15:76,YYAMYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:77,YYAMYREISTNTYESNLYIRYDDYTWAEWAYLWY HLA-B*15:78,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:80,YYSEYRNICTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:81,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:82,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:83,YYAMYREISTNTYESNLYWTYNYYTWAVDAYTWY HLA-B*15:84,YYAMYREISTNTYESNLYLRFDSYTWAVRAYLWY HLA-B*15:85,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:86,YYAMYREISTNTYESNLYLRYNLYTWAVLAYTWY HLA-B*15:87,YYAMYREISTNTYESIAYLRYDSYTWAEWAYLWY HLA-B*15:88,YYAMYRNISTNTYESNLYIRYDSYTWATLAYLWY HLA-B*15:89,YYAMYRNISTNTYENTAYIRYDSYTWAELAYLWY HLA-B*15:90,YYSEYRNICTNTYESNLYLRYDYYTWAELVYLWY HLA-B*15:91,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLSY HLA-B*15:92,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:93,YYSEYRNICTNTYESNLYLRYDSYTWAELAYTWY HLA-B*15:95,YYAMYQENMASTYENIAYWRYDSYTWAELAYLWY HLA-B*15:96,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:97,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:98,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:99,YYSEYRNICTNTYESNLYLRYDYYTWAERAYLWY HLA-B*15:101,YYAMYREIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:102,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:103,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:104,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:105,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:106,YYAKYREISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:107,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:108,YYSEYRNICTNTYESNLYLRYDSYTWAELTYLWY HLA-B*15:109,YYAMYREISTNTYESNLYLRFDSYTWAEWAYLWY HLA-B*15:110,YYAMYREISTNTYESNLYLRCDSYTWAEWAYLWY HLA-B*15:112,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:113,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:114,YYSEYRNICTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*15:115,YYSEYRNICTNTYESTAYLRYDSYTWAELAYLWY HLA-B*15:116,YYAMYREISTNTYESNLYLRYDSYSLAEWAYLWY HLA-B*15:117,YYAMYREISTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*15:118,YYAMYREISTNTYESNLYLMYDSYTWAEWAYLWY HLA-B*15:119,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:120,YYAMYRDISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:121,YYAMYRNISTNTYESNLYIRYDSYTWAELAYTWY HLA-B*15:122,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:123,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:124,YYSEYRNICTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*15:125,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:126,YYAMYREISTNTYESNLYLSYDSCTWAEWAYLWY HLA-B*15:127,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:128,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:129,YYAMYREISTNTYESNLYLNYDSYTWAEWAYLWY HLA-B*15:131,YYSEYREISTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:132,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:133,YYSEYRNICTNTYESNLYLRYDFYTWAELAYLWY HLA-B*15:134,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:135,YYAMYREISTNTYENNLYLRYDSYTWAEWAYLWY HLA-B*15:136,YYAMYREISTNTYESNLYLRYDSYTWAVLTYLWY HLA-B*15:137,YYAMYREISTNTYESNLYWTYNFYTWAEWAYLWY HLA-B*15:138,YYAMYREISTNTYESNLYLRYDSYTWAELAYEWY HLA-B*15:139,YYAMYRNISANTYESNLYIRYDSYTWAELAYLWY HLA-B*15:140,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:141,YYAMYREISTNTYESNLYLTYDSYTWAEWAYLWY HLA-B*15:142,YDAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:143,YYAKYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:144,YYAMYRNISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:145,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:146,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:147,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:148,YYAMYRNIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:150,YYAMYREISTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*15:151,YYSEYREISTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*15:152,YYAMYREIYTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:153,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:154,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:155,YYAMYREISTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*15:156,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:157,YYAMYREISTNTYENIAYLRYDSYTWAEWAYLWY HLA-B*15:158,YYSEYREISTNTYESNLFLRYDSYTWAELAYLWY HLA-B*15:159,YYAMYREISTNTYESNLHLRYDSYTWAEWAYLWY HLA-B*15:160,YYAMHREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:161,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLSY HLA-B*15:162,YYAMYRENMASTYENIAYLRYHDYTWAALAYLWY HLA-B*15:163,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:164,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:165,YYAMYREISTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*15:166,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:167,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:168,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:169,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:170,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:171,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:172,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:173,YYSEYREISTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:174,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:175,YHAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:176,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:177,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:178,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:179,YYAMYREISTNTYESNLYLRYDSYTWAVDAYLWY HLA-B*15:180,YDSEYRNIFTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:183,YYTMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:184,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:185,YYAMYREISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*15:186,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*15:187,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:188,YYAMYREISTNTYESNLYLRYNYYTWAVLAYTWY HLA-B*15:189,YYAMYRNICTNTDESNLYLRYDSYTWAEWAYLWY HLA-B*15:191,YYAMYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:192,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:193,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:194,YYAMYRNISTNTYESNLYIRYDSYTWAELAYLWY HLA-B*15:195,YYAMYREISTNTYESNLYLRFDSYTWAELAYLWY HLA-B*15:196,YYAMYRENMASTYENIAYLRYHDYTWAELAYLWY HLA-B*15:197,YYSEYRNICTNTYESNLYLSYDSYTWAELAYLWY HLA-B*15:198,YYSEYRNICTNTYESNLYLRYDSYTWAELAYLWY HLA-B*15:199,YYAMYREISTNTYESNLYLRYDSYTWAEDAYTWY HLA-B*15:200,YYSEYRNICTNTYESNLYLRYDSYTWATLAYLWY HLA-B*15:201,YYAMYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*15:202,YYATYREISTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*18:01,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:02,YHSTYRNISTNTYESNLYLNYDSYTWAVLAYTWH HLA-B*18:03,YHSTYRNISTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*18:04,YYATYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:05,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:06,YHSTYRNISTNTYVSNLYLRYDSYTWAVLAYTWH HLA-B*18:07,YHSTYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:08,YHSTYRNISTNTYESNLYLRCDSYTWAVLAYTWH HLA-B*18:09,YHSTYRNISTNTYENTAYLRYDSYTWAVLAYTWH HLA-B*18:10,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:11,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWY HLA-B*18:12,YHSTYREISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:13,YHSTYRNISTNTYESNLYLRYDSYTWAVRAYTWH HLA-B*18:14,YHSTYRNISTNTYESNLYLSYDSYTWAVLAYTWH HLA-B*18:15,YHSTYRNISTNTYESNLYLRYDSYTWAELAYTWH HLA-B*18:18,YHSTYRNISTNTYESNLYLRSDSYTWAVLAYTWH HLA-B*18:19,YHSTYRNISTNTYESNLYLRYDSYTWAEWAYTWH HLA-B*18:20,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:21,YHSTYRNISTNTYESNLYLRYDSYTWAERAYEWY HLA-B*18:22,YHSTYRNISTNTYESNLYISYDSYTWAVLAYTWH HLA-B*18:24,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:25,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:26,YHSTYRNISTNTYESNLYLRYNYYTWAVLAYTWH HLA-B*18:27,YHSTYRNISTNTYESNLYLMFDSYTWAVLAYTWH HLA-B*18:28,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:29,YHATYRNIFTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:30,YHSTYRNISTNTYESNLYLRYDSYTWAERAYTWH HLA-B*18:31,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:32,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:33,YHSTYRNICTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:34,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:35,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*18:36,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYLWH HLA-B*18:37,YHSEYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:38,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:39,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:40,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:41,YHSTYRNISTNTYESNLYLRYESYTWAVLAYTWH HLA-B*18:42,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:43,YYSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:44,YHSTYRNISTNTYESNLYLWYDSYTWAVLAYTWH HLA-B*18:45,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:46,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:47,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:48,YHSKYRNISTNTYESNLYLRYDSYTWAVLAYTWH HLA-B*18:49,YHSTYRNISTNTYENNLYLRYDSYTWAVLAYTWH HLA-B*18:50,YHSTYRNISTNTYESNLYLRYDSYTWAVLAYEWH HLA-B*27:01,YHTEYREICAKTYENTAYLNYHDYTWAVLAYEWY HLA-B*27:02,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:03,YHTEHREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:04,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:05,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:06,YHTEYREICAKTDESTLYLNYDYYTWAELAYEWY HLA-B*27:07,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:08,YHTEYREICAKTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:09,YHTEYREICAKTDEDTLYLNYHHYTWAVLAYEWY HLA-B*27:10,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:11,YHTEYREICAKTDESTLYLSYNYYTWAVLAYEWY HLA-B*27:12,YHTEYREICTNTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:13,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:14,YHTEYREICAKTDEDTLYWTYHDYTWAVLAYEWY HLA-B*27:15,YHTEYREICAKTDESTLYLNYHDYTWAELAYTWY HLA-B*27:16,YHTEYREICTNTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:17,YHTEFREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:18,YHTEYREISTNTYESNLYLNYHDYTWAELAYEWY HLA-B*27:19,YHTEYREICAKTDEDTLYIRYHDYTWAVLAYEWY HLA-B*27:20,YHTEYREICAKTDESTLYLNYNYYTWAELAYEWY HLA-B*27:21,YHTEYREICAKTDESTLYLRYDYYTWAELAYEWY HLA-B*27:23,YHTEYRNIFTNTYESTLYLNYHDYTWAVLAYEWY HLA-B*27:24,YHTEYREICAKTDESTLYLSYNYYSWAELAYEWY HLA-B*27:25,YHTEYREICAKTDESTLYLNYHDYTWAEWAYLWY HLA-B*27:26,YHTEYREICAQTDESNLYLNYHDYTWAVLAYEWY HLA-B*27:27,YHTEYREICAKTDEDTLYLNYNYYTWAVLAYEWY HLA-B*27:28,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYTWH HLA-B*27:29,YHTEYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*27:30,YHTEYREICAKTDENIAYIRYHDYTWAVLAYEWY HLA-B*27:31,YHTEYREICAQTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:32,YHTEYREICAKTDEDTLYLSYHDYTWAVLAYEWY HLA-B*27:33,YHTEYREICAKTDESNLYLSYNYYTWAVLAYEWY HLA-B*27:34,YHTEYREICAKTDEDTLYLSYDYYTWAVLAYEWY HLA-B*27:35,YHTEYREICAKTDEDTLYLNYNFYTWAVLAYEWY HLA-B*27:36,YHTEYREICAKTDESTLYLNYHDYSLAVLAYEWY HLA-B*27:37,YYTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:38,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYLWY HLA-B*27:39,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:40,YHTEYREICAKTDESNLYLNYHDYTWAELAYEWY HLA-B*27:41,YHTEYREICAKTDEDTLYLNYDSYTWAVLAYEWY HLA-B*27:42,YHTEYREICAKTDEDNLYLNYHDYTWAVLAYEWY HLA-B*27:43,YHTEYREICAKTDEDTLYLSYNYYTWAVLAYEWY HLA-B*27:44,YHTEYREICAKTYESNLYLNYHDYTWAVLAYEWY HLA-B*27:45,YHTEYREICAKTDEDTLYLNYHDYTWAVRAYEWY HLA-B*27:46,YHTEYREICAKTDEDTLYLNYHYYTWAVLAYEWY HLA-B*27:47,YHTEYREICAKTDEDTLYLNYHDYTWAVDAYLSY HLA-B*27:48,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:49,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:50,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYESY HLA-B*27:51,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:52,YHTTYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:53,YHTEYREICAKTDEDIAYLNYHDYTWAVLAYEWY HLA-B*27:54,YHTEYREICAKTDEDTLYLNYHDYTWAELAYEWY HLA-B*27:55,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:56,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:57,YHTEYREICAKTDENIAYLNYHDYTWAVLAYEWY HLA-B*27:58,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:60,YHTEYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:61,YHTEYREICAKTDESTLYLNYHDYTWAVLAYEWY HLA-B*27:62,YHTEYREICAKTDENIAYLNYHDYTWAVLAYTWH HLA-B*27:63,YHTEYREICAKTDESTLYLNYHDYTWAELAYLWY HLA-B*27:67,YHTMYREICAKTDEDTLYLNYHDYTWAVLAYEWY HLA-B*27:68,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*27:69,YHTEYREICAKTDESTLYLNYHDYTWAELAYEWY HLA-B*35:01,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:02,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:03,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:04,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:05,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:06,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:07,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:08,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:09,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:10,YYATYREIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:11,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWY HLA-B*35:12,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:13,YYATYREIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:14,YYATYRNIFTNTYESNLYIRYDSYTWAEWAYLWY HLA-B*35:15,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYEWY HLA-B*35:16,YYATYREIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:17,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:18,YYATYRNIFTNTYESNLYIRYNYYTWAVRAYLWY HLA-B*35:19,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:20,YYATYRNISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:21,YYATYRNIFTNTYESNLYIRYDSYTWAELAYLWH HLA-B*35:22,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYLWY HLA-B*35:23,YYATYRNIFTNTYESNLYIRFDSYTWAVLAYLWY HLA-B*35:24,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWH HLA-B*35:25,YYSEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:26,YYAEYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:27,YYATYRNIFTNTYENNLYIRYDSYTWAVLAYLWY HLA-B*35:28,YYATYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:29,YYATYRNIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:30,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:31,YYATYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*35:32,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:33,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYEWY HLA-B*35:34,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:35,YYATYRNIFTNTYESNLYIRYDSYTWAVLTYTWY HLA-B*35:36,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:37,YYATYRNIFTNTYESNLYWTYDSYTWAVLAYLWY HLA-B*35:38,YYATYRNIFTNTYESNLYIRYDFYTWAVDAYLWY HLA-B*35:39,YYATYRNIFTNTYESNLYIRYDYYTWAVLAYLWY HLA-B*35:41,YYATYRNIFTNTYESNLYIRYDSCTWAVLAYLWY HLA-B*35:42,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:43,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:44,YYATYRNIFTNTYESNLYLRYNYYTWAEWAYLWY HLA-B*35:45,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLSY HLA-B*35:46,YYAMYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:47,YYAKYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:48,YYATYRNIFTNTYESNLYIRSDSYTWAVLAYLWY HLA-B*35:49,YYAEYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:50,YHATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:51,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:52,YYATYRNIFTNTYECNLYIRYDSYTWAVLAYLWY HLA-B*35:54,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:55,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:56,YYATYRNIFTNTYENNLYIRYDFYTWAVLAYLWY HLA-B*35:57,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:58,YYATYRNIFTNTYESNLYLSYDSYTWAELAYLWY HLA-B*35:59,YYATYRNIFTNTYESNLYIRYNFYTWAVLAYLWY HLA-B*35:60,YYATYRNIFTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*35:61,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:62,YYATYRNIFTNTYESNLYIRYDSYTWAVWAYLWY HLA-B*35:63,YHTKYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:64,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:66,YYATYRNIFTNTYESNLYLSYDSYTWAVRAYEWY HLA-B*35:67,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:68,YYATYRNIFTNTYESNLYLRYDSYTWAVLAYLWY HLA-B*35:69,YYATYREIFTNTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:70,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:71,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLSY HLA-B*35:72,YYATYRNISTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:74,YYATYRNIFTNTYVSNLYIRYDFYTWAVLAYLWY HLA-B*35:75,YYATYRNIFTNTYESNLYLRYDFYTWAVLAYLWY HLA-B*35:76,YYATYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*35:77,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:78,YYATYRNIFANTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:79,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:80,YYATYREIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:81,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWH HLA-B*35:82,YYATYRNICTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:83,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:84,YHTTYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:85,YYATYRNICTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:86,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYEWY HLA-B*35:87,YYATYRNIFTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*35:88,YYATYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*35:89,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:90,YYTTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:91,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:92,YYATYRNIFTNAYESNLYIRYDSYTWAVLAYLWY HLA-B*35:93,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYTWY HLA-B*35:94,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:95,YYATYRNISTNTYESNLYIRYNYYTWAVLAYLWY HLA-B*35:96,YYATYRNIFTNTYESNLYIRYDFYTWAELAYTWH HLA-B*35:97,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:98,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:99,YYATYRNIFTNTYESNLYLRYDSYTWAERAYLWY HLA-B*35:100,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:101,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:102,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:103,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:104,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:105,YYATYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:106,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:107,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:108,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:109,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWH HLA-B*35:110,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:111,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:112,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:113,YYATYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:114,YYATYRNIFTNTYESNLYLSYDSYTWAVLAYLWY HLA-B*35:115,YYATYRNIFTNTYESNLYIRYDSYTWAVDAYLWY HLA-B*35:116,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:117,YYATYRNIFTNTYESNLYLSYDSYTWAEWAYLWY HLA-B*35:118,YYATYRNIFTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:119,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:120,YYATYRNIFTNTYESNLYIRHDSYTWAVLAYLWY HLA-B*35:121,YYATYRNIFTNTYESNLYIRYHSYTWAVLAYLWY HLA-B*35:122,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:123,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:124,YYSTYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:125,YYSTYRNIFTNTYESNLYISYDSYTWAVLAYLWY HLA-B*35:126,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:127,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:128,YYATYRNIFTNTYESNLYIRYDFYTWAVLAYLWY HLA-B*35:131,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:132,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:133,YYATYRNIFTNTYESNLYIRYVSYTWAVLAYLWY HLA-B*35:135,YYATYRNICTNTYESNLYLRYDSYTWAEWAYLWY HLA-B*35:136,YYATYRNIFTNTDESNLYIRYDFYTWAVLAYLWY HLA-B*35:137,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:138,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:139,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:140,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:141,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:142,YYSTYRNIFTNTYESNLYIRYDSYTWAVRAYLWY HLA-B*35:143,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*35:144,YYATYRNIFTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*37:01,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:02,YHSTYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*37:04,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWH HLA-B*37:05,YHSTYREISTNTYEDNLYIRSNFYTWAVDAYTWY HLA-B*37:06,YHSKYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:07,YHSTYREISTNTYEDTLYLSYDYYTWAERAYEWY HLA-B*37:08,YHSTYRNISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:09,YHSTYREISTNTYEDTLYLSYDYYTWAVDAYTWY HLA-B*37:10,YHSTYREISTNTYENTAYIRSNFYTWAVDAYTWY HLA-B*37:11,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:12,YHSTYREISTNTYEDTLYIRYNYYTWAVDAYTWY HLA-B*37:13,YHSTYREISTNTYEDTLYIRSNFYTWAEDAYTWY HLA-B*37:14,YHSTYREISTNTYESNLYIRSNFYTWAVDAYTWY HLA-B*37:15,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:17,YHSTYREISTNTYEDTLYIRSNFYTWTVDAYTWY HLA-B*37:18,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:19,YHSTYREISTNTYEDTLYIRYNFYTWAVDAYTWY HLA-B*37:20,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:21,YHSTYREIFTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:22,YHATYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*37:23,YHSTYREISTNTYEDTLYIRSNFYTWAVDAYTWY HLA-B*38:01,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:02,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:03,YYSEYREISTNTDESTAYLRYNFYTWAVLTYTWY HLA-B*38:04,YYSEYREICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:05,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:06,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:07,YYSTYRNIFTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:08,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYMWY HLA-B*38:09,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:10,YYSEYRNICTNTYENIAYLRYNFYTWAELAYTWY HLA-B*38:11,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:12,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:13,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:14,YYSEYRNICTNTDENIAYLRYNFYTWAVLTYTWY HLA-B*38:15,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:16,YYTEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:17,YYSEYRNICTNTYEDTLYLRYNFYTWAVLTYTWY HLA-B*38:18,YYSEYRNICTNTYENTAYLRYNFYTWAVLTYTWY HLA-B*38:19,YYSEYRNICTNTYENIAYLSYNFYTWAVLTYTWY HLA-B*38:20,YYSEYRNICTNTYENIAYIRYNFYTWAVLTYTWY HLA-B*38:21,YYSEYRNICTNTYENIAYLRYNFYTWAVLTYTWY HLA-B*38:22,YYSEYRNICTNTYENIAYLNYNFYTWAVLTYKWY HLA-B*38:23,YYSEYRNICTNTYENTAYFRYNFYTWAVLTYTWY HLA-B*39:01,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:02,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:03,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:04,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:05,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:06,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:07,YYSEYRNICTNTYESNLYLRYDSYTWAVLTYTWY HLA-B*39:08,YYSEYREISTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:09,YYSEYRNICTNTDESNLYLRSNFYTWAVLTYTWY HLA-B*39:10,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:11,YYSEYRNICTNTYESNLYLRYNFYTWAVRTYTWY HLA-B*39:12,YDSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:13,YYSEYREISTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:14,YYSEYRNICTNTDESNLYLSYNYYTWAVLTYTWY HLA-B*39:15,YYSEYRNICTNTDESNLYLRYDFYTWAVLTYTWY HLA-B*39:16,YYSEYRNIYTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:17,YYSEYRNIYTNTDESNLYLRYNLYTWAVLTYTWY HLA-B*39:18,YYSEYRNICTNTDESNLYLRYNFYTWAEWTYTWY HLA-B*39:19,YYSTYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:20,YYSEYRNIYTNTYENNLYLRYNFYTWAVLTYTWY HLA-B*39:22,YYSEYREICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:23,YYSEYREISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:24,YYSEYRNICTNTDESNLYLSYNFYTWAVLTYTWY HLA-B*39:26,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:27,YYSEYRNICTNTDVSNLYLRYNFYTWAVLTYTWY HLA-B*39:28,YYSEYRNICTNTDESNLYLTYNFYTWAVLTYTWY HLA-B*39:29,YYSEYRNICTNTDESNLYLSYDYYTWAVLTYTWY HLA-B*39:30,YYSEYRNICTNTDESNLYLRYNFYTWAVLAYTWY HLA-B*39:31,YHSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:32,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYLWH HLA-B*39:33,YYSEYRNICTNTDESNLYWTYNFYTWAVRAYLWY HLA-B*39:34,YYSEYRNICTNTDESNLYWTYNFYTWAVLAYTWY HLA-B*39:35,YYSEYRNICTNTDESNLYLRYNFYTWAELTYTWY HLA-B*39:36,YYSEYRNICTNTDESNLYLRYNFYTWAEWAYTWY HLA-B*39:37,YYSEYRNICTNTYESNLYLSYNFYTWAVLTYTWY HLA-B*39:39,YYSEYRNISTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:41,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:42,YYSEYRNICTNTDESNLYIRYNFYTWAVLTYTWY HLA-B*39:43,YYSEYRNICTNTDESNLYLRYDSYTWAVLAYTWH HLA-B*39:44,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:45,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:46,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:47,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYEWY HLA-B*39:48,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWH HLA-B*39:49,YYSEYREISTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:50,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYEWY HLA-B*39:51,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:52,YYSEYRNICTDTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:53,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:54,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:55,YYSEYRNICTNTYESNLYLRYDFYTWAVLTYTWY HLA-B*39:56,YYSEYRNICTNTYESNLYLRYNFYTWAVLTYTWY HLA-B*39:57,YYSEYRNICTNTDESNLYWTYNFYTWAVLTYTWY HLA-B*39:58,YYSEYRNIFTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:59,YYSEYRNICTNTDESNLYLRYNFYTWAVLTYTWY HLA-B*39:60,YYSEYRNICTNTDESNLYLRYNFYTWAALTYTWY HLA-B*40:01,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:02,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:03,YHTKYREISTNTYESNLYLSYDSYTWAVLAYEWY HLA-B*40:04,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:05,YHTKYREISTNTYESNLYLSYNYYTWAELAYLWY HLA-B*40:06,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:07,YHTKYREIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:08,YHTKYRNIFTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:09,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:10,YYAKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:11,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:12,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:13,YHTKYREIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:14,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:15,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:16,YHTKYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*40:18,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:19,YHTKYREISTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*40:20,YHTKYREISTNTYESNLYLRYDSYTWAVLAYEWY HLA-B*40:21,YYAMYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:23,YHTKYREISTNTYESNLYLRYNYYSWAERAYEWY HLA-B*40:24,YHTKYREISTNTYESNLYLSYDYYTWAVLAYEWY HLA-B*40:25,YHTKYRNISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:26,YHTKYREISTNTYESNLYLRYNYYTWAELAYLWY HLA-B*40:27,YHTKYREISTNTYESNLYLSYNNYTWAVLAYEWY HLA-B*40:28,YHTKYREISTNTYESNLYIRYNYYTWAELAYLWH HLA-B*40:29,YHTKYPEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:30,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:31,YHTKYREISTNTYESNLYLSYDYYSLAVLAYEWY HLA-B*40:32,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:33,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:34,YHTKYREISTNTYESNLYIVYNYYSLAVLAYEWY HLA-B*40:35,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:36,YHTKYREISTNTYESNLYLRYNFYSLAVLAYEWY HLA-B*40:37,YHTKYREISTNTYENNLYLSYNYYTWAVLAYEWY HLA-B*40:38,YHTKYREISTNTYESNLYLRYNSYSLAVLAYEWY HLA-B*40:39,YHTKYREISTNTYESNLYLSYNYYTWAVLAYTWY HLA-B*40:40,YYTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:42,YHTKYREISTNTYESNLYLRYDYYSLAVLAYEWY HLA-B*40:43,YHTKYREISTNTDESNLYLRYNYYSLAVLAYEWY HLA-B*40:44,YHTKYREISTNTYESNLYWTYDYYTWAVLAYEWY HLA-B*40:45,YHTKYREISTNTYESNLYLSYNYYSWAVLAYEWY HLA-B*40:46,YHTEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:47,YHTKYREISTNTYENTAYLRYNYYSLAVLAYEWY HLA-B*40:48,YHTKYREISTNTYESNLYLRYNLYSLAVLAYEWY HLA-B*40:49,YYTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:50,YHTKYREISTNTDESNLYLSYNYYTWAVLAYEWY HLA-B*40:51,YHTKYREISTNTYESNLYLRYNYYSWAELAYTWH HLA-B*40:52,YHTKYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*40:53,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:54,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:55,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:56,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:57,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:58,YYAKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:59,YHTKYREISTNTYESNLYIRYDSYSLAVLAYEWY HLA-B*40:60,YHTKYREISTNTYESNLYLRSDSYSLAVLAYEWY HLA-B*40:61,YHTKYREIYTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:62,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:63,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:64,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:65,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:66,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:67,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:68,YHTKYRNIFTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:69,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:70,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:71,YHTKYREISTNTYESNLYLSYNLYTWAVLAYLWY HLA-B*40:72,YHTKYREISTNTYESNLYLRYNYYTLAVLAYEWY HLA-B*40:73,YHTKYREISTNTYVSNLYLRYNYYSLAVLAYEWY HLA-B*40:74,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:75,YHTKYREICTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:76,YHTKYREISTNTYESKLYLRYNYYSLAVLAYEWY HLA-B*40:77,YHTKYREISTNTYESNLYLRYNFYTLAVLAYEWY HLA-B*40:78,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:79,YHTKYREISTNTYESNLHLRYNYYSLAVLAYEWY HLA-B*40:80,YHTKYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*40:81,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:82,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:83,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:84,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:85,YHTKYREISTNTYESNLYLSYNYYIWAVLAYEWY HLA-B*40:86,YHTKYREISTNTYESNLYWTYNFYTWAVLAYEWY HLA-B*40:87,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:88,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:89,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:90,YHTKYREISTNTYESNLYLSYNYYTWAVLAHEWY HLA-B*40:91,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:92,YHTKYREISTNTYESNLYLRYNYYSLAVLAYLWY HLA-B*40:93,YHTEYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:94,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:95,YHTKYREISTNTYESNLYWTYNYYTWAELAYEWY HLA-B*40:96,YHTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:97,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:98,YHTKYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*40:99,YHTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:100,YHTKYREISTNTYESNLYLRFNYYSLAVLAYEWY HLA-B*40:101,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:102,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:103,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:104,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:105,YHTKYREISTNTYESNLYLSYNSYTWAVLAYEWY HLA-B*40:106,YHTKYRNIFTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:107,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:108,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:109,YHTKYREISTNTYESIAYWTYNYYTWAVLAYEWY HLA-B*40:110,YYTKYREISTNTYENTAYWTYNYYTWAVLAYEWY HLA-B*40:111,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:112,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:113,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWH HLA-B*40:114,YHTKYREISTNTYESNLYLRYNYYSWAVLAYEWY HLA-B*40:115,YHTKYWEISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:116,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:117,YHTKYREISTNTYENIAYLRYNYYSLAVLAYEWY HLA-B*40:119,YHTKYREISTNTYDSNLYLSYNYYTWAVLAYEWY HLA-B*40:120,YHTKYREISTNTYESNLYIRYDYYTWAVLAYEWY HLA-B*40:121,YHTKYREISTNTYESNLYLRYNYYTWAVLAYEWY HLA-B*40:122,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:123,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:124,YHTKYREISTNTYESNLYLRYHDYSLAVLAYEWY HLA-B*40:125,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:126,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:127,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:128,YHTKYREISTNTYESNLYLRYNYYSLAVRAYEWY HLA-B*40:129,YYTKYREISTNTYESNLYIRYNYYTWAVLAYEWY HLA-B*40:130,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:131,YHTKYREISTNTYESNLYWTYNYYTWAVLAYEWY HLA-B*40:132,YHTKYREISTNTYESNLYLRYNYYSLAVLAYESY HLA-B*40:134,YHTKYREISTNIYESNLYLRYNYYSLAVLAYEWY HLA-B*40:135,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:136,YHTKYREISTNTYESNLYLRYNYYTWAVDAYEWY HLA-B*40:137,YYAMYREISTNTYESNLYIRYNYYSLAVLAYEWY HLA-B*40:138,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:139,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:140,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:141,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:143,YHTKYREISTNTYESNLYLSFNYYTWAVLAYEWY HLA-B*40:145,YHTKYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*40:146,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*40:147,YHTKYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*41:01,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:02,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:03,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:04,YHTKYREISTNTYESNLYLSYDYYTWAVDAYTWY HLA-B*41:05,YHTKYREISTNTYESKLYWRYNYYTWAVDAYTWY HLA-B*41:06,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:07,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:08,YHTKYREISTNTYESNLYLRYNYYTWAVDAYTWY HLA-B*41:09,YHTKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*41:10,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:11,YHTKYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*41:12,YHAKYREISTNTYESNLYWRYNYYTWAVDAYTWY HLA-B*42:01,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:02,YHSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:04,YYSEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*42:05,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:06,YYSEYRNIYAQTDESNLYLSYNFYTWAVDAYTWY HLA-B*42:07,YYSEYRNIYTNTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:08,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:09,YHSEYRNIYAQTDESNLYLSYDSYTWAVDAYTWY HLA-B*42:10,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:11,YYSEYREISTNTYESNLYLSYNYYTWAVDAYTWY HLA-B*42:12,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*42:13,YYSEYRNIYAQTDESNLYIRYNYYTWAVDAYTWY HLA-B*42:14,YYSEYRNIYAQTDESNLYLSYNYYTWAVDAYTWY HLA-B*44:02,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:03,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:04,YYTKYREISTNTYENTAYIRYDDYTWAVRAYTSY HLA-B*44:05,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:06,YYATYRNIFTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:07,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:08,YYTMYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:09,YYTKYREISTNTYESNLYIRYDDYTWAVDAYLSY HLA-B*44:10,YYTKYREISTNTYENTAYIRFNLYTWAVLAYLSY HLA-B*44:11,YYTKYREISTNTYENTPYIRYDDYTWAVDAYLSY HLA-B*44:12,YYTKYRNISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:13,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:14,YYTKYREISTNTYENTAYIRYNDYTWAVDAYLSY HLA-B*44:15,YHTKYREISTNTYESTAYWRYNLYTWAVDAYLSY HLA-B*44:16,YYTKYREISTNTYENTAYIRYDDYTWAVDAYEWY HLA-B*44:17,YYTKYREISTNTYENTAYIRYDSYTWAVDAYLSY HLA-B*44:18,YHTKYREISTNTYENIAYWRYNLYTWAVDAYLSY HLA-B*44:20,YYTKYREISTNTYENTAYWTYDDYTWAVDAYLSY HLA-B*44:21,YYTKYREISTNTYENTAYIRYDDYTWAVDAYESY HLA-B*44:22,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:24,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:25,YYTKYREISTNTYENIAYIRYDYYTWAVDAYLSY HLA-B*44:26,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:27,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:28,YYTKYREISTNTYENTAYIRYDDYTWAVRAYLSY HLA-B*44:29,YYTKYREISTNTYENTAYIRYDDYTWAVLTYLSY HLA-B*44:30,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:31,YYTKYREISTNTYENTAYLRYNYYSLAVLAYESY HLA-B*44:32,YYTKYPEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:33,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:34,YYAKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:35,YYTKYREISTNTYENTAYIRYDDYTWAVEAYLSY HLA-B*44:36,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:37,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLWY HLA-B*44:38,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:39,YYPKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:40,YYTEYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:41,YYTKYREISTNTYENTAYLRYDDYTWAVDAYLSY HLA-B*44:42,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLWY HLA-B*44:43,YYTKYREISTNTYENTAYIRYDSYTWAVLAYLSY HLA-B*44:44,YYTEYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:45,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:46,YYTKYREISTNTYESNLYIRYDDYTWAVLAYLSY HLA-B*44:47,YYTKYREISTNTYENTAYWTYDDYTWAVLAYLSY HLA-B*44:48,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:49,YDTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:50,YYTKYREISTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*44:51,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:53,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:54,YYTKYREISTNTYENTAYLSYDDYTWAVLAYLSY HLA-B*44:55,YHTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:57,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:59,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:60,YYTMYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:62,YYTKYREISTNTYENTAYIRYNYYTWAVDAYLSY HLA-B*44:63,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:64,YYTKYREISTNTYENTAYIRYDDYTWAVLAYEWY HLA-B*44:65,YYTKYREISTNTYENTAYLRYDDYTWAVLAYLSY HLA-B*44:66,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:67,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:68,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:69,YYTKYWEISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:70,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:71,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:72,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:73,YYTKYREISTNTYENTAYIRYDDYTWAVDGYLSY HLA-B*44:74,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:75,YYTKYREISTNTYENNLYIRYDYYTWAVDAYLSY HLA-B*44:76,YYTKYREISTNTYENTAYIRYDDYTWAERAYLSY HLA-B*44:77,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:78,YYTKYREISTNTYENTAYIRYDYYTWAVDAYLSY HLA-B*44:79,YYTKYREISTNTYENTAYIRYDDYTWAELAYLSY HLA-B*44:80,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:81,YYTNYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:82,YYTKYREISTNTYENTAYIRYNYYTWAVLAYLSY HLA-B*44:83,YYATYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:84,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:85,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:86,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:87,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:88,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:89,YYTKYREISTNTYENTAYIRYDDYTWAVDTYLSY HLA-B*44:90,YYTKYREIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-B*44:91,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLWY HLA-B*44:92,YYTKYREISTNTYENTAYIRYDDYTWAMLAYLSY HLA-B*44:93,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:94,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:95,YYTKYREISTNTYENIAYIRYDDYTWAVDAYLSY HLA-B*44:96,YYTKYREISTNTYENTAYIGYDDYTWAVLAYLSY HLA-B*44:97,YYTKYREICAKTDENTAYIRYDDYTWAVDAYLSY HLA-B*44:98,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:99,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:100,YYTKYREISTNTYENTAYWRYDDYTWAVDAYLSY HLA-B*44:101,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:102,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:103,YHTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:104,YYTKYREISTNTYENTAYIRYDDYTWAVDAYLSY HLA-B*44:105,YYTKYREISTNTYENTAYIRYDDYTWAVLAYLSY HLA-B*44:106,YYTKYREISTNTYENTAYLSYDDYTWAVDAYLSY HLA-B*44:107,YYTKYREISTNTYENTAYIRYDYYTWAVLAYLSY HLA-B*44:109,YYTKYREISTNTYESTAYIRYDDYTWAVLAYLSY HLA-B*44:110,YYTKYREISTNTYENTAYISYDDYTWAVLAYLSY HLA-B*45:01,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:02,YHTKYREISTNTYESNLYWRYNFYTWAVDAYLSY HLA-B*45:03,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:04,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLWY HLA-B*45:05,YHTKYREISTNTYESNLYWRYNLYTWAVDVYLSY HLA-B*45:06,YHTKYREIYAQTDESNLYWRYNLYTWAVDAYLSY HLA-B*45:07,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:08,YHTKYREISTNTYESNLYWRYNLYTWAVDAYTWY HLA-B*45:09,YHTKYREISTNTYESNLYWRYDSYTWAVDAYLSY HLA-B*45:10,YHTKYREISTNTYESNLYWRYNLYTWAVDAYEWY HLA-B*45:11,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*45:12,YHTKYREISTNTYESNLYWRYNLYTWAVDAYLSY HLA-B*46:01,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:02,YYAMYREKYRQTGVSNLYLRYDSYTWAEWAYLWY HLA-B*46:03,YYAMYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-B*46:04,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:05,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:06,YYAMYREKYRQTDVSNLYLRYDSYSLAVLAYEWY HLA-B*46:08,YYAMYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-B*46:09,YYAMYREKYRQTDVSNLYLRYDSYTWAVWAYLWY HLA-B*46:10,YYTMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:11,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYLWY HLA-B*46:12,YYAMYREKYRQTDVSNLYLSYDSYTWAEWAYLWY HLA-B*46:13,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-B*46:14,YHAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:16,YYAMYREKFRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:17,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLSY HLA-B*46:18,YYAMYREKYRQTDVSNLYWTYNLYTWAVLAYTWY HLA-B*46:19,YYAMYREKYRQTDVSNLYLRYDSYTWAVLTYLWY HLA-B*46:20,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:21,YYAMYREKYRQTDVSNLYLRYDSYTWAVLAYTWY HLA-B*46:22,YYAMYREKYRRTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:23,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*46:24,YYAMYREKYRQTDVSNLYLRYDSYTWAEWAYLWY HLA-B*47:01,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:02,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:03,YYTKYREISTNTYESNLYLRFHDYTWAVLAYEWY HLA-B*47:04,YYTKYREISTNTYENTAYLNYHDYTWAVLAYEWY HLA-B*47:05,YYTKYREISTNTYEDTLYLNYHDYTWAVLAYEWY HLA-B*47:06,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*47:07,YYTKYREISTNTYEDTLYLRFHDYTWAVLAYEWY HLA-B*48:01,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:02,YYSEYREISTNTYESNLYIRYDSYTWAVLAYLWY HLA-B*48:03,YYSEYREISTNTYESNLYLRYNYYSLAVLAYEWY HLA-B*48:04,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:05,YYSEYREISTNTYESNLYLSYNYYTWAERAYEWY HLA-B*48:06,YYSEYRNIFTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:07,YYSEYREISTNTYESNLYLSYNFYSLAVLAYEWY HLA-B*48:08,YYSEYREISTNTYESNLYLSYDYYTWAERAYEWY HLA-B*48:09,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:10,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:11,YYSEYREISTNTYESNLYLSYNYYSLAVLAYELY HLA-B*48:12,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:13,YYSEYREISTNTYESNLYLSYNYYTWAVLAYEWY HLA-B*48:14,YYSEYREISTNTYESNLYLSYNSYTLAVLAYEWY HLA-B*48:15,YYSEYREISTNTYESNLYLSYNYYSLAELAYEWY HLA-B*48:16,YYSEYRVISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:17,YYSEYREISTNTYESNLYIRYNFYSLAVLAYEWY HLA-B*48:18,YYSEYREISTNTYESIAYLSYNYYSLAVLAYEWY HLA-B*48:19,YYSEYREISTNTYESNLYLSYNYYSLAVWAYEWY HLA-B*48:20,YYSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:21,YYSEYREISTNTYESNLYLNYNYYSLAVLAYEWY HLA-B*48:22,YHSEYREISTNTYESNLYLSYNYYSLAVLAYEWY HLA-B*48:23,YYSEYREISTNTYESNLYLRYDSYSLAVLAYEWY HLA-B*49:01,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:02,YHTKYREISTNTYENTAYWRYNLYTWAELAYLWY HLA-B*49:03,YHATYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:04,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:05,YHTKYREISTNTYENIAYWRYDSYTWAELAYLWY HLA-B*49:06,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:07,YHTKYREISTNTYENIAYWRYNLYTWAELAYEWY HLA-B*49:08,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*49:09,YHTKYREISTNTYENIAYWRYNLYTWAELAYLWH HLA-B*49:10,YYTKYREISTNTYENIAYWRYNLYTWAELAYLWY HLA-B*50:01,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:02,YHTKYREISTNTYESNLYWRYNLYTWAELAYLSY HLA-B*50:04,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:05,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:06,YHTRYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:07,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:08,YHTKYREISTNTYESNLYWRYNLYTWAELAYLWY HLA-B*50:09,YHTKYREISTNTYESNLYWRYNFYTWAELAYLWY HLA-B*51:01,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:02,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWY HLA-B*51:03,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLGH HLA-B*51:04,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:05,YYATYRNIFTNTYENIAYWTYNYYTWAVRAYLWY HLA-B*51:06,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWH HLA-B*51:07,YYATYRNISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:08,YYATYRNIFTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*51:09,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:12,YYATYRNIFTNTYENIADWTYNYYTWAELAYLWH HLA-B*51:13,YYATYRNIFTNTYENIAYWTYNFYTWAELAYLWH HLA-B*51:14,YYATYRNIFTNTYENIAYWTYKYYTWAELAYLWH HLA-B*51:15,YYATYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*51:16,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWH HLA-B*51:17,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:18,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:19,YYATYRNIFTNTYENIAYWTYNYYTWAVLTYLWH HLA-B*51:20,YYATYRNIFTNTDENIAYWTYNYYTWAVDAYLWH HLA-B*51:21,YYATYRNIFTNTYENIAYWTYNYYTWAELAYTWH HLA-B*51:22,YYATYRNICTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:23,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLSY HLA-B*51:24,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:26,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:28,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:29,YYATYRNIFTNTYENIAYWTYNYYTWAERAYLWH HLA-B*51:30,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:31,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWH HLA-B*51:32,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:33,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:34,YYATYRNIFTNTYENIAYWTYNYYTWAELAYEWY HLA-B*51:35,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:36,YYATYRNIFTNTYENIAYWTYNYYTWAEDAYTWY HLA-B*51:37,YYATYRNIFTNTYENIAYWTYDSYTWAELAYLWH HLA-B*51:38,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:39,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:40,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*51:42,YYATYRNIFTNTYENIAYIRYDDYTWAVLAYLSY HLA-B*51:43,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:45,YYATYRNIFTNTYENIAYLRYDSYTWAELAYLWH HLA-B*51:46,YYATYRNIFTNTYENIAYITYNYYTWAELAYLWH HLA-B*51:48,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:49,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:50,YYATYRNIFTNTYENGLYWTYNYYTWAELAYLWH HLA-B*51:51,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:52,YYATYRNIFTNTHENIAYWTYNYYTWAELAYLWH HLA-B*51:53,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:54,YYATYRNIFTNTYENTAYWTYNYYTWAVRAYLWY HLA-B*51:55,YYATYRNIFTNTYENIAYWTYNYYTWAEQAYLWH HLA-B*51:56,YYATYRNIFTNTYENIAYIRYNYYTWAELAYLWH HLA-B*51:57,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:58,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:59,YYATYRNIFTNTYENIAYLRYNYYTWAELAYLWY HLA-B*51:60,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:61,YYATYRNIFTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*51:62,YYATYRNIFTNTYENIAYLRYNLYTWAELAYLWH HLA-B*51:63,YYATYRNIFTNTYENIAYWTYNSYTWAELAYLWH HLA-B*51:64,YYATYRNIFTNTYENIAYLSYNYYTWAELAYLWH HLA-B*51:65,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:66,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:67,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:68,YDATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:69,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:70,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:71,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:72,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:73,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*51:74,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:75,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:76,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:77,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:78,YYATYRNIFTNTYENTAYWTYNYYTWAELAYLWH HLA-B*51:79,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:80,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:81,YYATYRNIFTNTYENIAYLSYNYYTWAVLAYEWY HLA-B*51:82,YYATYRNIFTNTYENIAYWTYNYYTWAERAYEWH HLA-B*51:83,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:84,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:85,YYATYRNIFTNTYENIAYWTYHDYTWAELAYLWH HLA-B*51:86,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:87,YYATYRNIFTNTYENIAYWTYNYYTWADLAYLWH HLA-B*51:88,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:89,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:90,YYATYRNIFTNTYENIAYWTYDYYTWAELAYLWH HLA-B*51:91,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:92,YYATYRNIFTNTYENIAYWTYDFYTWAELAYLWH HLA-B*51:93,YYATYRNIFTNTYENIAYWTYNYYTWAVLAYEWY HLA-B*51:94,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:95,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*51:96,YYATYRNIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:01,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:02,YYAMYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:03,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWY HLA-B*52:04,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:05,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:06,YYATYREIFTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:07,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:08,YYATYREISTNTYENIAYWTYNYYTWAELAYEWH HLA-B*52:09,YYATYREISTNTYESIAYWTYNYYTWAELAYLWH HLA-B*52:10,YYATYREISTNTYENIAYWTYNYYTWAVLAYLWH HLA-B*52:11,YYATYREISTNTYENIAYWTYNYYTWAELAYLWY HLA-B*52:12,YYATYREISTNTYENIAYWTYDYYTWAELAYLWH HLA-B*52:13,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:14,YYATYREISTNTYENIAYWTYNFYTWAELAYLWH HLA-B*52:15,YYATYREISTNTYENIAYWTYNYYTWAELAYLSH HLA-B*52:16,YYSEYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:17,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:18,YYATYREISTNTYENIAYWTYNYYTWAELAYLWH HLA-B*52:19,YYATYREISTNTYENIAYWTYNYYTWAVDAYLWH HLA-B*52:20,YYATYREISTNTYENTAYWTYNYYTWAELAYLWH HLA-B*52:21,YYATYREISTNTYENIAYWTYNYYTWAEWAYLWH HLA-B*53:01,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:02,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWH HLA-B*53:03,YYATYRNIFTNTYEDTLYIRYDSYTWAVLAYLWY HLA-B*53:04,YYATYRNIFTNTYENIAYIRYDFYTWAVLAYLWY HLA-B*53:05,YYATYRNIFTNTYESIAYIRYDSYTWAVLAYLWY HLA-B*53:06,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWH HLA-B*53:07,YYATYRNIFTNTYENIAYIRSNFYTWAVLAYLWY HLA-B*53:08,YYATYRNIFTNTYENIAYIRYDSYTWAELAYLWY HLA-B*53:09,YYATYRNISTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:10,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:11,YYATYRNIFTNTYENTAYIRYDSYTWAVRAYLWY HLA-B*53:12,YYATYRNIFTNTYESTAYIRYDSYTWAVLAYLWY HLA-B*53:13,YYATYRNIFTNTYENTAYIRYDSYTWAVLAYLWY HLA-B*53:14,YYATYRNIFTNTYENIAYLSYDSYTWAVLAYLWY HLA-B*53:15,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:16,YYATYRNIFTNTYESIAYIRYDSYTWAVRAYLWY HLA-B*53:17,YYATYREISTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:18,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:19,YYATYRNIFTNTYENIAYIRYNYYTWAVLAYLWY HLA-B*53:20,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:21,YYATYRNIFTNTYENIAYIRYDSYTWAVLAYLWY HLA-B*53:22,YYATYRNIFTNTYENIAYIRYDSYTWAVDAYLSY HLA-B*53:23,YYATYRNIFTNTDENIAYIRYDSYTWAVLAYLWY HLA-B*54:01,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:02,YHAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:03,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*54:04,YYAGYRNIYAQTDESNLYWTYNYYTWAVLAYTWY HLA-B*54:06,YYAGYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*54:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:09,YYAGYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*54:10,YYAGYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*54:11,YYAGYRNIYAQTDESNLYWTYNYYSWAVLAYTWY HLA-B*54:12,YYAGYRNIYAQTDENIAYWTYNLYTWAVLAYTWY HLA-B*54:13,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:14,YYAGYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*54:15,YYAGYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*54:16,YYAGYRNIYAQTDESNLYWTYDLYTWAVLAYTWY HLA-B*54:17,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:18,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:19,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:20,YYAGYRNIYAQTDESNLYWTYNLYTWAERAYTWY HLA-B*54:21,YYSGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*54:22,YYAGYRNIYAQTDESNLYWTYNLYSWAVLAYTWY HLA-B*54:23,YYAGYRNIYAQTEESNLYWTYNLYTWAVLAYTWY HLA-B*55:01,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:02,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:03,YYAEYRNIYAQTDVSNLYWTYNLYTWAELAYTWY HLA-B*55:04,YYAEYRNIYAQTDESNLYLSYNYYTWAVLAYTWY HLA-B*55:05,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:07,YYAGYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:08,YYAEYRNIYAQTDESNLYLRYNYYTWAVLAYLWY HLA-B*55:09,YYAEYRNIYAQTDESNLYWTYNLYTWAERAYEWY HLA-B*55:10,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:11,YYAEYRNIYAQTDESNLYWMYNLYTWAELAYTWY HLA-B*55:12,YYAEYRNIYAQTDENNLYWTYNLYTWAVLAYTWY HLA-B*55:13,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYTWY HLA-B*55:14,YYAEYRNIYAQTDESNLYIVYDSYTWAELAYTWY HLA-B*55:15,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:16,YHAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:17,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:18,YYAEYREISTNTYESNLYWTYNLYTWAVLAYTWY HLA-B*55:19,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:20,YYAEYRNIYAQTDESNLYWTYNYYTWAVDAYTWY HLA-B*55:21,YYAEYRNIYAQTDESNLYWTYNLYTWAEWAYTWY HLA-B*55:22,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYEWY HLA-B*55:23,YYAEYRNIYAQTDESNLYWTYDSYTWAVLAYTWY HLA-B*55:24,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYEWY HLA-B*55:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:27,YYAEYRNIYAQTDESNLYWTYDYYTWAVLAYTWY HLA-B*55:28,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYTWY HLA-B*55:29,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:30,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:31,YYAEYRNIYAQTYESNLYWTYNLYTWAELAYTWY HLA-B*55:32,YYAEYRNIYAQTDESNLYWTYNSYTWAVLAYTWY HLA-B*55:33,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:34,YYAEYREISAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:35,YYAMYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:36,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:37,YYAEYRNIYAQTDESNLYWTYNLYTWAVRAYTWY HLA-B*55:38,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:39,YYAEYRNIYAQTDESNLYWTYNLHTWAVLAYTWY HLA-B*55:40,YYAEYREIYAQTDESNLYWTYNLYTWAELAYTWY HLA-B*55:41,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:42,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*55:43,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYTWY HLA-B*56:01,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:02,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:03,YYAEYRNIYAQTDESNLYLRYDSYTWAEWAYLWY HLA-B*56:04,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYLWY HLA-B*56:05,YYAEYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:06,YYATYRNIYAQTDESNLYWTYNYYTWAELAYLWH HLA-B*56:07,YYAEYRNIYAQTDENTAYWTYNLYTWAVLAYLWY HLA-B*56:08,YYAEYREKYGQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:09,YYAEYRNIYAQTDESNLYIRYDSYTWAVLAYLWY HLA-B*56:10,YYAEYRNIYAQTDESNLYLRYNLYTWAVLAYTWY HLA-B*56:11,YYAEYRNIYAQTDESNLYIRYDFYTWAVLAYLWY HLA-B*56:12,YYAEYRNIYAQTDESNLYIRYNYYTWAVLAYTWY HLA-B*56:13,YYAEYRNIYAQTDESNLYWTYNLYTWAVDAYLWY HLA-B*56:14,YYAEYREKYRQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:15,YYAEYRNIYAQTDESNLYWTYNYYTWAVLAYLWY HLA-B*56:16,YYSEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:17,YYAEYRNIYANTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:18,YYAEYRNIYAQTDESNLYLRYDSYTWAVLAYTWY HLA-B*56:20,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:21,YYAEYRNIYAQTDENIAYWTYNYYTWAELAYLWH HLA-B*56:22,YYAEYRNIYAQTDESNLYWTYNFYTWAVLAYLWY HLA-B*56:23,YYAEYRNIYANTYESNLYWTYNLYTWAVLAYTWY HLA-B*56:24,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:25,YYAEYRNIYAQTDESNLYWTYNLYTWAELAYLWY HLA-B*56:26,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:27,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*56:29,YYAEYRNIYAQTDESNLYWTYNLYTWAVLAYLWY HLA-B*57:01,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:02,YYAMYGENMASTYENIAYIVYNYYTWAVRAYLWY HLA-B*57:03,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:04,YYAMYGENMASTYENIAYIVYDDYTWAVRAYLWY HLA-B*57:05,YYAMYGENMASTYENIAYIRYNYYTWAVRAYLWY HLA-B*57:06,YYAMYGENMASTYENIAYIVYDSYIWAVLAYLWY HLA-B*57:07,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLSY HLA-B*57:08,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:09,YYAMYGENMASTYENIAYIVYNYYTWAEDAYLWY HLA-B*57:10,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:11,YYAMYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*57:12,YYAMYGENMASTYESNLYIVYNYYTWAVRAYLWY HLA-B*57:13,YYAMYGENMASTYENIAYIVYDSYTWAERAYEWY HLA-B*57:14,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWH HLA-B*57:15,YYAMYGENVASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:16,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:17,YYAMYGENMASTYENIAYIVYNYYTWAVLAYLWY HLA-B*57:18,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:19,YYAMYGENMASTYENIAYIVYDSYTWAVRAYLWY HLA-B*57:20,YYAMYGKNMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:21,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:22,YYAMYGENMASTYENIAYIVYDSYTWAELAYLWY HLA-B*57:23,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:24,YYAMYGENMASTYENIAYIVYDSYTWAVDAYLWY HLA-B*57:25,YYAMYGENMASTYENIAYIVYDSYTWAVLAYEWY HLA-B*57:26,YYAMYGENMASTYENIAYIVYDSYTWAVLAYTWY HLA-B*57:27,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:29,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:30,YYAMYGENMASTYENIAYIVYDSYTWAARAYLWY HLA-B*57:31,YYAMYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*57:32,YYAMYGENMASTYENIAYIVYHDYTWAVLAYLWY HLA-B*58:01,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:02,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:04,YYATYEENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:05,YYATYGENMASTYENIAYIRYDSYTLAALAYTWY HLA-B*58:06,YYATYGENMASTYENIAYLWYDSYTWAELAYLWY HLA-B*58:07,YYATYGENMASTYENIAYLWYDSYTWAVLAYLSY HLA-B*58:08,YYATYGENMASTYENIAYWTYNYYTWAELAYLWH HLA-B*58:09,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWH HLA-B*58:11,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:12,YYSTYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:13,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:14,YYATYGENMASTYENIAYIVYDSYTWAVLAYLWY HLA-B*58:15,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:16,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:18,YYATYGENMASTYENIAYLSYDSYTWAVLAYLWY HLA-B*58:19,YYATYGENMASTYENIAYIRYDSYTWAELAYLWY HLA-B*58:20,YYATYGENMASTYENIAYLRYNFYTWAVLTYTWY HLA-B*58:21,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:22,YYATYGENMASTYENIAYIRYDSYTWAVRAYLWY HLA-B*58:23,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:24,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:25,YYATYGENMASTYENIAYLWYDSYTWAVLAYLWY HLA-B*58:26,YYATYGENMASTYENIAYLRYDSYTWAVLAYLWY HLA-B*58:27,YYATYGENMASTYENIAYLSYNYYTWAVLAYEWY HLA-B*58:28,YYATYGENMASTYENIAYIRYNYYTWAVLAYLWY HLA-B*58:29,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*58:30,YYATYGENMASTYENIAYIRYDSYTWAVLAYLWY HLA-B*59:01,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*59:02,YYAEYRNIFTNTYENIAYWTYNYYTWAVLAYTWY HLA-B*59:03,YYAEYRNIFTNTYENIAYWTYNFYTWAVLAYTWY HLA-B*59:04,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYLWY HLA-B*59:05,YYAEYRNIFTNTYENIAYWTYNLYTWAVLAYTWY HLA-B*67:01,YYSEYRNIYAQTDESNLYLRYNFYTWAVLTYTWY HLA-B*67:02,YYSGYREKYRQADVSNLYLRYNFYTWAVLTYTWY HLA-B*73:01,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*73:02,YHTEYRNICAKTDVGNLYWTYNFYTWAVLAYEWH HLA-B*78:01,YYATYRNIFTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:02,YYATYRNIFTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:03,YYATYRNICTNTDESNLYWTYNYYTWAELAYLWH HLA-B*78:04,YYATYRNIFTNTYESNLYWTYNYYTWAVLAYLWY HLA-B*78:05,YYATYREISTNTYESNLYWTYNYYTWAELAYLWH HLA-B*78:06,YYATYREISTNTYENNLYWTYNYYTWAELAYLWH HLA-B*78:07,YYATYRNIFTNTDESNLYWTYNYYTWAELAYTWH HLA-B*81:01,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:02,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:03,YYSEYRNIYAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*81:05,YYSEYRNIFAQTDESNLYLSYNYYSLAVLAYEWY HLA-B*82:01,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:02,YYSEYRNIYAQTDESNLYLRFNLYTWAVDAYLSY HLA-B*82:03,YYSEYRNIYAQTDESNLYLRYNLYTWAVDAYLSY HLA-B*83:01,YYSEYRNIYAQTDESNLYIRYDDYTWAVDAYLSY HLA-C*01:02,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:03,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:04,YFSGYREKYRQTDVSNLYLWCDSYTWAEWAYTWY HLA-C*01:05,YFSGYREKYRQTDVSNLYLRSDYYTWAERAYTWY HLA-C*01:06,YFSGYREKYRQTDVSNLYLWCDYYTWAVRAYTWY HLA-C*01:07,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:08,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:09,YFSGYREKYRQTDVSNLYLWCDYYTWAEWAYTWY HLA-C*01:10,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYEWY HLA-C*01:11,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:12,YFSGYREKYRQTDVSNLYLWYDYYTWAERAYTWY HLA-C*01:13,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:14,YFSGYREKYRQTDVNKLYLWCDYYTWAERAYTWY HLA-C*01:15,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:16,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:17,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:18,YFSGYREKYHQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:19,YFSGYREKYRQTDVCNLYLWCDYYTWAERAYTWY HLA-C*01:20,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:21,YFSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*01:22,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYTWY HLA-C*01:23,YFSGYREKYRQADVSNLYLWCDYYTWAERAYTWY HLA-C*01:24,YFSGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*01:25,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:26,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:27,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:28,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:29,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTCY HLA-C*01:30,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWH HLA-C*01:31,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYMWY HLA-C*01:32,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:33,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:34,YFSGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*01:35,YFSGYREKYRQTDVSNLYLWCDYYTWAELAYLWY HLA-C*01:36,YFSGYREKYRQTDVSNLYLRFDYYTWAERAYTWY HLA-C*01:38,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:39,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*01:40,YFSGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*02:02,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:03,YYAGYREKYRQTDVNKLYLRYDSYTWAVLAYEWY HLA-C*02:04,CYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYEWY HLA-C*02:06,YYAGYREKYRQTDVNKLYLRYDLYTWAEWAYEWY HLA-C*02:07,YYAGYREKYRQTDVNKLYLRYHDYTWAEWAYEWY HLA-C*02:08,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:09,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:10,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:11,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:12,YYAGYREKYRQADVSKLYLRYDSYTWAEWAYEWY HLA-C*02:13,YYAGYREKYRQTDVNKLYLRYDSYTWAAWAYEWY HLA-C*02:14,YDAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:15,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:16,YYAGYREKYRQTDVNKLYLRYDSYTWAELAYEWY HLA-C*02:17,YYAGYREKYRQTDVNKLYLWFDSYTWAEWAYEWY HLA-C*02:18,YYAGYREKYRQTDVNKLYLRYDSYTWAALAYEWY HLA-C*02:19,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:20,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:22,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYEWY HLA-C*02:23,YYAGYREKYRQTDVNKLYLRYDYYTWAEWAYEWY HLA-C*02:24,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:26,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:27,YYAGYREKYRQTDVSNLYLRYDSYTWAEWAYEWY HLA-C*02:28,YYAGYREKYRQTDVNKLYLRYDSYTWAVWAYEWY HLA-C*02:29,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:30,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:31,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:32,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYEWY HLA-C*02:33,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:34,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:35,YYAGYREKYRQTDVNKLHLRYDSYTWAEWAYEWY HLA-C*02:36,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:37,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:39,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*02:40,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYEWY HLA-C*03:01,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:02,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:03,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:04,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:05,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:06,YYAGYREKYRQTDVSNLYIRYVYYTWAELAYLWY HLA-C*03:07,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:08,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:09,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:10,YYAGYREKYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:11,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:12,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:13,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:14,YYAGYREKYRQTDVSNLYIRYDSYTLAALAYTWY HLA-C*03:15,YYAGYREKYRQADVNKLYLRYDSYTWAELAYLWY HLA-C*03:16,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYTWY HLA-C*03:17,YYAGYREKYRQTDVSNLYLWYDYYTWAELAYLWY HLA-C*03:18,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:19,YYAGYREKYRQTDVSNLYIRYDLYTWAELAYLWY HLA-C*03:21,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:23,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:24,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:25,YYAGYREKYRQTDVSNLYLSYDYYTWAELAYLWY HLA-C*03:26,YYAGYREKYRQTDVSNLYIRYDFYTWAELAYLWY HLA-C*03:27,YYAGYREKYRQADVSNLYLSYDYYTWAELAYLWY HLA-C*03:28,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:29,YYAGYRENYRQTDVSKLYIRYDYYTWAELAYLWY HLA-C*03:30,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:31,YYAGYRENYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:32,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:33,YYAGYREKYRQTDVSNLCLRYDSYTWAELAYLWY HLA-C*03:34,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYEWY HLA-C*03:35,YYAGYREKYRQTDVSNLYLRYDYYTWAELAYLWY HLA-C*03:36,YYAGYREKYRQTDVSNLYLRYDSYTWAVLAYLWY HLA-C*03:37,YYSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:38,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:39,YDSGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:40,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:41,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:42,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:43,YYAGYREKYRQTDVSNLYIRYDSYTWAELAYLWY HLA-C*03:44,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:45,YYAGYREKYRQTDVNKLYIRYDYYTWAELAYLWY HLA-C*03:46,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:47,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:48,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:49,YYAGYREKYRQTDVSNLYIRYDYYTWAERAYLWY HLA-C*03:50,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:51,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWH HLA-C*03:52,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:53,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:54,YYAGYREKYRQTDVSNLYIRYDYYTWAELPYLWY HLA-C*03:55,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:56,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:57,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:58,YYAGYREKYRQTDVSNLYLWCNFYTWAERAYTWY HLA-C*03:59,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:60,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:61,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:62,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:63,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:64,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:65,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:66,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:67,YDAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:68,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:69,YYAGYREKYRQADVSNLYIRYDYYTWAELAYLWY HLA-C*03:70,YYAGYREKYRQTDESNLYIRYDYYTWAELAYLWY HLA-C*03:71,YYAGYREKYRQTDVSNLYLWYDSYTWAELAYLWY HLA-C*03:72,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:73,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:74,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:75,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:76,HYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:77,YYAGYREKYRQTDVSNLYIRYDYYTWAVLAYLWY HLA-C*03:78,YYAGYREKYRQTDVSNLYIRYDYYTWAEMAYLWY HLA-C*03:79,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:80,YYAGYREKYRQTDVSNLYIRYDYYTWAEWAYTWY HLA-C*03:81,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:82,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:83,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:84,YYAGYREKYRQTDVSNLYLRYDSYTWAELAYLWY HLA-C*03:85,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:86,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*03:87,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:88,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:89,YYAGYREKYRQTDVSNLYLRFDSYTWAELAYLWY HLA-C*03:90,YYAGYREKYRQTDVSNLYIRSDYYTWAELAYLWY HLA-C*03:91,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:92,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYTWY HLA-C*03:93,YYAGYREKYRQTDVSNLYIRYDYYTWAELAYLWY HLA-C*03:94,YYAGYREKYRQTDVSNLYLWCDYYTWAERAYTWY HLA-C*04:01,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:03,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:04,YSAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:05,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:06,YYAGYREKYRQADVNKLYLRFNFYTWAELAYTWY HLA-C*04:07,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:08,YSAGYREKYRQADVNKLYLRFNFYTWAERAYLWY HLA-C*04:10,YSAGYREKYRQTDVNKLYLRFNFYTWAERAYTWY HLA-C*04:11,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:12,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:13,YSAGYREKYRQADVNKLYLRFNFYTWAALAYTWY HLA-C*04:14,YSAGYREKYRQADVNKLYLRFNFYTWAEQAYTWY HLA-C*04:15,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:16,YYAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:17,YSAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*04:18,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:19,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:20,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:23,YSAGYREKYRQADVNKLYLRFDFYTWAERAYTWY HLA-C*04:24,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:25,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:26,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:27,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:28,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:29,YSAGYREKYRQADVSNLYLRFNFYTWAERAYTWY HLA-C*04:30,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:31,YSAGYREKYRQADVNKLYLRFNFYTWVERAYTWY HLA-C*04:32,YSAGYREKYRQADVNKLYLRFNFYTWAERAYEWY HLA-C*04:33,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:34,YSAGYREKYRQADVNKLYLRFNFYTWAVLAYLWY HLA-C*04:35,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:36,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:37,YSAGYREKYRQADVNKLYLWCNFYTWAERAYTWY HLA-C*04:38,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:39,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:40,YSAGYREKYRQADVNKLYFRFNFYTWAERAYTWY HLA-C*04:41,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:42,YDAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:43,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:44,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:45,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:46,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:47,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:48,YSAGYREKYRQADVNKLYLRFNFYTWAERPYTWY HLA-C*04:49,YSAGYWEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:50,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:51,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:52,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:53,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:54,YSAGYREKYRQADVNKLYLRFDSYTWAERAYTWY HLA-C*04:55,YSAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*04:56,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:57,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:58,YSAGYREKYRQADVNKLYLRFNFYTLAALAYTWY HLA-C*04:60,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:61,YSAGYREKYRQADVNKLYLRFNFYTWAARAYTWY HLA-C*04:62,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:63,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:64,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:65,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:66,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:67,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:68,YSAGYREKYRQADVNKLYLRFNFYTWAAQAYTWY HLA-C*04:69,YSAGYGEKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*04:70,YSAGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*05:01,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:03,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:04,YYAGYREKYRQTDVNKLYLRYDSYTWAERAYTWY HLA-C*05:05,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:06,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:08,YYAGYREKYRQTDVNKLYLRYNFYTWAEWAYTWY HLA-C*05:09,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:10,YYAGYREKYRQTDVNKLYIRYNFYTWAERAYTWY HLA-C*05:11,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYTWY HLA-C*05:12,YYAGYREKYRQTDVNKLYLRYNFYTWAVRAYTWY HLA-C*05:13,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:14,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:15,YYAGYWEKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:16,YYAGYREKYRQTDVNKLYLWYNFYTWAERAYTWY HLA-C*05:17,YYAGYREKYRQTDVNKLYLRYNFYTWAALAYTWY HLA-C*05:18,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:19,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:20,YYAGYREKYRQTDVNNLYLRYNFYTWAERAYTWY HLA-C*05:21,YYAGYREKYRQTDVNKLHLRYNFYTWAERAYTWY HLA-C*05:22,YYAGYREKYRQTDVNKLYLRYDFYTWAERAYTWY HLA-C*05:23,YYAGYREKYRQTDVNKLYLRYNFYTLAERAYTWY HLA-C*05:24,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:25,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:26,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:27,YYAGYREKYRQTDVNKLYLRYNFYTWAELAYLWY HLA-C*05:28,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:29,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:30,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:31,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:32,YYAGYREKYRQTDVNRLYLRYNFYTWAERAYTWY HLA-C*05:33,YYAGCREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:34,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:35,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:36,YYAGYRENYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:37,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:38,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:39,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYLWY HLA-C*05:40,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:41,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:42,YYAGYREKYRQADVNKLYLRYNFYTWAERAYTWY HLA-C*05:43,YDAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:44,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*05:45,YYAGYREKYRQTDVNKLYLRYNFYTWAERAYTWY HLA-C*06:02,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:03,YYSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:04,YDSGYREKYRQADVNKLYLWYDSYTWAELAYTWY HLA-C*06:05,YDSGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*06:06,YDSGYREKYRQADVNKLYLWYDSYTWAERAYTWY HLA-C*06:07,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:08,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYEWY HLA-C*06:09,YDSGYREKYRQADVNKLYLWYNFYTWAEWAYTWY HLA-C*06:10,YDPGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:11,YDSGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*06:12,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:13,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:14,YDSGYREKYRQADVNKLYIWYDSYTWAEWAYTWY HLA-C*06:15,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:17,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:18,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:19,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:20,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:21,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:22,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:23,YDSGYREKYRQADVNKLYLWCDSYTWAEWAYTWY HLA-C*06:24,YDSGYREKYRQADVNKLYLWYDSYTWAEWAHTWY HLA-C*06:25,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:26,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:27,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:28,YDAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:29,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:30,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:31,YDSGYREKYRQADVNKLYLWYDSYTWAAWAYTWY HLA-C*06:32,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:33,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:34,YDSGYREKYRQADVNKLYLWYDFYTWAEWAYTWY HLA-C*06:35,YDSGYREKYRQADVNKLYIRSDSYTWAEWAYTWY HLA-C*06:36,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:37,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:38,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:39,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:40,YDSGYREKYRQADVNKLYLWYDSYTWAEWTYTWY HLA-C*06:41,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:42,YDSGYREKYRQADVNKLYLWYDSYTRAEWAYTWY HLA-C*06:43,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*06:44,YDSGYRENYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*06:45,YDSGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*07:01,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:02,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:03,YDSGYREKYRQADVSNLYLRSDSYTWAALAYLWY HLA-C*07:04,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:05,YDSGYREKYRQADVSNLYLNYDSYTLAALAYTWY HLA-C*07:06,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:07,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:08,YDSGYREKYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:09,YDSGYRENYRQADVNKLYLRYDSYTLAALAYTWY HLA-C*07:10,YDSGYREKYRQADVSNLYIRSDSYTLAALAYTWY HLA-C*07:11,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:12,YDSGYREKYRQADVSNLYFRYDFYTWAADAYTWY HLA-C*07:13,YDSGYREKYRQADVSNLYLRSDFYTLAALAYTWY HLA-C*07:14,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:15,YDSGYREKYRQADVSNLYLRSDSYTLAALAYEWY HLA-C*07:16,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:17,YDSGYREKYRQADVSNLYLRSDSYTWAALAYTWY HLA-C*07:18,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:19,YDSGYRENYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:20,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:21,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:22,YDSGYRENYRQADVSNLYLRYDSYTLAAWAYTWY HLA-C*07:23,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:24,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:25,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:26,YYSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:27,YDSGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:28,YDSGYRENYRQADVSNLYLRYNFYTLAALAYTWY HLA-C*07:29,YDSGYREKYRQADVSNLYLRSDYYTLAALAYTWY HLA-C*07:30,YDSGYRENYRQADVSNLYLRYDSYTLAGLAYTWY HLA-C*07:31,YDSGYREKYRQADVSNLYLWYDSYTLAALAYTWY HLA-C*07:35,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:36,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:37,YDSGYREKYRQADVSNLYLRSDSYTLAARAYTWY HLA-C*07:38,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:39,YDSGYREKYRQTDVSNLYLRSDSYTLAALAYTWY HLA-C*07:40,YDSGYRENYRQTDVSNLYLRYDSYTLAALAYTWY HLA-C*07:41,YDSGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*07:42,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:43,YDSGYREKYRQADVSNLYIRYDSYTLAALAYTWY HLA-C*07:44,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:45,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:46,YDSEYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:47,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:48,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:49,YDSGYREKYRQADVNNLYLRSDSYTLAALAYTWY HLA-C*07:50,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:51,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:52,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:53,YDSGYRENYRQADVSNLYLRYDSYTLAAQAYTWY HLA-C*07:54,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:56,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:57,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:58,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:59,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:60,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:62,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:63,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:64,YSAGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:65,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:66,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:67,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:68,YDSGYREKYRQADVSNLYLRSDSYTLAADAYTWY HLA-C*07:69,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:70,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:71,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:72,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:73,YDAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:74,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:75,YDSGYREKYRQADVSNLHLRSDSYTLAALAYTWY HLA-C*07:76,YDSGYREKYRQADVNKLYLRSDSYTLAALAYTWY HLA-C*07:77,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:78,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:79,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:80,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:81,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:82,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:83,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:84,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:85,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:86,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:87,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:88,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:89,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:90,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:91,YDSGYRENYRQADVSNLYLRYDSYTLTALAYTWY HLA-C*07:92,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:93,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:94,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:95,YDSGYRENYRQADVSNLYLRYDSYTLAVLAYTWY HLA-C*07:96,YYAGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:97,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:99,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:100,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:101,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:102,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:103,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:105,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:106,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:107,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:108,YDSGYRENYRQADVSNLYLRFDSYTLAALAYTWY HLA-C*07:109,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:110,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:111,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:112,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:113,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:114,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:115,YDSGYRENYRQADVSDLYLRYDSYTLAALAYTWY HLA-C*07:116,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:117,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:118,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:119,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:120,YDSGYRENYRQADVSNLYLRYDSYTLAALAYPWY HLA-C*07:122,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:123,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:124,YDSGYRENYRQADESNLYLRYDSYTLAALAYTWY HLA-C*07:125,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:126,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:127,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:128,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:129,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:130,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:131,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:132,DDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:133,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:134,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:135,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:136,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:137,YDSGYREKYRQADVSNLYLRSDSYTLAALTYTWY HLA-C*07:138,YDSGYREKYRQADVSNLYLRSDSYTLAAWAYTWY HLA-C*07:139,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:140,YDSGYRENYRQADVSNLYLRYDSYTWAVDAYTWY HLA-C*07:141,YDSGYRENYRQADVSNLYLRYDSYTWAALAYTWY HLA-C*07:142,YDSGYREKYRQADVSNLYFRYDFYTLAADAYTWY HLA-C*07:143,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:144,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:145,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:146,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:147,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*07:148,YDSGYRENYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*07:149,YDSGYREKYRQADVSNLYLRSDSYTLAALAYTWY HLA-C*08:01,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:02,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:03,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:04,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:05,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:06,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYAWY HLA-C*08:07,YYAGYREKYRQTDVSNLYLRYNFYTLAERAYTWY HLA-C*08:08,YYAGYREKYRQTDVSNLYLSYNFYTWATLAYTWY HLA-C*08:09,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:10,YYAGYREKYRQTDVNKLYLRYNFYTWATLAYTWY HLA-C*08:11,YYAGYREKYRQTDVSNLYLRYDSYTWATLAYTWY HLA-C*08:12,YYAGYREKYRQTDVSNLYLWYNFYTWAERAYTWY HLA-C*08:13,YYAGYREKYRQTDVSNLYLRYNFYTWAELAYTWY HLA-C*08:14,YYSGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:15,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:16,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:17,YYAGYREKYCQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:18,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:19,YYAGYREKYRQTDVSNLYLRFNFYTWAERAYTWY HLA-C*08:20,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:21,YYAGYREKYRQADVSNLYLRYNFYTWATLAYTWY HLA-C*08:22,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:23,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:24,YYAGYREKYRQTDVSNLYLRYNFYTWATLAYTWY HLA-C*08:25,YYAGYREKYRQADVSNLYLRYNFYTWAERAYTWY HLA-C*08:27,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:28,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:29,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYTWY HLA-C*08:30,YYAGYREKYRQTDVSNLYLRYNFYTWPERAYTWY HLA-C*08:31,YYAGYREKYRQTDVSNLYLRYNFYTWAEWAYEWY HLA-C*08:32,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:33,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:34,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*08:35,YYAGYREKYRQTDVSNLYLRYNFYTWAERAYTWY HLA-C*12:02,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:03,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:04,YYAGYREKYRQADVNKLYLWYDSYTWAEWAYTWY HLA-C*12:05,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:06,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:07,YYAGYREKYRQADVGNLYLWYDSYTWAEWAYTWY HLA-C*12:08,YYAGYRENYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:09,YYAGYREKYRQTDVNKLYLWYDSYTWAERAYTWY HLA-C*12:10,YYAGYREKYRQADVSNLYLRFDSYTWAEWAYTWY HLA-C*12:11,YYAGYREKYRQADVSNLYLWSDSYTWAEWAYTWY HLA-C*12:12,YYAGYREKYRQADESNLYLWYDSYTWAEWAYTWY HLA-C*12:13,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:14,YYAGYREKYRQADVSNLYLRYDSYTLAALAYTWY HLA-C*12:15,YYAGYREKYRQADVSNLYLWYDLYTWAEWAYTWY HLA-C*12:16,YDSGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:17,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:18,YYAGYREKYRQADVSNLYLRYDSYTWAELAYTWY HLA-C*12:19,YYAGYREKYRQADVSNLYLWYDSYTWAECAYTWY HLA-C*12:20,YYAGYREKYRQADVSNLYLWYDSYTWAELAYTWY HLA-C*12:21,YYAGYREKYRQTDVNKLYLRYDSYTWAEWAYTWY HLA-C*12:22,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:23,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:24,YYAGYREKYRQADVSNLYLWYDSYTWAERAYTWY HLA-C*12:25,YYAGYPEKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:26,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:27,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:28,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:29,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:30,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:31,YYAGYREKYRQADVSNLYLWYNFYTWAEWAYTWY HLA-C*12:32,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:33,YYAGYREKYRQTDVNKLYLWYDSYTWAEWAYTWY HLA-C*12:34,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:35,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:36,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:37,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:38,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:40,YYAGYREKYRQADVSNLYLRYDSYTWAEWAYTWY HLA-C*12:41,YYAGYREKYRQADVNKLYLRYDSYTWAEWAYTWY HLA-C*12:43,YYAGYREKYRQADVSNLYLWYDSYTWAEWAYTWY HLA-C*12:44,YYAGYREKYRQADVSNLYIRYDSYTWAEWAYTWY HLA-C*14:02,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:03,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:04,YSAGYREKYRQADVNNLYLWFDSYTWAERAYTWY HLA-C*14:05,YSAGYREKYRQTDVSNLYLWYDSYTWAERAYTWY HLA-C*14:06,YSAGYREKYRQTDVSNLYLWFDSYTWAELAYTWY HLA-C*14:08,YSAGYREKYRQTDVSNLYPWFDSYTWAERAYTWY HLA-C*14:09,YSAGYREKYRQTDVSNLYLRYDSYTWAERAYTWY HLA-C*14:10,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:11,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:12,YSAGYREKYRQTDVNKLYLWFDSYTWAERAYTWY HLA-C*14:13,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:14,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:15,YSAGYREKYRQTDVSNLYLWFDSYTWAALAYTWY HLA-C*14:16,YSAGYREKYRQTDVSNLYLWFDSYTWAEWAYTWY HLA-C*14:17,YSAGYREKYRQTDVSNLYLWFDSYTLAARAYTWY HLA-C*14:18,YSSGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:19,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYTWY HLA-C*14:20,YSAGYREKYRQTDVSNLYLWFDSYTWAERAYLWY HLA-C*15:02,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:03,YYAGYRENYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:04,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:05,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:06,YYAGYRENYRQTDVNKLYIRYDYYTWAELAYTWY HLA-C*15:07,YYAGYRENYRQTDVSNLYIRYDLYTWAELAYTWY HLA-C*15:08,YYAGYRENYRQTDVNKLYIRYDLYTWAERAYTWY HLA-C*15:09,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:10,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:11,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:12,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:13,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:15,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYLWY HLA-C*15:16,YYAGYREKYRQADVNKLYIRYDLYTWAELAYTWY HLA-C*15:17,YYAGYREKYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:18,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:19,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:20,YYAGYREKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:21,YYAGYRENYRQTDVSKLYIRYDLYTWAELAYTWY HLA-C*15:22,YYAGYRENYRQTDVNKLYLRYDFYTWAELAYTWY HLA-C*15:23,YDAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:24,YYAGYRENYRQTDVNKLYIRYNYYTWAELAYTWY HLA-C*15:25,YYAGYREKYRQADVSNLYIRYNFYTWAEDAYTSY HLA-C*15:26,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:27,YYAGYRNKYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:28,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:29,YYAGYRENYRQTDVNKLYIRYDFYTWAELAYTWY HLA-C*15:30,YYAGYRENYRQTDVNKLYIRYDSYTWAELAYTWY HLA-C*15:31,YYAGYRENYRQTDVNKLYIRYDLYTWAALAYTWY HLA-C*15:33,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:34,YYAGYRENYRQTDVNKLYIRYDLYTWAELAYTWY HLA-C*15:35,YYAGYRENYRQTDVNKLHIRYDLYTWAELAYTWY HLA-C*16:01,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:02,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:04,YYAGYREKYRQTDVSNLYLWYDSYTWAAWAYTWY HLA-C*16:06,YYAGYREKYRQTDVSNLYLRSDSYTWAAQAYTWY HLA-C*16:07,YYAGYREKYRQTDVSNLYLRYDSYTWAAQAYTWY HLA-C*16:08,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:09,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:10,YYAGYREKYRQTDVSNLYLWYDDYTWAAQAYTWY HLA-C*16:11,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:12,YYAGYGEKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:13,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:14,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:15,YYAGYREKYRQADVSNLYLWYDSYTWAAQAYTWY HLA-C*16:17,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:18,YYAGYREKYRQTDVSNLYLWCDSYTWAAQAYTWY HLA-C*16:19,YYAGYREKYRQTDVNKLYLWYDSYTWAAQAYTWY HLA-C*16:20,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:21,YDAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:22,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:23,YYAGYREKYRQTDVSNLYLWFDSYTWAAQAYTWY HLA-C*16:24,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*16:25,YYAGYREKYRQADVNKLYLWYDSYTWAAQAYTWY HLA-C*16:26,YYAGYREKYRQTDVSNLYLWYDSYTWAAQAYTWY HLA-C*17:01,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:02,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:03,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:04,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:05,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:06,YYAGYREKYRQADVNKLYIRYNFYSLAELAYEWY HLA-C*17:07,YYAGYREKYRQADVNKLYIRYNFYSLAELAYLWY HLA-C*18:01,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:02,YDSGYREKYRQADVNKLYLRFNFYTWAERAYTWY HLA-C*18:03,YDSGYREKYRQADVNKLYLRFNFYTWAEWAYEWY ================================================ FILE: downloads-generation/models_class1_unselected_with_mass_spec/generate_hyperparameters.py ================================================ """ Generate grid of hyperparameters """ from sys import stdout from copy import deepcopy from yaml import dump base_hyperparameters = { ########################################## # ENSEMBLE SIZE ########################################## "n_models": 4, ########################################## # OPTIMIZATION ########################################## "max_epochs": 500, "patience": 20, "early_stopping": True, "validation_split": 0.1, "minibatch_size": None, "loss": "custom:mse_with_inequalities", ########################################## # RANDOM NEGATIVE PEPTIDES ########################################## "random_negative_rate": 0.1, "random_negative_constant": 25, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, ########################################## # PEPTIDE REPRESENTATION ########################################## # One of "one-hot", "embedding", or "BLOSUM62". "peptide_amino_acid_encoding": "BLOSUM62", "use_embedding": False, # maintained for backward compatability "embedding_output_dim": 8, # only used if using embedding "kmer_size": 15, ########################################## # NEURAL NETWORK ARCHITECTURE ########################################## "locally_connected_layers": [ { "filters": 8, "activation": "tanh", "kernel_size": 3 } ], "activation": "tanh", "output_activation": "sigmoid", "layer_sizes": [16], "dense_layer_l1_regularization": None, "batch_normalization": False, "dropout_probability": 0.0, ########################################## # TRAINING Data ########################################## "train_data": {"subset": "all", "pretrain_min_points": 1000}, } grid = [] for train_subset in ["all", "quantitative"]: for minibatch_size in [128]: for dense_layer_size in [8, 16, 32, 64]: for l1 in [0.0, 0.001]: for num_lc in [0, 1, 2]: for lc_kernel_size in [3, 5]: new = deepcopy(base_hyperparameters) new["minibatch_size"] = minibatch_size new["train_data"]["subset"] = train_subset new["layer_sizes"] = [dense_layer_size] new["dense_layer_l1_regularization"] = l1 (lc_layer,) = new["locally_connected_layers"] lc_layer['kernel_size'] = lc_kernel_size if num_lc == 0: new["locally_connected_layers"] = [] elif num_lc == 1: new["locally_connected_layers"] = [lc_layer] elif num_lc == 2: new["locally_connected_layers"] = [lc_layer, deepcopy(lc_layer)] if not grid or new not in grid: grid.append(new) dump(grid, stdout) ================================================ FILE: downloads-generation/random_peptide_predictions/GENERATE.sh ================================================ #!/bin/bash # # Generate predictions for random peptides. Used for pre-training some models. # set -e set -x DOWNLOAD_NAME=random_peptide_predictions SCRATCH_DIR=${TMPDIR-/tmp}/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") export PYTHONUNBUFFERED=1 mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" # Send stdout and stderr to a logfile included with the archive. exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date pip freeze git status cd $SCRATCH_DIR/$DOWNLOAD_NAME cp $SCRIPT_DIR/random_predictions.py . cp $SCRIPT_ABSOLUTE_PATH . time python random_predictions.py \ --num-peptides 5000000 \ --models "$(mhcflurry-downloads path models_class1_selected_no_mass_spec)/models" \ --out predictions.csv bzip2 predictions.csv bzip2 LOG.txt tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" ================================================ FILE: downloads-generation/random_peptide_predictions/random_predictions.py ================================================ """ Generate predictions for random peptides. """ from __future__ import print_function import sys import argparse import time import math import pandas import mhcflurry from mhcflurry.common import random_peptides parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument("--models", required=True) parser.add_argument("--num-peptides", type=int) parser.add_argument("--out", required=True) parser.add_argument("--chunksize", type=int, default=10000) def run(): args = parser.parse_args(sys.argv[1:]) print(args) predictor = mhcflurry.Class1AffinityPredictor.load(args.models) alleles = pandas.Series(predictor.supported_alleles) # Clear the file pandas.DataFrame(columns=alleles).to_csv(args.out, index=True) (min_length, max_length) = predictor.supported_peptide_lengths peptides_per_length = int( math.ceil(args.chunksize / (max_length - min_length))) peptides_written = 0 i = 0 while peptides_written < args.num_peptides: print("Chunk %d / %d" % ( i + 1, math.ceil(args.num_peptides / args.chunksize))) start = time.time() peptides = [] for l in range(8, 16): peptides.extend(random_peptides(peptides_per_length, length=l)) peptides = pandas.Series(peptides).sample( n=min(args.chunksize, args.num_peptides - peptides_written)).values encodable_peptides = mhcflurry.encodable_sequences.EncodableSequences.create( peptides) df = pandas.DataFrame(index=peptides) for allele in alleles: df[allele] = predictor.predict(encodable_peptides, allele=allele) df.to_csv( args.out, index=True, mode='a', header=False, float_format='%.1f') print("Wrote: %s [%0.2f sec]" % (args.out, time.time() - start)) i += 1 peptides_written += len(peptides) print("Done.") if __name__ == '__main__': run() ================================================ FILE: lint.sh ================================================ #!/bin/bash set -o errexit # Lint using ruff (fast Python linter) # Run from project root directory echo "Running ruff linter..." ruff check mhcflurry/ test/ --output-format=concise echo "Passes ruff check" ================================================ FILE: mhcflurry/__init__.py ================================================ """ Class I MHC ligand prediction package """ from .class1_affinity_predictor import Class1AffinityPredictor from .class1_neural_network import Class1NeuralNetwork from .class1_processing_predictor import Class1ProcessingPredictor from .class1_processing_neural_network import Class1ProcessingNeuralNetwork from .class1_presentation_predictor import Class1PresentationPredictor from .version import __version__ __all__ = [ "__version__", "Class1AffinityPredictor", "Class1NeuralNetwork", "Class1ProcessingPredictor", "Class1ProcessingNeuralNetwork", "Class1PresentationPredictor", ] ================================================ FILE: mhcflurry/allele_encoding.py ================================================ import pandas from . import amino_acid class AlleleEncoding(object): def __init__(self, alleles=None, allele_to_sequence=None, borrow_from=None): """ A place to cache encodings for a sequence of alleles. We frequently work with alleles by integer indices, for example as inputs to neural networks. This class is used to map allele names to integer indices in a consistent way by keeping track of the universe of alleles under use, i.e. a distinction is made between the universe of supported alleles (what's in `allele_to_sequence`) and the actual set of alleles used for some task (what's in `alleles`). Parameters ---------- alleles : list of string Allele names. If any allele is None instead of string, it will be mapped to the special index value -1. allele_to_sequence : dict of str -> str Allele name to amino acid sequence borrow_from : AlleleEncoding, optional If specified, do not specify allele_to_sequence. The sequences from the provided instance are used. This guarantees that the mappings from allele to index and from allele to sequence are the same between the instances. """ if alleles is not None: alleles = pandas.Series(alleles) self.borrow_from = borrow_from self.allele_to_sequence = allele_to_sequence if self.borrow_from is None: assert allele_to_sequence is not None all_alleles = ( sorted(allele_to_sequence)) self.allele_to_index = dict( (allele, i) for (i, allele) in enumerate([None] + all_alleles)) unpadded = pandas.Series([ allele_to_sequence[a] if a is not None else "" for a in [None] + all_alleles ], index=[None] + all_alleles) self.sequences = unpadded.str.pad( unpadded.str.len().max(), fillchar="X") else: assert allele_to_sequence is None self.allele_to_index = borrow_from.allele_to_index self.sequences = borrow_from.sequences self.allele_to_sequence = borrow_from.allele_to_sequence if alleles is not None: assert all( allele in self.allele_to_index for allele in alleles),\ "Missing alleles: " + " ".join(set( a for a in alleles if a not in self.allele_to_index)) self.indices = alleles.map(self.allele_to_index) assert not self.indices.isnull().any() self.alleles = alleles else: self.indices = None self.alleles = None self.encoding_cache = {} def compact(self): """ Return a new AlleleEncoding in which the universe of supported alleles is only the alleles actually used. Returns ------- AlleleEncoding """ return AlleleEncoding( alleles=self.alleles, allele_to_sequence=dict( (allele, self.allele_to_sequence[allele]) for allele in self.alleles.unique() if allele is not None)) def allele_representations(self, encoding_name): """ Encode the universe of supported allele sequences to a matrix. Parameters ---------- encoding_name : string How to represent amino acids. Valid names are "BLOSUM62" or "one-hot". See `amino_acid.ENCODING_DATA_FRAMES`. Returns ------- numpy.array of shape (num alleles in universe, sequence length, vector size) where vector size is usually 21 (20 amino acids + X character) """ if self.borrow_from is not None: return self.borrow_from.allele_representations(encoding_name) cache_key = ( "allele_representations", encoding_name) if cache_key not in self.encoding_cache: index_encoded_matrix = amino_acid.index_encoding( self.sequences.values, amino_acid.AMINO_ACID_INDEX) vector_encoded = amino_acid.fixed_vectors_encoding( index_encoded_matrix, amino_acid.ENCODING_DATA_FRAMES[encoding_name]) self.encoding_cache[cache_key] = vector_encoded return self.encoding_cache[cache_key] def fixed_length_vector_encoded_sequences(self, encoding_name): """ Encode allele sequences (not the universe of alleles) to a matrix. Parameters ---------- encoding_name : string How to represent amino acids. Valid names are "BLOSUM62" or "one-hot". See `amino_acid.ENCODING_DATA_FRAMES`. Returns ------- numpy.array with shape: (num alleles, sequence length, vector size) where vector size is usually 21 (20 amino acids + X character) """ cache_key = ( "fixed_length_vector_encoding", encoding_name) if cache_key not in self.encoding_cache: vector_encoded = self.allele_representations(encoding_name) result = vector_encoded[self.indices] self.encoding_cache[cache_key] = result return self.encoding_cache[cache_key] ================================================ FILE: mhcflurry/amino_acid.py ================================================ """ Functions for encoding fixed length sequences of amino acids into various vector representations, such as one-hot and BLOSUM62. """ import collections import warnings from copy import copy from io import StringIO import pandas COMMON_AMINO_ACIDS = collections.OrderedDict(sorted({ "A": "Alanine", "R": "Arginine", "N": "Asparagine", "D": "Aspartic Acid", "C": "Cysteine", "E": "Glutamic Acid", "Q": "Glutamine", "G": "Glycine", "H": "Histidine", "I": "Isoleucine", "L": "Leucine", "K": "Lysine", "M": "Methionine", "F": "Phenylalanine", "P": "Proline", "S": "Serine", "T": "Threonine", "W": "Tryptophan", "Y": "Tyrosine", "V": "Valine", }.items())) COMMON_AMINO_ACIDS_WITH_UNKNOWN = copy(COMMON_AMINO_ACIDS) COMMON_AMINO_ACIDS_WITH_UNKNOWN["X"] = "Unknown" AMINO_ACID_INDEX = dict( (letter, i) for (i, letter) in enumerate(COMMON_AMINO_ACIDS_WITH_UNKNOWN)) for (letter, i) in list(AMINO_ACID_INDEX.items()): AMINO_ACID_INDEX[letter.lower()] = i # Support lower-case as well. AMINO_ACIDS = list(COMMON_AMINO_ACIDS_WITH_UNKNOWN.keys()) BLOSUM62_MATRIX = pandas.read_csv(StringIO(""" A R N D C Q E G H I L K M F P S T W Y V X A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 0 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 0 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 0 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 0 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 0 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 0 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 0 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 0 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 0 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 0 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 0 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 0 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 0 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 0 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 0 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 """), sep=r'\s+').loc[AMINO_ACIDS, AMINO_ACIDS].astype("int8") assert (BLOSUM62_MATRIX == BLOSUM62_MATRIX.T).all().all() ENCODING_DATA_FRAMES = { "BLOSUM62": BLOSUM62_MATRIX, "one-hot": pandas.DataFrame([ [1 if i == j else 0 for i in range(len(AMINO_ACIDS))] for j in range(len(AMINO_ACIDS)) ], index=AMINO_ACIDS, columns=AMINO_ACIDS) } def available_vector_encodings(): """ Return list of supported amino acid vector encodings. Returns ------- list of string """ return list(ENCODING_DATA_FRAMES) def vector_encoding_length(name): """ Return the length of the given vector encoding. Parameters ---------- name : string Returns ------- int """ return ENCODING_DATA_FRAMES[name].shape[1] def index_encoding(sequences, letter_to_index_dict): """ Encode a sequence of same-length strings to a matrix of integers of the same shape. The map from characters to integers is given by `letter_to_index_dict`. Given a sequence of `n` strings all of length `k`, return a `k * n` array where the (`i`, `j`)th element is `letter_to_index_dict[sequence[i][j]]`. Parameters ---------- sequences : list of length n of strings of length k letter_to_index_dict : dict : string -> int Returns ------- numpy.array of integers with shape (`k`, `n`) """ df = pandas.DataFrame(iter(s) for s in sequences) with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=FutureWarning, message=".*Downcasting.*") warnings.filterwarnings("ignore", category=DeprecationWarning, message=".*no_silent_downcasting.*") result = df.replace(letter_to_index_dict).infer_objects() return result.values def fixed_vectors_encoding(index_encoded_sequences, letter_to_vector_df): """ Given a `n` x `k` matrix of integers such as that returned by `index_encoding()` and a dataframe mapping each index to an arbitrary vector, return a `n * k * m` array where the (`i`, `j`)'th element is `letter_to_vector_df.iloc[sequence[i][j]]`. The dataframe index and columns names are ignored here; the indexing is done entirely by integer position in the dataframe. Parameters ---------- index_encoded_sequences : `n` x `k` array of integers letter_to_vector_df : pandas.DataFrame of shape (`alphabet size`, `m`) Returns ------- numpy.array of integers with shape (`n`, `k`, `m`) """ (num_sequences, sequence_length) = index_encoded_sequences.shape target_shape = ( num_sequences, sequence_length, letter_to_vector_df.shape[0]) result = letter_to_vector_df.iloc[ index_encoded_sequences.reshape((-1,)) # reshape() avoids copy ].values.reshape(target_shape) return result ================================================ FILE: mhcflurry/calibrate_percentile_ranks_command.py ================================================ """ Calibrate percentile ranks for models. Runs in-place. """ import argparse import os import signal import sys import time import traceback import collections from functools import partial import pandas import numpy import tqdm # progress bar from .class1_affinity_predictor import Class1AffinityPredictor from .class1_presentation_predictor import Class1PresentationPredictor from .common import normalize_allele_name from .encodable_sequences import EncodableSequences from .common import configure_logging, random_peptides, amino_acid_distribution from .local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from .cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--predictor-kind", choices=("class1_affinity", "class1_presentation"), default="class1_affinity", help="Type of predictor to calibrate") parser.add_argument( "--models-dir", metavar="DIR", required=True, help="Directory to read and write models") parser.add_argument( "--allele", default=None, nargs="+", help="Alleles to calibrate percentile ranks for. If not specified all " "alleles are used") parser.add_argument( "--match-amino-acid-distribution-data", help="Sample random peptides from the amino acid distribution of the " "peptides listed in the supplied CSV file, which must have a 'peptide' " "column. If not specified a uniform distribution is used.") parser.add_argument( "--alleles-file", default=None, help="Use alleles in supplied CSV file, which must have an 'allele' column.") parser.add_argument( "--num-peptides-per-length", type=int, metavar="N", default=int(1e5), help="Number of peptides per length to use to calibrate percent ranks. " "Default: %(default)s.") parser.add_argument( "--num-genotypes", type=int, metavar="N", default=25, help="Used when calibrrating a presentation predictor. Number of genotypes" "to sample") parser.add_argument( "--alleles-per-genotype", type=int, metavar="N", default=6, help="Used when calibrating a presentation predictor. Number of alleles " "per genotype. Use 1 to calibrate for single alleles. Default: %(default)s") parser.add_argument( "--motif-summary", default=False, action="store_true", help="Calculate motifs and length preferences for each allele") parser.add_argument( "--summary-top-peptide-fraction", default=[0.0001, 0.001, 0.01, 0.1, 1.0], nargs="+", type=float, metavar="X", help="The top X fraction of predictions (i.e. tightest binders) to use to " "generate motifs and length preferences. Default: %(default)s") parser.add_argument( "--length-range", default=(8, 15), type=int, nargs=2, help="Min and max peptide length to calibrate, inclusive. " "Default: %(default)s") parser.add_argument( "--prediction-batch-size", type=int, default=4096, help="Batch size for predictions") parser.add_argument( "--alleles-per-work-chunk", type=int, metavar="N", default=1, help="Number of alleles per work chunk. Default: %(default)s.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) args.models_dir = os.path.abspath(args.models_dir) configure_logging(verbose=args.verbosity > 1) aa_distribution = None if args.match_amino_acid_distribution_data: distribution_peptides = pandas.read_csv( args.match_amino_acid_distribution_data).peptide.unique() distribution_peptides = [ x for x in distribution_peptides if 'X' not in x and 'B' not in x and 'U' not in x ] aa_distribution = amino_acid_distribution(distribution_peptides) print("Using amino acid distribution:") print(aa_distribution) start = time.time() peptides = [] lengths = range(args.length_range[0], args.length_range[1] + 1) for length in lengths: peptides.extend( random_peptides( args.num_peptides_per_length, length, distribution=aa_distribution)) print("Done generating peptides in %0.2f sec." % (time.time() - start)) if args.predictor_kind == "class1_affinity": return run_class1_affinity_predictor(args, peptides) elif args.predictor_kind == "class1_presentation": return run_class1_presentation_predictor(args, peptides) else: raise ValueError("Unsupported kind %s" % args.predictor_kind) def run_class1_presentation_predictor(args, peptides): # This will trigger a Keras import - will break local parallelism. predictor = Class1PresentationPredictor.load(args.models_dir) if args.allele: alleles = [normalize_allele_name(a) for a in args.allele] elif args.alleles_file: alleles = pandas.read_csv(args.alleles_file).allele.unique() else: alleles = predictor.supported_alleles print("Num alleles", len(alleles)) genotypes = {} if args.alleles_per_genotype == 6: gene_to_alleles = collections.defaultdict(list) for a in alleles: for gene in ["A", "B", "C"]: if a.startswith("HLA-%s" % gene): gene_to_alleles[gene].append(a) for _ in range(args.num_genotypes): genotype = [] for gene in ["A", "A", "B", "B", "C", "C"]: genotype.append(numpy.random.choice(gene_to_alleles[gene])) genotypes[",".join(genotype)] = genotype elif args.alleles_per_genotype == 1: for _ in range(args.num_genotypes): genotype = [numpy.random.choice(alleles)] genotypes[",".join(genotype)] = genotype else: raise ValueError("Alleles per genotype must be 6 or 1") print("Sampled genotypes: ", list(genotypes)) print("Num peptides: ", len(peptides)) start = time.time() print("Generating predictions") predictions_df = predictor.predict( peptides=peptides, alleles=genotypes) print("Finished in %0.2f sec." % (time.time() - start)) print(predictions_df) print("Calibrating ranks") scores = predictions_df.presentation_score.values predictor.calibrate_percentile_ranks(scores) print("Done. Saving.") predictor.save( args.models_dir, write_affinity_predictor=False, write_processing_predictor=False, write_weights=False, write_percent_ranks=True, write_info=False, write_metdata=False) print("Wrote predictor to: %s" % args.models_dir) def run_class1_affinity_predictor(args, peptides): global GLOBAL_DATA # Load with optimization_level=0 so we can optimize per-worker later. predictor = Class1AffinityPredictor.load( args.models_dir, optimization_level=0, ) if args.allele: alleles = [normalize_allele_name(a) for a in args.allele] elif args.alleles_file: alleles = pandas.read_csv(args.alleles_file).allele.unique() else: alleles = predictor.supported_alleles allele_set = set(alleles) if predictor.allele_to_sequence: # Remove alleles that have the same sequence. new_allele_set = set() sequence_to_allele = collections.defaultdict(set) for allele in list(allele_set): sequence_to_allele[predictor.allele_to_sequence[allele]].add(allele) for equivalent_alleles in sequence_to_allele.values(): equivalent_alleles = sorted(equivalent_alleles) keep = equivalent_alleles.pop(0) new_allele_set.add(keep) print( "Sequence comparison reduced num alleles from", len(allele_set), "to", len(new_allele_set)) allele_set = new_allele_set alleles = sorted(allele_set) print("Percent rank calibration for %d alleles. " % (len(alleles))) print("Encoding %d peptides." % len(peptides)) start = time.time() encoded_peptides = EncodableSequences.create(peptides) del peptides # Now we encode the peptides for each neural network, so the encoding # becomes cached. for network in predictor.neural_networks: network.peptides_to_network_input(encoded_peptides) assert encoded_peptides.encoding_cache # must have cached the encoding print("Finished encoding peptides in %0.2f sec." % (time.time() - start)) # Store peptides in global variable so they are in shared memory # after fork, instead of needing to be pickled (when doing a parallel run). GLOBAL_DATA["calibration_peptides"] = encoded_peptides GLOBAL_DATA["predictor"] = predictor GLOBAL_DATA["args"] = { 'motif_summary': args.motif_summary, 'summary_top_peptide_fractions': args.summary_top_peptide_fraction, 'verbose': args.verbosity > 0, 'model_kwargs': { 'batch_size': args.prediction_batch_size, } } del encoded_peptides serial_run = not args.cluster_parallelism and args.num_jobs == 0 worker_pool = None start = time.time() work_items = [] for allele in alleles: if not work_items or len( work_items[-1]['alleles']) >= args.alleles_per_work_chunk: work_items.append({"alleles": []}) work_items[-1]['alleles'].append(allele) if serial_run: # Serial run print("Running in serial.") results = ( do_class1_affinity_calibrate_percentile_ranks(**item) for item in work_items) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=do_class1_affinity_calibrate_percentile_ranks, work_items=work_items, constant_data=GLOBAL_DATA, result_serialization_method="pickle", clear_constant_data=True) else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None for item in work_items: item['constant_data'] = GLOBAL_DATA results = worker_pool.imap_unordered( partial(call_wrapped_kwargs, do_class1_affinity_calibrate_percentile_ranks), work_items, chunksize=1) summary_results_lists = collections.defaultdict(list) for work_item in tqdm.tqdm(results, total=len(work_items)): for (transforms, summary_results) in work_item: predictor.allele_to_percent_rank_transform.update(transforms) if summary_results is not None: for (item, value) in summary_results.items(): summary_results_lists[item].append(value) print("Done calibrating %d alleles." % len(alleles)) if summary_results_lists: for (name, lst) in summary_results_lists.items(): df = pandas.concat(lst, ignore_index=True) predictor.metadata_dataframes[name] = df print("Including summary result: %s" % name) print(df) predictor.save(args.models_dir, model_names_to_write=[]) percent_rank_calibration_time = time.time() - start if worker_pool: worker_pool.close() worker_pool.join() print("Percent rank calibration time: %0.2f min." % ( percent_rank_calibration_time / 60.0)) print("Predictor written to: %s" % args.models_dir) def do_class1_affinity_calibrate_percentile_ranks( alleles, constant_data=GLOBAL_DATA): if 'predictor' not in constant_data: raise ValueError("No predictor provided: " + str(constant_data)) result_list = [] for (i, allele) in enumerate(alleles): print("Processing allele", i + 1, "of", len(alleles)) result_item = class1_affinity_calibrate_percentile_ranks( allele, constant_data['predictor'], peptides=constant_data['calibration_peptides'], **constant_data["args"]) result_list.append(result_item) return result_list def class1_affinity_calibrate_percentile_ranks( allele, predictor, peptides=None, motif_summary=False, summary_top_peptide_fractions=[0.001], verbose=False, model_kwargs={}): if verbose: print("Calibrating", allele) predictor.optimize() # since we loaded with optimization_level=0 start = time.time() summary_results = predictor.calibrate_percentile_ranks( peptides=peptides, alleles=[allele], motif_summary=motif_summary, summary_top_peptide_fractions=summary_top_peptide_fractions, verbose=verbose, model_kwargs=model_kwargs) if verbose: print("Done calibrating", allele, "in", time.time() - start, "sec") transforms = { allele: predictor.allele_to_percent_rank_transform[allele], } return (transforms, summary_results) if __name__ == '__main__': run() ================================================ FILE: mhcflurry/class1_affinity_predictor.py ================================================ import collections import hashlib import json import logging import time import warnings from os.path import join, exists, abspath from os import mkdir, environ from socket import gethostname from getpass import getuser from functools import partial import numpy import pandas from .class1_neural_network import Class1NeuralNetwork from .common import ( random_peptides, positional_frequency_matrix, normalize_allele_name ) from .downloads import get_default_class1_models_dir from .encodable_sequences import EncodableSequences from .percent_rank_transform import PercentRankTransform from .regression_target import to_ic50 from .version import __version__ from .ensemble_centrality import CENTRALITY_MEASURES from .allele_encoding import AlleleEncoding from .common import save_weights, load_weights # Default function for combining predictions across models in an ensemble. # See ensemble_centrality.py for other options. DEFAULT_CENTRALITY_MEASURE = "mean" # Any value > 0 will result in attempting to optimize models after loading. OPTIMIZATION_LEVEL = int(environ.get("MHCFLURRY_OPTIMIZATION_LEVEL", 1)) class Class1AffinityPredictor(object): """ High-level interface for peptide/MHC I binding affinity prediction. This class manages low-level `Class1NeuralNetwork` instances, each of which wraps a single PyTorch network. The purpose of `Class1AffinityPredictor` is to implement ensembles, handling of multiple alleles, and predictor loading and saving. It also provides a place to keep track of metadata like prediction histograms for percentile rank calibration. """ def __init__( self, allele_to_allele_specific_models=None, class1_pan_allele_models=None, allele_to_sequence=None, manifest_df=None, allele_to_percent_rank_transform=None, metadata_dataframes=None, provenance_string=None, optimization_info=None): """ Parameters ---------- allele_to_allele_specific_models : dict of string -> list of `Class1NeuralNetwork` Ensemble of single-allele models to use for each allele. class1_pan_allele_models : list of `Class1NeuralNetwork` Ensemble of pan-allele models. allele_to_sequence : dict of string -> string MHC allele name to fixed-length amino acid sequence (sometimes referred to as the pseudosequence). Required only if class1_pan_allele_models is specified. manifest_df : `pandas.DataFrame`, optional Must have columns: model_name, allele, config_json, model. Only required if you want to update an existing serialization of a Class1AffinityPredictor. Otherwise this dataframe will be generated automatically based on the supplied models. allele_to_percent_rank_transform : dict of string -> `PercentRankTransform`, optional `PercentRankTransform` instances to use for each allele metadata_dataframes : dict of string -> pandas.DataFrame, optional Optional additional dataframes to write to the models dir when save() is called. Useful for tracking provenance. provenance_string : string, optional Optional info string to use in __str__. optimization_info : dict, optional Dict describing any optimizations already performed on the model. The only currently supported optimization is to merge ensembles together into one PyTorch model. """ if allele_to_allele_specific_models is None: allele_to_allele_specific_models = {} if class1_pan_allele_models is None: class1_pan_allele_models = [] self.allele_to_sequence = ( dict(allele_to_sequence) if allele_to_sequence is not None else None) # make a copy self._master_allele_encoding = None if class1_pan_allele_models: assert self.allele_to_sequence self.allele_to_allele_specific_models = allele_to_allele_specific_models self.class1_pan_allele_models = class1_pan_allele_models self._manifest_df = manifest_df if not allele_to_percent_rank_transform: allele_to_percent_rank_transform = {} self.allele_to_percent_rank_transform = allele_to_percent_rank_transform self.metadata_dataframes = ( dict(metadata_dataframes) if metadata_dataframes else {}) self._cache = {} self.optimization_info = optimization_info if optimization_info else {} assert isinstance(self.allele_to_allele_specific_models, dict) assert isinstance(self.class1_pan_allele_models, list) self.provenance_string = provenance_string self.allele_to_canonical = {} # populated by load() @property def manifest_df(self): """ A pandas.DataFrame describing the models included in this predictor. Based on: - self.class1_pan_allele_models - self.allele_to_allele_specific_models Returns ------- pandas.DataFrame """ if self._manifest_df is None: rows = [] for (i, model) in enumerate(self.class1_pan_allele_models): rows.append(( self.model_name("pan-class1", i), "pan-class1", json.dumps(model.get_config()), model )) for (allele, models) in self.allele_to_allele_specific_models.items(): for (i, model) in enumerate(models): rows.append(( self.model_name(allele, i), allele, json.dumps(model.get_config()), model )) self._manifest_df = pandas.DataFrame( rows, columns=["model_name", "allele", "config_json", "model"]) return self._manifest_df def clear_cache(self): """ Clear values cached based on the neural networks in this predictor. Users should call this after mutating any of the following: - self.class1_pan_allele_models - self.allele_to_allele_specific_models - self.allele_to_sequence Methods that mutate these instance variables will call this method on their own if needed. """ self._cache.clear() self.provenance_string = None @property def neural_networks(self): """ List of the neural networks in the ensemble. Returns ------- list of `Class1NeuralNetwork` """ result = [] for models in self.allele_to_allele_specific_models.values(): result.extend(models) result.extend(self.class1_pan_allele_models) return result @classmethod def merge(cls, predictors): """ Merge the ensembles of two or more `Class1AffinityPredictor` instances. Note: the resulting merged predictor will NOT have calibrated percentile ranks. Call `calibrate_percentile_ranks` on it if these are needed. Parameters ---------- predictors : sequence of `Class1AffinityPredictor` Returns ------- `Class1AffinityPredictor` instance """ assert len(predictors) > 0 if len(predictors) == 1: return predictors[0] allele_to_allele_specific_models = collections.defaultdict(list) class1_pan_allele_models = [] allele_to_sequence = predictors[0].allele_to_sequence for predictor in predictors: for (allele, networks) in ( predictor.allele_to_allele_specific_models.items()): allele_to_allele_specific_models[allele].extend(networks) class1_pan_allele_models.extend( predictor.class1_pan_allele_models) return Class1AffinityPredictor( allele_to_allele_specific_models=allele_to_allele_specific_models, class1_pan_allele_models=class1_pan_allele_models, allele_to_sequence=allele_to_sequence ) def merge_in_place(self, others): """ Add the models present in other predictors into the current predictor. Parameters ---------- others : list of Class1AffinityPredictor Other predictors to merge into the current predictor. Returns ------- list of string : names of newly added models """ new_model_names = [] original_manifest = self.manifest_df new_manifest_rows = [] for predictor in others: for model in predictor.class1_pan_allele_models: model_name = self.model_name( "pan-class1", len(self.class1_pan_allele_models)) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("allele", "pan-class1"), ("config_json", json.dumps(model.get_config())), ("model", model), ])).to_frame().T new_manifest_rows.append(row) self.class1_pan_allele_models.append(model) new_model_names.append(model_name) for allele in predictor.allele_to_allele_specific_models: if allele not in self.allele_to_allele_specific_models: self.allele_to_allele_specific_models[allele] = [] current_models = self.allele_to_allele_specific_models[allele] for model in predictor.allele_to_allele_specific_models[allele]: model_name = self.model_name(allele, len(current_models)) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("allele", allele), ("config_json", json.dumps(model.get_config())), ("model", model), ])).to_frame().T new_manifest_rows.append(row) current_models.append(model) new_model_names.append(model_name) self._manifest_df = pandas.concat( [original_manifest] + new_manifest_rows, ignore_index=True) self.clear_cache() self.check_consistency() return new_model_names def canonicalize_allele_name(self, raw_name): """ Normalize an allele name and map it to the canonical pseudosequence key if possible. Tries without IMGT aliases first so that alleles like HLA-C*01:01 (which aliases map to C*01:02) resolve to their own pseudosequence when one exists. Parameters ---------- raw_name : str Returns ------- str """ # Try without aliases first — this matches pseudosequence keys # directly and avoids mhcgnomes alias remapping or Q/N annotations. if self.allele_to_sequence: no_alias = normalize_allele_name( raw_name, raise_on_error=False, use_allele_aliases=False) if no_alias is not None and no_alias in self.allele_to_sequence: return no_alias # Fall back to aliases and map through canonical lookup. normalized = normalize_allele_name(raw_name) return self.allele_to_canonical.get(normalized, normalized) @property def supported_alleles(self): """ Alleles for which predictions can be made. Returns ------- list of string """ if 'supported_alleles' not in self._cache: result = set(self.allele_to_allele_specific_models) if self.allele_to_sequence: result = result.union(self.allele_to_sequence) self._cache["supported_alleles"] = sorted(result) return self._cache["supported_alleles"] @property def supported_peptide_lengths(self): """ (minimum, maximum) lengths of peptides supported by *all models*, inclusive. Returns ------- (int, int) tuple """ if 'supported_peptide_lengths' not in self._cache: length_ranges = set( network.supported_peptide_lengths for network in self.neural_networks) result = ( max(lower for (lower, upper) in length_ranges), min(upper for (lower, upper) in length_ranges)) self._cache["supported_peptide_lengths"] = result return self._cache["supported_peptide_lengths"] def check_consistency(self): """ Verify that self.manifest_df is consistent with: - self.class1_pan_allele_models - self.allele_to_allele_specific_models Currently only checks for agreement on the total number of models. Throws AssertionError if inconsistent. """ num_models = len(self.class1_pan_allele_models) + sum( len(v) for v in self.allele_to_allele_specific_models.values()) assert len(self.manifest_df) == num_models, ( "Manifest seems out of sync with models: %d vs %d entries: " "\n%s\npan-allele: %s\nallele-specific: %s"% ( len(self.manifest_df), num_models, str(self.manifest_df), str(self.class1_pan_allele_models), str(self.allele_to_allele_specific_models))) def save(self, models_dir, model_names_to_write=None, write_metadata=True): """ Serialize the predictor to a directory on disk. If the directory does not exist it will be created. The serialization format consists of a file called "manifest.csv" with the configurations of each Class1NeuralNetwork, along with per-network files giving the model weights. If there are pan-allele predictors in the ensemble, the allele sequences are also stored in the directory. There is also a small file "index.txt" with basic metadata: when the models were trained, by whom, on what host. Parameters ---------- models_dir : string Path to directory. It will be created if it doesn't exist. model_names_to_write : list of string, optional Only write the weights for the specified models. Useful for incremental updates during training. write_metadata : boolean, optional Whether to write optional metadata """ self.check_consistency() if model_names_to_write is None: # Write all models model_names_to_write = self.manifest_df.model_name.values if not exists(models_dir): mkdir(models_dir) sub_manifest_df = self.manifest_df.loc[ self.manifest_df.model_name.isin(model_names_to_write) ].copy() # Network JSON configs may have changed since the models were added, # for example due to changes to the allele representation layer. # So we update the JSON configs here also. updated_network_config_jsons = [] for (_, row) in sub_manifest_df.iterrows(): updated_network_config_jsons.append( json.dumps(row.model.get_config())) weights_path = self.weights_path(models_dir, row.model_name) save_weights(row.model.get_weights(), weights_path) logging.info("Wrote: %s", weights_path) sub_manifest_df["config_json"] = updated_network_config_jsons self.manifest_df.loc[ sub_manifest_df.index, "config_json" ] = updated_network_config_jsons write_manifest_df = self.manifest_df[[ c for c in self.manifest_df.columns if c != "model" ]] manifest_path = join(models_dir, "manifest.csv") write_manifest_df.to_csv(manifest_path, index=False) logging.info("Wrote: %s", manifest_path) if write_metadata: # Write "info.txt" info_path = join(models_dir, "info.txt") rows = [ ("trained on", time.asctime()), ("package ", "mhcflurry %s" % __version__), ("hostname ", gethostname()), ("user ", getuser()), ] pandas.DataFrame(rows).to_csv( info_path, sep="\t", header=False, index=False) if self.metadata_dataframes: for (name, df) in self.metadata_dataframes.items(): metadata_df_path = join(models_dir, "%s.csv.bz2" % name) df.to_csv(metadata_df_path, index=False, compression="bz2") # Save allele sequences if self.allele_to_sequence is not None: allele_to_sequence_df = pandas.DataFrame( list(self.allele_to_sequence.items()), columns=['allele', 'sequence'] ) allele_to_sequence_df.to_csv( join(models_dir, "allele_sequences.csv"), index=False) logging.info("Wrote: %s", join(models_dir, "allele_sequences.csv")) if self.allele_to_percent_rank_transform: percent_ranks_df = None for (allele, transform) in self.allele_to_percent_rank_transform.items(): series = transform.to_series() if percent_ranks_df is None: percent_ranks_df = {} percent_ranks_df_index = series.index numpy.testing.assert_array_almost_equal( series.index.values, percent_ranks_df_index.values) percent_ranks_df[allele] = series.values percent_ranks_df = pandas.DataFrame( percent_ranks_df, index=percent_ranks_df_index) percent_ranks_path = join(models_dir, "percent_ranks.csv") percent_ranks_df.to_csv( percent_ranks_path, index=True, index_label="bin") logging.info("Wrote: %s", percent_ranks_path) if self.optimization_info: # If the model being saved was optimized, we need to save that # information since it can affect how predictions are performed # (e.g. stitched-together ensembles output concatenated results, # which then need to be averaged outside the model). optimization_info_path = join(models_dir, "optimization_info.json") with open(optimization_info_path, "w") as fd: json.dump(self.optimization_info, fd, indent=4) @staticmethod def load(models_dir=None, max_models=None, optimization_level=None): """ Deserialize a predictor from a directory on disk. Parameters ---------- models_dir : string Path to directory. If unspecified the default downloaded models are used. max_models : int, optional Maximum number of `Class1NeuralNetwork` instances to load optimization_level : int If >0, model optimization will be attempted. Defaults to value of environment variable MHCFLURRY_OPTIMIZATION_LEVEL. Returns ------- `Class1AffinityPredictor` instance """ if models_dir is None: try: models_dir = get_default_class1_models_dir() except RuntimeError as e: # Fall back to the affinity predictor included in presentation # predictor if possible. from mhcflurry.class1_presentation_predictor import ( Class1PresentationPredictor) try: presentation_predictor = Class1PresentationPredictor.load() return presentation_predictor.affinity_predictor except RuntimeError: raise e if optimization_level is None: optimization_level = OPTIMIZATION_LEVEL manifest_path = join(models_dir, "manifest.csv") manifest_df = pandas.read_csv(manifest_path, nrows=max_models) # ----- Load pseudosequences first so we can canonicalize ----- allele_to_sequence = None allele_to_canonical = {} if exists(join(models_dir, "allele_sequences.csv")): allele_to_sequence = pandas.read_csv( join(models_dir, "allele_sequences.csv"), index_col=0).iloc[:, 0].to_dict() # Re-normalize allele names. We first try without IMGT allele # aliases to preserve current nomenclature. If the parse fails # or the pseudosequence contains unknown (X) positions, we # retry with aliases — retired allele names like B*44:01 (an # IMGT error reassigned to B*44:02 in 1994) often have # incomplete pseudosequences, and the alias target may have a # complete one. If mhcgnomes can't parse either way, keep the # raw name so the pseudosequence remains available. renormalized = {} skipped_non_class1 = [] for (name, value) in allele_to_sequence.items(): normalized = normalize_allele_name( name, raise_on_error=False, use_allele_aliases=False) if normalized is None or "X" in value: alias_normalized = normalize_allele_name( name, raise_on_error=False, use_allele_aliases=True) if alias_normalized is not None: normalized = alias_normalized if normalized is None: # Detect class II, TAP, and pseudogene entries — # these don't belong in a class I predictor and # always have incomplete pseudosequences. gene = name.split("*")[0].split("-")[-1] if "-" in name else "" if ("X" in value and any(tag in gene for tag in ("DAA", "DAB", "TAP", "PS"))): skipped_non_class1.append(name) continue normalized = name if normalized in renormalized and name != normalized: existing = renormalized[normalized] if value.count("X") < existing.count("X"): renormalized[normalized] = value continue renormalized[normalized] = value allele_to_sequence = renormalized if skipped_non_class1: logging.info( "Skipped %d non-class-I entries from pseudosequence " "file (class II / TAP / pseudogene with incomplete " "pseudosequences): %s", len(skipped_non_class1), ", ".join(sorted(skipped_non_class1)[:10]) + (" ..." if len(skipped_non_class1) > 10 else "")) # Map mhcgnomes-aliased forms back to pseudosequence keys. # e.g. Mamu-A1*007:01 -> Mamu-A*07:01 for canonical_name in allele_to_sequence: aliased = normalize_allele_name( canonical_name, raise_on_error=False, use_allele_aliases=True) if (aliased is not None and aliased != canonical_name and aliased not in allele_to_sequence): allele_to_canonical[aliased] = canonical_name def to_canonical(raw_name): """Normalize a raw allele name to its canonical pseudosequence key.""" n = normalize_allele_name(raw_name, raise_on_error=False) or raw_name return allele_to_canonical.get(n, n) # ----- Load manifest ----- allele_to_allele_specific_models = collections.defaultdict(list) class1_pan_allele_models = [] all_models = [] for (_, row) in manifest_df.iterrows(): weights_filename = Class1AffinityPredictor.weights_path( models_dir, row.model_name) config = json.loads(row.config_json) model = Class1NeuralNetwork.from_config( config, weights_loader=partial(load_weights, abspath(weights_filename))) if row.allele == "pan-class1": class1_pan_allele_models.append(model) else: allele_to_allele_specific_models[ to_canonical(row.allele)].append(model) all_models.append(model) manifest_df["model"] = all_models # ----- Load percent ranks ----- allele_to_percent_rank_transform = {} percent_ranks_path = join(models_dir, "percent_ranks.csv") if exists(percent_ranks_path): percent_ranks_df = pandas.read_csv(percent_ranks_path, index_col=0) for allele in percent_ranks_df.columns: canonical = to_canonical(allele) if (canonical in allele_to_percent_rank_transform and allele != canonical): continue allele_to_percent_rank_transform[canonical] = ( PercentRankTransform.from_series(percent_ranks_df[allele])) logging.info( "Loaded %d class1 pan allele predictors, %d allele sequences, " "%d percent rank distributions, and %d allele specific models: %s", len(class1_pan_allele_models), len(allele_to_sequence) if allele_to_sequence else 0, len(allele_to_percent_rank_transform), sum(len(v) for v in allele_to_allele_specific_models.values()), ", ".join( "%s (%d)" % (allele, len(v)) for (allele, v) in sorted(allele_to_allele_specific_models.items()))) provenance_string = None try: info_path = join(models_dir, "info.txt") info = pandas.read_csv( info_path, sep="\t", header=None, index_col=0).iloc[ :, 0 ].to_dict() provenance_string = "generated on %s" % info["trained on"] except OSError: pass optimization_info = None try: optimization_info_path = join(models_dir, "optimization_info.json") with open(optimization_info_path) as fd: optimization_info = json.load(fd) except OSError: pass result = Class1AffinityPredictor( allele_to_allele_specific_models=allele_to_allele_specific_models, class1_pan_allele_models=class1_pan_allele_models, allele_to_sequence=allele_to_sequence, manifest_df=manifest_df, allele_to_percent_rank_transform=allele_to_percent_rank_transform, provenance_string=provenance_string, optimization_info=optimization_info, ) if allele_to_sequence is not None: result.allele_to_canonical = allele_to_canonical if optimization_level >= 1: optimized = result.optimize() logging.info( "Model optimization %s", "succeeded" if optimized else "not supported for these models") return result def __repr__(self): pieces = ["at 0x%0x" % id(self), "[mhcflurry %s]" % __version__] pan_models = len(self.class1_pan_allele_models) total_models = len(self.neural_networks) if total_models == 0: pieces.append("[empty]") elif pan_models == total_models: pieces.append("[pan]") elif pan_models == 0: pieces.append("[allele-specific]") else: pieces.append("[pan+allele-specific]") if self.provenance_string: pieces.append(self.provenance_string) return "" % " ".join(pieces) def optimize(self, warn=True): """ EXPERIMENTAL: Optimize the predictor for faster predictions. Currently the only optimization implemented is to merge multiple pan- allele predictors at the PyTorch level. The optimization is performed in-place, mutating the instance. Returns ---------- bool Whether optimization was performed """ num_class1_pan_allele_models = len(self.class1_pan_allele_models) if num_class1_pan_allele_models > 1: provenance_string = self.provenance_string try: self.class1_pan_allele_models = [ Class1NeuralNetwork.merge( self.class1_pan_allele_models, merge_method="concatenate") ] except NotImplementedError as e: if warn: logging.warning("Optimization failed: %s", str(e)) return False self._manifest_df = None self.clear_cache() self.optimization_info["pan_models_merged"] = True self.optimization_info["num_pan_models_merged"] = ( num_class1_pan_allele_models) self.provenance_string = provenance_string else: return False return True @staticmethod def model_name(allele, num): """ Generate a model name Parameters ---------- allele : string num : int Returns ------- string """ random_string = hashlib.sha1( str(time.time()).encode()).hexdigest()[:16] return "%s-%d-%s" % ( allele.upper().replace("*", "_").replace(":", "_"), num, random_string) @staticmethod def weights_path(models_dir, model_name): """ Generate the path to the weights file for a model Parameters ---------- models_dir : string model_name : string Returns ------- string """ return join(models_dir, "weights_%s.npz" % model_name) @property def master_allele_encoding(self): """ An AlleleEncoding containing the universe of alleles specified by self.allele_to_sequence. Returns ------- AlleleEncoding """ if (self._master_allele_encoding is None or self._master_allele_encoding.allele_to_sequence != self.allele_to_sequence): self._master_allele_encoding = AlleleEncoding( allele_to_sequence=self.allele_to_sequence) return self._master_allele_encoding def fit_allele_specific_predictors( self, n_models, architecture_hyperparameters_list, allele, peptides, affinities, inequalities=None, train_rounds=None, models_dir_for_save=None, verbose=0, progress_preamble="", progress_print_interval=5.0): """ Fit one or more allele specific predictors for a single allele using one or more neural network architectures. The new predictors are saved in the Class1AffinityPredictor instance and will be used on subsequent calls to `predict`. Parameters ---------- n_models : int Number of neural networks to fit architecture_hyperparameters_list : list of dict List of hyperparameter sets. allele : string peptides : `EncodableSequences` or list of string affinities : list of float nM affinities inequalities : list of string, each element one of ">", "<", or "=" See `Class1NeuralNetwork.fit` for details. train_rounds : sequence of int Each training point i will be used on training rounds r for which train_rounds[i] > r, r >= 0. models_dir_for_save : string, optional If specified, the Class1AffinityPredictor is (incrementally) written to the given models dir after each neural network is fit. verbose : int Verbosity level for training output progress_preamble : string Optional string of information to include in each progress update progress_print_interval : float How often (in seconds) to print progress. Set to None to disable. Returns ------- list of `Class1NeuralNetwork` """ allele = normalize_allele_name(allele) if allele not in self.allele_to_allele_specific_models: self.allele_to_allele_specific_models[allele] = [] encodable_peptides = EncodableSequences.create(peptides) peptides_affinities_inequalities_per_round = [ (encodable_peptides, affinities, inequalities) ] if train_rounds is not None: for round in sorted(set(train_rounds)): round_mask = train_rounds > round if round_mask.any(): sub_encodable_peptides = EncodableSequences.create( encodable_peptides.sequences[round_mask]) peptides_affinities_inequalities_per_round.append(( sub_encodable_peptides, affinities[round_mask], None if inequalities is None else inequalities[round_mask])) n_rounds = len(peptides_affinities_inequalities_per_round) n_architectures = len(architecture_hyperparameters_list) # Adjust progress info to indicate number of models and # architectures. pieces = [] if n_models > 1: pieces.append("Model {model_num:2d} / {n_models:2d}") if n_architectures > 1: pieces.append( "Architecture {architecture_num:2d} / {n_architectures:2d}") if len(peptides_affinities_inequalities_per_round) > 1: pieces.append("Round {round:2d} / {n_rounds:2d}") pieces.append("{n_peptides:4d} peptides") progress_preamble_template = "[ %s ] {user_progress_preamble}" % ( ", ".join(pieces)) models = [] for model_num in range(n_models): for (architecture_num, architecture_hyperparameters) in enumerate( architecture_hyperparameters_list): model = Class1NeuralNetwork(**architecture_hyperparameters) for round_num in range(n_rounds): (round_peptides, round_affinities, round_inequalities) = ( peptides_affinities_inequalities_per_round[round_num] ) model.fit( round_peptides, round_affinities, inequalities=round_inequalities, verbose=verbose, progress_preamble=progress_preamble_template.format( n_peptides=len(round_peptides), round=round_num, n_rounds=n_rounds, user_progress_preamble=progress_preamble, model_num=model_num + 1, n_models=n_models, architecture_num=architecture_num + 1, n_architectures=n_architectures), progress_print_interval=progress_print_interval) model_name = self.model_name(allele, model_num) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("allele", allele), ("config_json", json.dumps(model.get_config())), ("model", model), ])).to_frame().T self._manifest_df = pandas.concat( [self.manifest_df, row], ignore_index=True) self.allele_to_allele_specific_models[allele].append(model) if models_dir_for_save: self.save( models_dir_for_save, model_names_to_write=[model_name]) models.append(model) self.clear_cache() return models def fit_class1_pan_allele_models( self, n_models, architecture_hyperparameters, alleles, peptides, affinities, inequalities, models_dir_for_save=None, verbose=1, progress_preamble="", progress_print_interval=5.0): """ Fit one or more pan-allele predictors using a single neural network architecture. The new predictors are saved in the Class1AffinityPredictor instance and will be used on subsequent calls to `predict`. Parameters ---------- n_models : int Number of neural networks to fit architecture_hyperparameters : dict alleles : list of string Allele names (not sequences) corresponding to each peptide peptides : `EncodableSequences` or list of string affinities : list of float nM affinities inequalities : list of string, each element one of ">", "<", or "=" See Class1NeuralNetwork.fit for details. models_dir_for_save : string, optional If specified, the Class1AffinityPredictor is (incrementally) written to the given models dir after each neural network is fit. verbose : int Verbosity level for training output progress_preamble : string Optional string of information to include in each progress update progress_print_interval : float How often (in seconds) to print progress. Set to None to disable. Returns ------- list of `Class1NeuralNetwork` """ alleles = pandas.Series(alleles).map(normalize_allele_name) allele_encoding = AlleleEncoding( alleles, borrow_from=self.master_allele_encoding) encodable_peptides = EncodableSequences.create(peptides) models = [] for i in range(n_models): logging.info("Training model %d / %d", i + 1, n_models) model = Class1NeuralNetwork(**architecture_hyperparameters) model.fit( encodable_peptides, affinities, inequalities=inequalities, allele_encoding=allele_encoding, verbose=verbose, progress_preamble=progress_preamble, progress_print_interval=progress_print_interval) model_name = self.model_name("pan-class1", i) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("allele", "pan-class1"), ("config_json", json.dumps(model.get_config())), ("model", model), ])).to_frame().T self._manifest_df = pandas.concat( [self.manifest_df, row], ignore_index=True) self.class1_pan_allele_models.append(model) if models_dir_for_save: self.save( models_dir_for_save, model_names_to_write=[model_name]) models.append(model) self.clear_cache() return models def add_pan_allele_model(self, model, models_dir_for_save=None): """ Add a pan-allele model to the ensemble and optionally do an incremental save. Parameters ---------- model : Class1NeuralNetwork models_dir_for_save : string Directory to save resulting ensemble to """ model_name = self.model_name("pan-class1", 1) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("allele", "pan-class1"), ("config_json", json.dumps(model.get_config())), ("model", model), ])).to_frame().T self._manifest_df = pandas.concat( [self.manifest_df, row], ignore_index=True) self.class1_pan_allele_models.append(model) self.clear_cache() self.check_consistency() if models_dir_for_save: self.save( models_dir_for_save, model_names_to_write=[model_name]) def percentile_ranks(self, affinities, allele=None, alleles=None, throw=True): """ Return percentile ranks for the given ic50 affinities and alleles. The 'allele' and 'alleles' argument are as in the `predict` method. Specify one of these. Parameters ---------- affinities : sequence of float nM affinities allele : string alleles : sequence of string throw : boolean If True, a ValueError will be raised in the case of unsupported alleles. If False, a warning will be logged and NaN will be returned for those percentile ranks. Returns ------- numpy.array of float """ if allele is not None: normalized_allele = self.canonicalize_allele_name(allele) try: transform = self.allele_to_percent_rank_transform[normalized_allele] return transform.transform(affinities) except KeyError: if self.allele_to_sequence: # See if we have information for an equivalent allele sequence = self.allele_to_sequence[normalized_allele] other_alleles = [ other_allele for (other_allele, other_sequence) in self.allele_to_sequence.items() if other_sequence == sequence ] for other_allele in other_alleles: if other_allele in self.allele_to_percent_rank_transform: transform = self.allele_to_percent_rank_transform[ other_allele] return transform.transform(affinities) msg = "Allele %s has no percentile rank information" % ( allele + ( "" if allele == normalized_allele else " (normalized to %s)" % normalized_allele)) if throw: raise ValueError(msg) warnings.warn(msg) return numpy.ones(len(affinities)) * numpy.nan # Return NaNs if alleles is None: raise ValueError("Specify allele or alleles") df = pandas.DataFrame({"affinity": affinities}) df["allele"] = alleles df["result"] = numpy.nan for (allele, sub_df) in df.groupby("allele"): df.loc[sub_df.index, "result"] = self.percentile_ranks( sub_df.affinity, allele=allele, throw=throw) return df.result.values def predict( self, peptides, alleles=None, allele=None, throw=True, centrality_measure=DEFAULT_CENTRALITY_MEASURE, model_kwargs={}): """ Predict nM binding affinities. If multiple predictors are available for an allele, the predictions are the geometric means of the individual model (nM) predictions. One of 'allele' or 'alleles' must be specified. If 'allele' is specified all predictions will be for the given allele. If 'alleles' is specified it must be the same length as 'peptides' and give the allele corresponding to each peptide. Parameters ---------- peptides : `EncodableSequences` or list of string alleles : list of string allele : string throw : boolean If True, a ValueError will be raised in the case of unsupported alleles or peptide lengths. If False, a warning will be logged and the predictions for the unsupported alleles or peptides will be NaN. centrality_measure : string or callable Measure of central tendency to use to combine predictions in the ensemble. Options include: mean, median, robust_mean. model_kwargs : dict Additional keyword arguments to pass to Class1NeuralNetwork.predict Returns ------- numpy.array of predictions """ df = self.predict_to_dataframe( peptides=peptides, alleles=alleles, allele=allele, throw=throw, include_percentile_ranks=False, include_confidence_intervals=False, centrality_measure=centrality_measure, model_kwargs=model_kwargs ) return df.prediction.values def predict_to_dataframe( self, peptides, alleles=None, allele=None, throw=True, include_individual_model_predictions=False, include_percentile_ranks=True, include_confidence_intervals=True, centrality_measure=DEFAULT_CENTRALITY_MEASURE, model_kwargs={}): """ Predict nM binding affinities. Gives more detailed output than `predict` method, including 5-95% prediction intervals. If multiple predictors are available for an allele, the predictions are the geometric means of the individual model predictions. One of 'allele' or 'alleles' must be specified. If 'allele' is specified all predictions will be for the given allele. If 'alleles' is specified it must be the same length as 'peptides' and give the allele corresponding to each peptide. Parameters ---------- peptides : `EncodableSequences` or list of string alleles : list of string allele : string throw : boolean If True, a ValueError will be raised in the case of unsupported alleles or peptide lengths. If False, a warning will be logged and the predictions for the unsupported alleles or peptides will be NaN. include_individual_model_predictions : boolean If True, the predictions of each individual model are included as columns in the result DataFrame. include_percentile_ranks : boolean, default True If True, a "prediction_percentile" column will be included giving the percentile ranks. If no percentile rank info is available, this will be ignored with a warning. centrality_measure : string or callable Measure of central tendency to use to combine predictions in the ensemble. Options include: mean, median, robust_mean. model_kwargs : dict Additional keyword arguments to pass to Class1NeuralNetwork.predict Returns ------- `pandas.DataFrame` of predictions """ if isinstance(peptides, str): raise TypeError("peptides must be a list or array, not a string") if isinstance(alleles, str): raise TypeError("alleles must be a list or array, not a string") if allele is None and alleles is None: raise ValueError("Must specify 'allele' or 'alleles'.") peptides = EncodableSequences.create(peptides) df = pandas.DataFrame({ 'peptide': peptides.sequences }, copy=False) if allele is not None: if alleles is not None: raise ValueError("Specify exactly one of allele or alleles") normalized_allele = self.canonicalize_allele_name(allele) df["allele"] = normalized_allele df["normalized_allele"] = normalized_allele unique_alleles = [normalized_allele] else: df["allele"] = [ self.canonicalize_allele_name(a) for a in alleles] df["normalized_allele"] = df["allele"] unique_alleles = df.normalized_allele.unique() if len(df) == 0: # No predictions. logging.warning("Predicting for 0 peptides.") empty_result = pandas.DataFrame( columns=[ 'peptide', 'allele', 'prediction', 'prediction_low', 'prediction_high' ]) return empty_result (min_peptide_length, max_peptide_length) = ( self.supported_peptide_lengths) if (peptides.min_length < min_peptide_length or peptides.max_length > max_peptide_length): # Only compute this if needed all_peptides_supported = False sequence_length = df.peptide.str.len() df["supported_peptide"] = ( (sequence_length >= min_peptide_length) & (sequence_length <= max_peptide_length)) if (~df.supported_peptide).any(): msg = ( "%d peptides have lengths outside of supported range [%d, %d]: " "%s" % ( (~df.supported_peptide).sum(), min_peptide_length, max_peptide_length, str(df.loc[~df.supported_peptide].peptide.unique()))) logging.warning(msg) if throw: raise ValueError(msg) else: # Handle common case efficiently. df["supported_peptide"] = True all_peptides_supported = True peptide_has_valid_amino_acids = ( (~df.supported_peptide) | df.peptide.str.upper().str.match("^[ACDEFGHIKLMNPQRSTVWY]+$")) df["supported_peptide"] = ( df["supported_peptide"] & peptide_has_valid_amino_acids) if (~peptide_has_valid_amino_acids).any(): all_peptides_supported = False msg = ( "%d peptides have nonstandard amino acids: " "%s" % ( (~peptide_has_valid_amino_acids).sum(), str(df.loc[~peptide_has_valid_amino_acids].peptide.unique()))) logging.warning(msg) if throw: raise ValueError(msg) num_pan_models = ( len(self.class1_pan_allele_models) if not self.optimization_info.get("pan_models_merged", False) else self.optimization_info["num_pan_models_merged"]) max_single_allele_models = max( len(self.allele_to_allele_specific_models.get(allele, [])) for allele in unique_alleles ) predictions_array = numpy.zeros( shape=(df.shape[0], num_pan_models + max_single_allele_models), dtype="float64") predictions_array[:] = numpy.nan if self.class1_pan_allele_models: master_allele_encoding = self.master_allele_encoding unsupported_alleles = [ allele for allele in df.normalized_allele.unique() if allele not in self.allele_to_sequence ] if unsupported_alleles: truncate_at = 100 allele_string = " ".join( sorted(self.allele_to_sequence)[:truncate_at]) if len(self.allele_to_sequence) > truncate_at: allele_string += " + %d more alleles" % ( len(self.allele_to_sequence) - truncate_at) msg = ( "No sequences for allele(s): %s.\n" "Supported alleles: %s" % ( " ".join(unsupported_alleles), allele_string)) logging.warning(msg) if throw: raise ValueError(msg) mask = df.supported_peptide & ( ~df.normalized_allele.isin(unsupported_alleles)) row_slice = None if mask is None or mask.all(): row_slice = slice(None, None, None) # all rows masked_allele_encoding = AlleleEncoding( df.normalized_allele, borrow_from=master_allele_encoding) masked_peptides = EncodableSequences.create(peptides) elif mask.sum() > 0: row_slice = mask masked_allele_encoding = AlleleEncoding( df.loc[mask].normalized_allele, borrow_from=master_allele_encoding) masked_peptides = EncodableSequences.create( peptides.sequences[mask]) if row_slice is not None: # The following line is a performance optimization that may be # revisited. It causes the neural network to set to include # only the alleles actually being predicted for. This makes # the network much smaller. However, subsequent calls to # predict will need to reset these weights, so there is a # tradeoff. masked_allele_encoding = masked_allele_encoding.compact() if self.optimization_info.get("pan_models_merged"): # Multiple pan-allele models have been merged into one # at the PyTorch level. assert len(self.class1_pan_allele_models) == 1 predictions = self.class1_pan_allele_models[0].predict( masked_peptides, allele_encoding=masked_allele_encoding, output_index=None, **model_kwargs) predictions_array[row_slice, :num_pan_models] = predictions else: for (i, model) in enumerate(self.class1_pan_allele_models): predictions_array[row_slice, i] = model.predict( masked_peptides, allele_encoding=masked_allele_encoding, **model_kwargs) if self.allele_to_allele_specific_models: unsupported_alleles = [ allele for allele in unique_alleles if not self.allele_to_allele_specific_models.get(allele) ] if unsupported_alleles: msg = ( "No single-allele models for allele(s): %s.\n" "Supported alleles are: %s" % ( " ".join(unsupported_alleles), " ".join(sorted(self.allele_to_allele_specific_models)))) logging.warning(msg) if throw: raise ValueError(msg) for allele in unique_alleles: models = self.allele_to_allele_specific_models.get(allele, []) if len(unique_alleles) == 1 and all_peptides_supported: mask = None else: mask = ( (df.normalized_allele == allele) & df.supported_peptide).values row_slice = None if mask is None or mask.all(): peptides_for_allele = peptides row_slice = slice(None, None, None) elif mask.sum() > 0: peptides_for_allele = EncodableSequences.create( df.loc[mask].peptide.values) row_slice = mask if row_slice is not None: for (i, model) in enumerate(models): predictions_array[ row_slice, num_pan_models + i, ] = model.predict(peptides_for_allele, **model_kwargs) if callable(centrality_measure): centrality_function = centrality_measure else: centrality_function = CENTRALITY_MEASURES[centrality_measure] logs = numpy.log(predictions_array) row_has_predictions = (~numpy.isnan(logs)).any(axis=1) log_centers = numpy.full(df.shape[0], numpy.nan, dtype="float64") if row_has_predictions.any(): log_centers[row_has_predictions] = centrality_function( logs[row_has_predictions] ) df["prediction"] = numpy.exp(log_centers) if include_confidence_intervals: prediction_low = numpy.full(df.shape[0], numpy.nan, dtype="float64") prediction_high = numpy.full(df.shape[0], numpy.nan, dtype="float64") if row_has_predictions.any(): prediction_low[row_has_predictions] = numpy.exp( numpy.nanpercentile(logs[row_has_predictions], 5.0, axis=1) ) prediction_high[row_has_predictions] = numpy.exp( numpy.nanpercentile(logs[row_has_predictions], 95.0, axis=1) ) df["prediction_low"] = prediction_low df["prediction_high"] = prediction_high if include_individual_model_predictions: for i in range(num_pan_models): df["model_pan_%d" % i] = predictions_array[:, i] for i in range(max_single_allele_models): df["model_single_%d" % i] = predictions_array[ :, num_pan_models + i ] if include_percentile_ranks: if self.allele_to_percent_rank_transform: df["prediction_percentile"] = self.percentile_ranks( df.prediction, alleles=df.normalized_allele.values, throw=throw) else: warnings.warn("No percentile rank information available.") del df["supported_peptide"] del df["normalized_allele"] return df def calibrate_percentile_ranks( self, peptides=None, num_peptides_per_length=int(1e5), alleles=None, bins=None, motif_summary=False, summary_top_peptide_fractions=[0.001], verbose=False, model_kwargs={}): """ Compute the cumulative distribution of ic50 values for a set of alleles over a large universe of random peptides, to enable taking quantiles of this distribution later. Parameters ---------- peptides : sequence of string or EncodableSequences, optional Peptides to use num_peptides_per_length : int, optional If peptides argument is not specified, then num_peptides_per_length peptides are randomly sampled from a uniform distribution for each supported length alleles : sequence of string, optional Alleles to perform calibration for. If not specified all supported alleles will be calibrated. bins : object Anything that can be passed to numpy.histogram's "bins" argument can be used here, i.e. either an integer or a sequence giving bin edges. This is in ic50 space. motif_summary : bool If True, the length distribution and per-position amino acid frequencies are also calculated for the top x fraction of tightest- binding peptides, where each value of x is given in the summary_top_peptide_fractions list. summary_top_peptide_fractions : list of float Only used if motif_summary is True verbose : boolean Whether to print status updates to stdout model_kwargs : dict Additional low-level Class1NeuralNetwork.predict() kwargs. Returns ---------- dict of string -> pandas.DataFrame If motif_summary is True, this will have keys "frequency_matrices" and "length_distributions". Otherwise it will be empty. """ if bins is None: bins = to_ic50(numpy.linspace(1, 0, 1000)) if alleles is None: alleles = self.supported_alleles if peptides is None: peptides = [] lengths = range( self.supported_peptide_lengths[0], self.supported_peptide_lengths[1] + 1) for length in lengths: peptides.extend( random_peptides(num_peptides_per_length, length)) encoded_peptides = EncodableSequences.create(peptides) if motif_summary: frequency_matrices = [] length_distributions = [] else: frequency_matrices = None length_distributions = None for allele in alleles: start = time.time() predictions = self.predict( encoded_peptides, allele=allele, model_kwargs=model_kwargs) if verbose: elapsed = time.time() - start print( "Generated %d predictions for allele %s in %0.2f sec: " "%0.2f predictions / sec" % ( len(encoded_peptides.sequences), allele, elapsed, len(encoded_peptides.sequences) / elapsed)) transform = PercentRankTransform() transform.fit(predictions, bins=bins) self.allele_to_percent_rank_transform[allele] = transform if frequency_matrices is not None: predictions_df = pandas.DataFrame({ 'peptide': encoded_peptides.sequences, 'prediction': predictions }).drop_duplicates('peptide').set_index("peptide") predictions_df["length"] = predictions_df.index.str.len() for (length, sub_df) in predictions_df.groupby("length"): for cutoff_fraction in summary_top_peptide_fractions: selected = sub_df.prediction.nsmallest( max( int(len(sub_df) * cutoff_fraction), 1)).index.values matrix = positional_frequency_matrix(selected).reset_index() original_columns = list(matrix.columns) matrix["allele"] = allele matrix["length"] = length matrix["cutoff_fraction"] = cutoff_fraction matrix["cutoff_count"] = len(selected) matrix = matrix[ ["allele", "length", "cutoff_fraction", "cutoff_count"] + original_columns ] frequency_matrices.append(matrix) # Length distribution for cutoff_fraction in summary_top_peptide_fractions: cutoff_count = max( int(len(predictions_df) * cutoff_fraction), 1) length_distribution = predictions_df.prediction.nsmallest( cutoff_count).index.str.len().value_counts() length_distribution.index.name = "length" length_distribution /= length_distribution.sum() length_distribution = length_distribution.to_frame() length_distribution.columns = ["fraction"] length_distribution = length_distribution.reset_index() length_distribution["allele"] = allele length_distribution["cutoff_fraction"] = cutoff_fraction length_distribution["cutoff_count"] = cutoff_count length_distribution = length_distribution[[ "allele", "cutoff_fraction", "cutoff_count", "length", "fraction" ]].sort_values(["cutoff_fraction", "length"]) length_distributions.append(length_distribution) if frequency_matrices is not None: frequency_matrices = pandas.concat( frequency_matrices, ignore_index=True) if length_distributions is not None: length_distributions = pandas.concat( length_distributions, ignore_index=True) if motif_summary: return { 'frequency_matrices': frequency_matrices, 'length_distributions': length_distributions, } return {} def model_select( self, score_function, alleles=None, min_models=1, max_models=10000): """ Perform model selection using a user-specified scoring function. This works only with allele-specific models, not pan-allele models. Model selection is done using a "step up" variable selection procedure, in which models are repeatedly added to an ensemble until the score stops improving. Parameters ---------- score_function : Class1AffinityPredictor -> float function Scoring function alleles : list of string, optional If not specified, model selection is performed for all alleles. min_models : int, optional Min models to select per allele max_models : int, optional Max models to select per allele Returns ------- Class1AffinityPredictor : predictor containing the selected models """ if alleles is None: alleles = self.supported_alleles dfs = [] allele_to_allele_specific_models = {} for allele in alleles: df = pandas.DataFrame({ 'model': self.allele_to_allele_specific_models[allele] }) df["model_num"] = df.index df["allele"] = allele df["selected"] = False round_num = 1 while not df.selected.all() and sum(df.selected) < max_models: score_col = "score_%2d" % round_num prev_score_col = "score_%2d" % (round_num - 1) existing_selected = list(df[df.selected].model) df[score_col] = [ numpy.nan if row.selected else score_function( Class1AffinityPredictor( allele_to_allele_specific_models={ allele: [row.model] + existing_selected } ) ) for (_, row) in df.iterrows() ] if round_num > min_models and ( df[score_col].max() < df[prev_score_col].max()): break # In case of a tie, pick a model at random. (best_model_index,) = df.loc[ (df[score_col] == df[score_col].max()) ].sample(1).index df.loc[best_model_index, "selected"] = True round_num += 1 dfs.append(df) allele_to_allele_specific_models[allele] = list( df.loc[df.selected].model) df = pandas.concat(dfs, ignore_index=True) new_predictor = Class1AffinityPredictor( allele_to_allele_specific_models, metadata_dataframes={ "model_selection": df, }) return new_predictor ================================================ FILE: mhcflurry/class1_neural_network.py ================================================ """ Class1NeuralNetwork - PyTorch implementation for MHC class I binding prediction. """ import gc import time import collections import json import weakref import itertools import os import logging import numpy import pandas import torch import torch.nn as nn from .hyperparameters import HyperparameterDefaults from .encodable_sequences import EncodableSequences, EncodingError from .allele_encoding import AlleleEncoding from .regression_target import to_ic50, from_ic50 from .common import get_pytorch_device from .pytorch_layers import LocallyConnected1D, get_activation from .pytorch_losses import get_pytorch_loss from .data_dependent_weights_initialization import lsuv_init from .random_negative_peptides import RandomNegativePeptides DEFAULT_PREDICT_BATCH_SIZE = 4096 if os.environ.get("MHCFLURRY_DEFAULT_PREDICT_BATCH_SIZE"): DEFAULT_PREDICT_BATCH_SIZE = int(os.environ["MHCFLURRY_DEFAULT_PREDICT_BATCH_SIZE"]) logging.info( "Configured default predict batch size: %d" % DEFAULT_PREDICT_BATCH_SIZE ) KERAS_BATCH_NORM_EPSILON = 1e-3 # Keras uses moving = moving * 0.99 + batch * 0.01. PyTorch's momentum is the # new-batch coefficient, so the equivalent value is 0.01. KERAS_BATCH_NORM_MOMENTUM = 0.01 class Class1NeuralNetworkModel(nn.Module): """ PyTorch module for Class1 neural network. """ def __init__( self, peptide_encoding_shape, allele_representations=None, locally_connected_layers=None, peptide_dense_layer_sizes=None, allele_dense_layer_sizes=None, layer_sizes=None, peptide_allele_merge_method="multiply", peptide_allele_merge_activation="", activation="tanh", output_activation="sigmoid", dropout_probability=0.0, batch_normalization=False, dense_layer_l1_regularization=0.001, dense_layer_l2_regularization=0.0, topology="feedforward", num_outputs=1, init="glorot_uniform"): super(Class1NeuralNetworkModel, self).__init__() self.peptide_encoding_shape = peptide_encoding_shape self.has_allele = allele_representations is not None self.peptide_allele_merge_method = peptide_allele_merge_method self.peptide_allele_merge_activation = peptide_allele_merge_activation self.dropout_probability = dropout_probability self.topology = topology self.num_outputs = num_outputs self.activation_name = activation self.output_activation_name = output_activation if locally_connected_layers is None: locally_connected_layers = [] if peptide_dense_layer_sizes is None: peptide_dense_layer_sizes = [] if allele_dense_layer_sizes is None: allele_dense_layer_sizes = [] if layer_sizes is None: layer_sizes = [32] # Build locally connected layers self.lc_layers = nn.ModuleList() input_length = peptide_encoding_shape[0] in_channels = peptide_encoding_shape[1] for i, lc_params in enumerate(locally_connected_layers): filters = lc_params.get('filters', 8) kernel_size = lc_params.get('kernel_size', 3) lc_activation = lc_params.get('activation', 'tanh') lc_layer = LocallyConnected1D( in_channels=in_channels, out_channels=filters, input_length=input_length, kernel_size=kernel_size, activation=lc_activation ) self.lc_layers.append(lc_layer) in_channels = filters input_length = lc_layer.output_length # Flattened size after locally connected layers self.flatten_size = input_length * in_channels # Peptide dense layers self.peptide_dense_layers = nn.ModuleList() peptide_layer_input = self.flatten_size for i, size in enumerate(peptide_dense_layer_sizes): layer = nn.Linear(peptide_layer_input, size) self.peptide_dense_layers.append(layer) peptide_layer_input = size # Batch normalization after peptide processing (early) self.batch_norm_early = None if batch_normalization: self.batch_norm_early = nn.BatchNorm1d( peptide_layer_input, eps=KERAS_BATCH_NORM_EPSILON, momentum=KERAS_BATCH_NORM_MOMENTUM, ) # Allele embedding and processing self.allele_embedding = None self.allele_dense_layers = nn.ModuleList() allele_output_size = 0 if self.has_allele: num_alleles = allele_representations.shape[0] embedding_dim = numpy.prod(allele_representations.shape[1:]) self.allele_embedding = nn.Embedding( num_embeddings=num_alleles, embedding_dim=embedding_dim ) # Set embedding weights and freeze self.allele_embedding.weight.data = torch.from_numpy( allele_representations.reshape(num_alleles, -1).astype(numpy.float32) ) self.allele_embedding.weight.requires_grad = False allele_layer_input = embedding_dim for i, size in enumerate(allele_dense_layer_sizes): layer = nn.Linear(allele_layer_input, size) self.allele_dense_layers.append(layer) allele_layer_input = size allele_output_size = allele_layer_input # Compute merged size if self.has_allele: if peptide_allele_merge_method == "concatenate": merged_size = peptide_layer_input + allele_output_size elif peptide_allele_merge_method == "multiply": # Both must have the same size for multiply merged_size = peptide_layer_input else: raise ValueError(f"Unknown merge method: {peptide_allele_merge_method}") else: merged_size = peptide_layer_input # Merge activation self.merge_activation = get_activation(peptide_allele_merge_activation) # Main dense layers self.dense_layers = nn.ModuleList() self.batch_norms = nn.ModuleList() self.dropouts = nn.ModuleList() # For DenseNet topology, track input sizes for skip connections self.merged_size = merged_size current_size = merged_size prev_sizes = [] # Track previous layer output sizes for skip connections for i, size in enumerate(layer_sizes): # For DenseNet topology (with-skip-connections): # - Layer 0: input = merged_size # - Layer 1: input = merged_size + layer_sizes[0] (skip from input) # - Layer 2+: input = layer_sizes[i-2] + layer_sizes[i-1] (skip from 2 layers back) if topology == "with-skip-connections" and i > 0: if i == 1: # Skip from original merged input current_size = merged_size + prev_sizes[-1] else: # Skip from 2 layers back current_size = prev_sizes[-2] + prev_sizes[-1] layer = nn.Linear(current_size, size) self.dense_layers.append(layer) if batch_normalization: self.batch_norms.append(nn.BatchNorm1d( size, eps=KERAS_BATCH_NORM_EPSILON, momentum=KERAS_BATCH_NORM_MOMENTUM, )) else: self.batch_norms.append(None) if dropout_probability > 0: # Dropout probability in MHCflurry hyperparameters is keep-probability. drop_prob = max(0.0, 1.0 - dropout_probability) if drop_prob > 0: self.dropouts.append(nn.Dropout(p=drop_prob)) else: self.dropouts.append(None) else: self.dropouts.append(None) prev_sizes.append(size) current_size = size # Note: For DenseNet topology, output layer receives only the last hidden layer output # (skip connections are only between hidden layers, not to the output layer) # Output layer self.output_layer = nn.Linear(current_size, num_outputs) # Activation functions self.activation = get_activation(activation) self.output_activation = get_activation(output_activation) # Initialize weights self._initialize_weights(init) def _initialize_weights(self, init): """Initialize layer weights.""" for module in self.modules(): if isinstance(module, nn.Linear): if init == "glorot_uniform": nn.init.xavier_uniform_(module.weight) elif init == "glorot_normal": nn.init.xavier_normal_(module.weight) elif init == "he_uniform": nn.init.kaiming_uniform_(module.weight) elif init == "he_normal": nn.init.kaiming_normal_(module.weight) if module.bias is not None: nn.init.zeros_(module.bias) def forward(self, inputs): """ Forward pass. Parameters ---------- inputs : dict Dictionary with 'peptide' and optionally 'allele' keys Returns ------- torch.Tensor Predictions of shape (batch, num_outputs) """ peptide = inputs['peptide'] # Locally connected layers x = peptide for lc_layer in self.lc_layers: x = lc_layer(x) # Flatten x = x.reshape(x.size(0), -1) # Peptide dense layers for layer in self.peptide_dense_layers: x = layer(x) if self.activation is not None: x = self.activation(x) # Early batch normalization if self.batch_norm_early is not None: x = self.batch_norm_early(x) # Allele processing and merge if self.has_allele and 'allele' in inputs: allele_idx = inputs['allele'].long() # Handle case where input might be (batch,) or (batch, 1) if allele_idx.dim() > 1: allele_idx = allele_idx.squeeze(-1) allele_embed = self.allele_embedding(allele_idx) # Allele dense layers for layer in self.allele_dense_layers: allele_embed = layer(allele_embed) if self.activation is not None: allele_embed = self.activation(allele_embed) # Flatten allele embedding allele_embed = allele_embed.reshape(allele_embed.size(0), -1) # Merge if self.peptide_allele_merge_method == "concatenate": x = torch.cat([x, allele_embed], dim=-1) elif self.peptide_allele_merge_method == "multiply": x = x * allele_embed # Merge activation if self.merge_activation is not None: x = self.merge_activation(x) # Main dense layers (with optional skip connections for DenseNet topology) prev_outputs = [] # Track outputs for skip connections merged_input = x # Save for DenseNet skip connections for i, layer in enumerate(self.dense_layers): # For DenseNet topology, concatenate skip connections if self.topology == "with-skip-connections" and i > 0: if i == 1: # Skip from original merged input x = torch.cat([merged_input, prev_outputs[-1]], dim=-1) else: # Skip from 2 layers back x = torch.cat([prev_outputs[-2], prev_outputs[-1]], dim=-1) x = layer(x) if self.activation is not None: x = self.activation(x) if self.batch_norms[i] is not None: x = self.batch_norms[i](x) if self.dropouts[i] is not None: x = self.dropouts[i](x) prev_outputs.append(x) # Note: For DenseNet topology, output layer receives only the last hidden layer output # (skip connections are only between hidden layers, not to the output layer) # Output output = self.output_layer(x) if self.output_activation is not None: output = self.output_activation(output) return output def get_weights_list(self): """ Get weights as a list of numpy arrays (for compatibility with NPZ format). Returns ------- list of numpy.ndarray """ weights = [] for name, param in self.named_parameters(): weights.append(param.detach().cpu().numpy()) # Also include buffers (running mean/var for batch norm) for name, buffer in self.named_buffers(): weights.append(buffer.detach().cpu().numpy()) return weights def set_weights_list(self, weights, auto_convert_keras=True): """ Set weights from a list of numpy arrays. Supports automatic detection and conversion of Keras-format weights to PyTorch format for backward compatibility with pre-trained models. Parameters ---------- weights : list of numpy.ndarray auto_convert_keras : bool If True, automatically detect and convert Keras-format weights """ if auto_convert_keras and getattr(self, "_keras_config", None): keras_layers = self._keras_config.get("config", {}).get("layers", []) idx = 0 def assign_dense(layer, w, b): w = w.astype(numpy.float32) b = b.astype(numpy.float32) if w.shape == layer.weight.shape[::-1] or ( w.shape == layer.weight.shape and w.shape[0] == w.shape[1] ): w = w.T if w.shape != layer.weight.shape: raise ValueError( f"Weight shape mismatch for {layer}: got {w.shape}, " f"expected {layer.weight.shape}" ) if b.shape != layer.bias.shape: raise ValueError( f"Bias shape mismatch for {layer}: got {b.shape}, " f"expected {layer.bias.shape}" ) layer.weight.data = torch.from_numpy(w).to( device=layer.weight.device, dtype=layer.weight.dtype, ) layer.bias.data = torch.from_numpy(b).to( device=layer.bias.device, dtype=layer.bias.dtype, ) def assign_locally_connected(layer, w, b): w = w.astype(numpy.float32) b = b.astype(numpy.float32) if len(w.shape) == 5 and w.shape[1] == 1: out_len, _, k, in_ch, out_ch = w.shape w = w.squeeze(1) w = w.reshape(out_len, k * in_ch, out_ch) w = w.transpose(0, 2, 1) elif len(w.shape) == 3 and w.shape[0] == layer.output_length: # Keras (out_len, k*in_ch, out_ch) -> PyTorch (out_len, out_ch, in_ch*k) if w.shape[1] == layer.weight.shape[2] and w.shape[2] == layer.weight.shape[1]: w = w.transpose(0, 2, 1) else: kernel_size = layer.kernel_size out_len = w.shape[0] k_times_in_ch = w.shape[1] out_ch = w.shape[2] in_ch = k_times_in_ch // kernel_size w = w.reshape(out_len, kernel_size, in_ch, out_ch) w = w.transpose(0, 2, 1, 3) w = w.reshape(out_len, in_ch * kernel_size, out_ch) w = w.transpose(0, 2, 1) if w.shape != layer.weight.shape: raise ValueError( f"Weight shape mismatch for {layer}: got {w.shape}, " f"expected {layer.weight.shape}" ) if b.shape != layer.bias.shape: raise ValueError( f"Bias shape mismatch for {layer}: got {b.shape}, " f"expected {layer.bias.shape}" ) layer.weight.data = torch.from_numpy(w).to( device=layer.weight.device, dtype=layer.weight.dtype, ) layer.bias.data = torch.from_numpy(b).to( device=layer.bias.device, dtype=layer.bias.dtype, ) def assign_batch_norm(layer, gamma, beta, mean, var): layer.weight.data = torch.from_numpy( gamma.astype(numpy.float32) ).to(device=layer.weight.device, dtype=layer.weight.dtype) layer.bias.data = torch.from_numpy( beta.astype(numpy.float32) ).to(device=layer.bias.device, dtype=layer.bias.dtype) layer.running_mean.data = torch.from_numpy( mean.astype(numpy.float32) ).to( device=layer.running_mean.device, dtype=layer.running_mean.dtype, ) layer.running_var.data = torch.from_numpy( var.astype(numpy.float32) ).to( device=layer.running_var.device, dtype=layer.running_var.dtype, ) skip_keras_embedding = False keras_metadata = getattr(self, "_keras_metadata", None) if keras_metadata and keras_metadata.get("skip_embedding_weights", False): skip_keras_embedding = True for layer in keras_layers: layer_class = layer.get("class_name", "") layer_name = layer.get("config", {}).get("name", "") if layer_class == "Dense": w = weights[idx] b = weights[idx + 1] idx += 2 if layer_name == "output": assign_dense(self.output_layer, w, b) elif layer_name.startswith("dense_"): dense_idx = int(layer_name.split("_")[1]) assign_dense(self.dense_layers[dense_idx], w, b) elif layer_name.startswith("peptide_dense_"): dense_idx = int(layer_name.split("_")[2]) assign_dense(self.peptide_dense_layers[dense_idx], w, b) elif layer_name.startswith("allele_dense_"): dense_idx = int(layer_name.split("_")[2]) assign_dense(self.allele_dense_layers[dense_idx], w, b) elif layer_class == "LocallyConnected1D": w = weights[idx] b = weights[idx + 1] idx += 2 lc_idx = int(layer_name.split("_")[1]) assign_locally_connected(self.lc_layers[lc_idx], w, b) elif layer_class == "Embedding": w = weights[idx] idx += 1 if skip_keras_embedding: continue if self.allele_embedding is None: continue if w.shape == self.allele_embedding.weight.shape: target = self.allele_embedding.weight self.allele_embedding.weight.data = torch.from_numpy( w.astype(numpy.float32) ).to(device=target.device, dtype=target.dtype) elif layer_class == "BatchNormalization": gamma = weights[idx] beta = weights[idx + 1] mean = weights[idx + 2] var = weights[idx + 3] idx += 4 if layer_name == "batch_norm_early": if self.batch_norm_early is not None: assign_batch_norm(self.batch_norm_early, gamma, beta, mean, var) elif layer_name.startswith("batch_norm_"): bn_idx = int(layer_name.split("_")[2]) if self.batch_norms[bn_idx] is not None: assign_batch_norm(self.batch_norms[bn_idx], gamma, beta, mean, var) else: continue return idx = 0 # Check for keras metadata to know if we need to skip embedding weights keras_metadata = getattr(self, '_keras_metadata', None) skip_keras_embedding = False if keras_metadata and keras_metadata.get('skip_embedding_weights', False): skip_keras_embedding = True named_modules = dict(self.named_modules()) if auto_convert_keras else {} for name, param in self.named_parameters(): # Skip allele_embedding when loading Keras weights with placeholder if skip_keras_embedding and 'allele_embedding' in name: # Also skip the corresponding placeholder weight in the weights list # Placeholder embeddings have shape (0, embed_dim) while idx < len(weights) and len(weights[idx].shape) == 2 and weights[idx].shape[0] == 0: idx += 1 continue w = weights[idx].astype(numpy.float32) extra_keras_skip = 0 module = None if auto_convert_keras and "." in name: module_name = name.rsplit(".", 1)[0] module = named_modules.get(module_name) # Skip allele_embedding if shapes don't match (pan-allele models) # The embedding will be set by set_allele_representations later if 'allele_embedding' in name and w.shape != param.shape: # Advance index past this weight idx += 1 continue # Auto-detect and convert Keras weights if auto_convert_keras: # Dense/Linear layer: Keras (in, out) -> PyTorch (out, in) # Note: Must transpose even when shapes match (square matrices) # Check for weight (not bias) by looking at param name is_linear_weight = ('weight' in name and 'embedding' not in name and len(w.shape) == 2) if is_linear_weight and (w.shape == param.shape[::-1] or (w.shape == param.shape and w.shape[0] == w.shape[1])): w = w.T # LocallyConnected1D weight: Keras (out_len, 1, k, in_ch, out_ch) # -> PyTorch (out_len, out_ch, in_ch * k) elif len(w.shape) == 5 and w.shape[1] == 1: out_len, _, k, in_ch, out_ch = w.shape w = w.squeeze(1) # (out_len, k, in_ch, out_ch) w = w.reshape(out_len, k * in_ch, out_ch) w = w.transpose(0, 2, 1) # (out_len, out_ch, k * in_ch) # LocallyConnected1D weight (3D): Keras (out_len, k*in_ch, out_ch) # -> PyTorch (out_len, out_ch, in_ch*k) # Note: Keras stores kernel_positions as outer loop, channels as inner # PyTorch unfold produces channels as outer loop, kernel_positions as inner elif len(w.shape) == 3 and w.shape[0] == param.shape[0] and \ w.shape[1] == param.shape[2] and w.shape[2] == param.shape[1]: # LocallyConnected1D weight (3D): Keras (out_len, k*in_ch, out_ch) # -> PyTorch (out_len, out_ch, k*in_ch) w = w.transpose(0, 2, 1) # LocallyConnected1D bias: Keras (out_len * out_ch,) -> PyTorch (out_len, out_ch) elif len(w.shape) == 1 and len(param.shape) == 2 and \ w.shape[0] == param.shape[0] * param.shape[1]: w = w.reshape(param.shape) # BatchNorm: Keras provides gamma, beta, moving_mean, moving_var. # PyTorch exposes gamma/beta as params and moving stats as buffers. if module is not None and isinstance(module, torch.nn.BatchNorm1d): if name.endswith("bias") and idx + 2 < len(weights): running_mean = weights[idx + 1].astype(numpy.float32) running_var = weights[idx + 2].astype(numpy.float32) if module.running_mean.shape == running_mean.shape: module.running_mean.data = torch.from_numpy( running_mean ).to( device=module.running_mean.device, dtype=module.running_mean.dtype, ) if module.running_var.shape == running_var.shape: module.running_var.data = torch.from_numpy( running_var ).to( device=module.running_var.device, dtype=module.running_var.dtype, ) extra_keras_skip = 2 if w.shape != param.shape: raise ValueError( f"Weight shape mismatch for {name}: " f"got {weights[idx].shape}, expected {param.shape}" ) param.data = torch.from_numpy(w).to( device=param.device, dtype=param.dtype, ) idx += 1 + extra_keras_skip if not auto_convert_keras: named_modules_dict = dict(self.named_modules()) for name, buffer in self.named_buffers(): tensor = torch.from_numpy(weights[idx]).to( device=buffer.device, dtype=buffer.dtype, ) # Navigate to the correct submodule for nested buffers if "." in name: module_path, buffer_name = name.rsplit(".", 1) named_modules_dict[module_path]._buffers[buffer_name] = tensor else: self._buffers[name] = tensor idx += 1 def to_json(self): """ Serialize model configuration to JSON string. Returns ------- str JSON representation of model configuration """ import json # Extract layer configurations lc_layers_config = [] for lc_layer in self.lc_layers: lc_layers_config.append({ 'in_channels': lc_layer.in_channels, 'out_channels': lc_layer.out_channels, 'kernel_size': lc_layer.kernel_size, 'input_length': lc_layer.input_length, 'output_length': lc_layer.output_length, 'activation': lc_layer.activation_name, }) peptide_dense_sizes = [ layer.out_features for layer in self.peptide_dense_layers ] allele_dense_sizes = [ layer.out_features for layer in self.allele_dense_layers ] layer_sizes = [ layer.out_features for layer in self.dense_layers ] config = { 'class': 'Class1NeuralNetworkModel', 'peptide_encoding_shape': list(self.peptide_encoding_shape), 'has_allele': self.has_allele, 'peptide_allele_merge_method': self.peptide_allele_merge_method, 'peptide_allele_merge_activation': self.peptide_allele_merge_activation, 'dropout_probability': self.dropout_probability, 'topology': self.topology, 'num_outputs': self.num_outputs, 'activation': self.activation_name, 'output_activation': self.output_activation_name, 'locally_connected_layers': lc_layers_config, 'peptide_dense_layer_sizes': peptide_dense_sizes, 'allele_dense_layer_sizes': allele_dense_sizes, 'layer_sizes': layer_sizes, 'batch_normalization': self.batch_norm_early is not None, } return json.dumps(config, sort_keys=True) class Class1NeuralNetwork(object): """ Low level class I predictor consisting of a single neural network. Both single allele and pan-allele prediction are supported. Users will generally use Class1AffinityPredictor, which gives a higher-level interface and supports ensembles. """ network_hyperparameter_defaults = HyperparameterDefaults( allele_amino_acid_encoding="BLOSUM62", allele_dense_layer_sizes=[], peptide_encoding={ "vector_encoding_name": "BLOSUM62", "alignment_method": "pad_middle", "left_edge": 4, "right_edge": 4, "max_length": 15, }, peptide_dense_layer_sizes=[], peptide_allele_merge_method="multiply", peptide_allele_merge_activation="", layer_sizes=[32], dense_layer_l1_regularization=0.001, dense_layer_l2_regularization=0.0, activation="tanh", init="glorot_uniform", output_activation="sigmoid", dropout_probability=0.0, batch_normalization=False, locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], topology="feedforward", num_outputs=1, ) """ Hyperparameters (and their default values) that affect the neural network architecture. """ compile_hyperparameter_defaults = HyperparameterDefaults( loss="custom:mse_with_inequalities", optimizer="rmsprop", learning_rate=None, ) """ Loss and optimizer hyperparameters. """ fit_hyperparameter_defaults = HyperparameterDefaults( max_epochs=500, validation_split=0.1, early_stopping=True, minibatch_size=128, data_dependent_initialization_method=None, random_negative_affinity_min=20000.0, random_negative_affinity_max=50000.0, random_negative_output_indices=None, ).extend(RandomNegativePeptides.hyperparameter_defaults) """ Hyperparameters for neural network training. """ early_stopping_hyperparameter_defaults = HyperparameterDefaults( patience=20, min_delta=0.0, ) """ Hyperparameters for early stopping. """ miscelaneous_hyperparameter_defaults = HyperparameterDefaults( train_data={}, ) """ Miscelaneous hyperaparameters. These parameters are not used by this class but may be interpreted by other code. """ hyperparameter_defaults = ( network_hyperparameter_defaults.extend(compile_hyperparameter_defaults) .extend(fit_hyperparameter_defaults) .extend(early_stopping_hyperparameter_defaults) .extend(miscelaneous_hyperparameter_defaults) ) """ Combined set of all supported hyperparameters and their default values. """ # Hyperparameter renames. hyperparameter_renames = { "use_embedding": None, "pseudosequence_use_embedding": None, "monitor": None, "min_delta": None, "verbose": None, "mode": None, "take_best_epoch": None, "kmer_size": None, "peptide_amino_acid_encoding": None, "embedding_input_dim": None, "embedding_output_dim": None, "embedding_init_method": None, "left_edge": None, "right_edge": None, } @classmethod def apply_hyperparameter_renames(cls, hyperparameters): """ Handle hyperparameter renames. Parameters ---------- hyperparameters : dict Returns ------- dict : updated hyperparameters """ for from_name, to_name in cls.hyperparameter_renames.items(): if from_name in hyperparameters: value = hyperparameters.pop(from_name) if to_name: hyperparameters[to_name] = value return hyperparameters def __init__(self, **hyperparameters): self.hyperparameters = self.hyperparameter_defaults.with_defaults( self.apply_hyperparameter_renames(hyperparameters) ) self._network = None self.network_json = None self.network_weights = None self.network_weights_loader = None self.fit_info = [] self.prediction_cache = weakref.WeakKeyDictionary() MODELS_CACHE = {} """ Process-wide model cache, a map from: architecture JSON string to (PyTorch model, existing network weights) """ @classmethod def clear_model_cache(klass): """ Clear the model cache. """ klass.MODELS_CACHE.clear() @classmethod def borrow_cached_network(klass, network_json, network_weights): """ Return a PyTorch model with the specified architecture and weights. As an optimization, when possible this will reuse architectures from a process-wide cache. Parameters ---------- network_json : string of JSON network_weights : list of numpy.array Returns ------- Class1NeuralNetworkModel """ assert network_weights is not None key = klass.model_cache_key(network_json) config = json.loads(network_json) # Detect if weights are from Keras or PyTorch format # Keras JSON has 'class_name': 'Model' or 'Functional'; PyTorch has 'hyperparameters' is_keras_format = config.get('class_name') in ('Model', 'Functional') if key not in klass.MODELS_CACHE: # Cache miss - create new model network = klass._create_model_from_config(config) existing_weights = None else: # Cache hit (network, existing_weights) = klass.MODELS_CACHE[key] if existing_weights is not network_weights: network.set_weights_list(network_weights, auto_convert_keras=is_keras_format) klass.MODELS_CACHE[key] = (network, network_weights) return network @classmethod def _parse_keras_json_config(cls, config): """ Parse a legacy Keras model JSON config to extract hyperparameters. Parameters ---------- config : dict Keras model JSON config with 'class_name', 'config', etc. Returns ------- tuple of (dict, dict) First dict: Hyperparameters dict compatible with Class1NeuralNetwork Second dict: Metadata about Keras model structure (e.g., embedding info) """ layers = config.get('config', {}).get('layers', []) hyperparameters = { 'locally_connected_layers': [], 'layer_sizes': [], 'activation': 'tanh', 'output_activation': 'sigmoid', 'dropout_probability': 0.0, 'batch_normalization': False, 'dense_layer_l1_regularization': 0.001, 'dense_layer_l2_regularization': 0.0, 'peptide_allele_merge_method': 'multiply', # Default } # Metadata about Keras structure keras_metadata = { 'has_embedding': False, 'embedding_input_dim': 0, 'embedding_output_dim': 0, 'skip_embedding_weights': False, } dense_layers = [] peptide_dense_sizes = [] allele_dense_sizes = [] concatenate_count = 0 for layer in layers: layer_class = layer.get('class_name', '') layer_config = layer.get('config', {}) if layer_class == 'LocallyConnected1D': lc_config = { 'filters': layer_config.get('filters', 8), 'kernel_size': layer_config.get('kernel_size', [3])[0] if isinstance( layer_config.get('kernel_size', [3]), list ) else layer_config.get('kernel_size', 3), 'activation': layer_config.get('activation', 'tanh'), } hyperparameters['locally_connected_layers'].append(lc_config) hyperparameters['activation'] = lc_config['activation'] elif layer_class == 'Dense': units = layer_config.get('units', 32) activation = layer_config.get('activation', 'tanh') layer_name = layer_config.get('name', '') if layer_name.startswith('peptide_dense_'): peptide_dense_sizes.append(units) elif layer_name.startswith('allele_dense_'): allele_dense_sizes.append(units) else: dense_layers.append({'units': units, 'activation': activation}) # Extract regularization from first dense layer kernel_reg = layer_config.get('kernel_regularizer') if kernel_reg and isinstance(kernel_reg, dict): reg_config = kernel_reg.get('config', {}) if 'l1' in reg_config: hyperparameters['dense_layer_l1_regularization'] = reg_config['l1'] if 'l2' in reg_config: hyperparameters['dense_layer_l2_regularization'] = reg_config['l2'] elif layer_class == 'Dropout': rate = layer_config.get('rate', 0.0) hyperparameters['dropout_probability'] = 1.0 - rate elif layer_class == 'BatchNormalization': hyperparameters['batch_normalization'] = True elif layer_class == 'Embedding': keras_metadata['has_embedding'] = True keras_metadata['embedding_input_dim'] = layer_config.get('input_dim', 0) keras_metadata['embedding_output_dim'] = layer_config.get('output_dim', 0) # If input_dim is 0, it's a placeholder and weights should be skipped if layer_config.get('input_dim', 0) == 0: keras_metadata['skip_embedding_weights'] = True elif layer_class == 'Concatenate': concatenate_count += 1 # Only set merge_method to concatenate if there's just one Concatenate # and it's likely for peptide-allele merging (not DenseNet skip connections) if concatenate_count == 1: hyperparameters['peptide_allele_merge_method'] = 'concatenate' elif layer_class == 'Multiply': hyperparameters['peptide_allele_merge_method'] = 'multiply' # Multiple Concatenate layers indicate DenseNet topology with skip connections # Note: The first Concatenate is typically for peptide-allele merging, # subsequent ones are for DenseNet skip connections if concatenate_count > 1: hyperparameters['topology'] = 'with-skip-connections' # Keep the merge method as detected (concatenate from first Concatenate layer) # The last Dense layer is the output layer if dense_layers: hyperparameters['output_activation'] = dense_layers[-1]['activation'] hyperparameters['num_outputs'] = dense_layers[-1]['units'] # All other Dense layers contribute to layer_sizes hyperparameters['layer_sizes'] = [d['units'] for d in dense_layers[:-1]] if dense_layers[:-1]: hyperparameters['activation'] = dense_layers[0]['activation'] if peptide_dense_sizes: hyperparameters['peptide_dense_layer_sizes'] = peptide_dense_sizes if allele_dense_sizes: hyperparameters['allele_dense_layer_sizes'] = allele_dense_sizes return hyperparameters, keras_metadata @classmethod def _create_model_from_config(cls, config, instance_hyperparameters=None): """Create a model from a configuration dictionary. Parameters ---------- config : dict Configuration dictionary (either Keras JSON or hyperparameters dict) instance_hyperparameters : dict, optional Hyperparameters from the Class1NeuralNetwork instance. These take precedence for things like peptide_encoding. """ keras_metadata = None # Check if this is a merged network config if config.get('merged_networks'): return cls._create_merged_model_from_config(config, instance_hyperparameters) # Check if this is a legacy Keras JSON config if config.get('class_name') in ('Model', 'Functional'): hyperparameters, keras_metadata = cls._parse_keras_json_config(config) else: # Extract hyperparameters from config (new format) hyperparameters = config.get('hyperparameters', config) # Merge with instance hyperparameters if provided # Instance hyperparameters take precedence for things like peptide_encoding if instance_hyperparameters: # Copy to avoid modifying original merged = dict(instance_hyperparameters) # Update with parsed hyperparameters (architecture-specific settings) for key in ['layer_sizes', 'locally_connected_layers', 'dropout_probability', 'batch_normalization', 'activation', 'output_activation', 'peptide_allele_merge_method']: if key in hyperparameters: merged[key] = hyperparameters[key] hyperparameters = merged # Create a temporary instance to get encoding shape temp = cls(**hyperparameters) peptide_encoding_shape = temp.peptides_to_network_input([]).shape[1:] # Get allele representations if present allele_representations = config.get('allele_representations') if allele_representations is not None: allele_representations = numpy.array(allele_representations) # For pan-allele Keras models with placeholder embedding (input_dim=0), # create a placeholder allele representation to ensure correct architecture if (allele_representations is None and keras_metadata is not None and keras_metadata.get('has_embedding', False) and keras_metadata.get('embedding_output_dim', 0) > 0): # Create placeholder with 1 allele and correct embedding dim # This will be replaced by set_allele_representations later embedding_dim = keras_metadata['embedding_output_dim'] allele_representations = numpy.zeros((1, embedding_dim), dtype=numpy.float32) # For PyTorch-format configs without allele_representations but with # allele_amino_acid_encoding (pan-allele models), create placeholder # Check has_allele flag to distinguish pan-allele from allele-specific models has_allele = config.get('has_allele', True) # Default True for backward compat if (allele_representations is None and keras_metadata is None and has_allele and hyperparameters.get('allele_amino_acid_encoding')): # Compute embedding dimension from encoding from .amino_acid import ENCODING_DATA_FRAMES encoding_name = hyperparameters['allele_amino_acid_encoding'] encoding_df = ENCODING_DATA_FRAMES.get(encoding_name) if encoding_df is not None: # Standard allele pseudosequence length is 37 amino acids allele_seq_length = 37 embedding_dim = allele_seq_length * len(encoding_df.columns) allele_representations = numpy.zeros((1, embedding_dim), dtype=numpy.float32) model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_encoding_shape, allele_representations=allele_representations, locally_connected_layers=hyperparameters.get('locally_connected_layers', []), peptide_dense_layer_sizes=hyperparameters.get('peptide_dense_layer_sizes', []), allele_dense_layer_sizes=hyperparameters.get('allele_dense_layer_sizes', []), layer_sizes=hyperparameters.get('layer_sizes', [32]), peptide_allele_merge_method=hyperparameters.get('peptide_allele_merge_method', 'multiply'), peptide_allele_merge_activation=hyperparameters.get('peptide_allele_merge_activation', ''), activation=hyperparameters.get('activation', 'tanh'), output_activation=hyperparameters.get('output_activation', 'sigmoid'), dropout_probability=hyperparameters.get('dropout_probability', 0.0), batch_normalization=hyperparameters.get('batch_normalization', False), dense_layer_l1_regularization=hyperparameters.get('dense_layer_l1_regularization', 0.001), dense_layer_l2_regularization=hyperparameters.get('dense_layer_l2_regularization', 0.0), topology=hyperparameters.get('topology', 'feedforward'), num_outputs=hyperparameters.get('num_outputs', 1), init=hyperparameters.get('init', 'glorot_uniform'), ) # Store keras metadata and config for weight loading if keras_metadata is not None: model._keras_metadata = keras_metadata model._keras_config = config return model @classmethod def _create_merged_model_from_config(cls, config, instance_hyperparameters=None): """Create a merged model from a configuration dictionary. Parameters ---------- config : dict Configuration dictionary with 'merged_networks' key instance_hyperparameters : dict, optional Hyperparameters from the Class1NeuralNetwork instance. """ merged_configs = config['merged_networks'] merge_method = config.get('merge_method', 'average') # Create a temporary instance to get encoding shape base_hyperparameters = config.get('hyperparameters', {}) if instance_hyperparameters: base_hyperparameters = dict(instance_hyperparameters) base_hyperparameters.update(config.get('hyperparameters', {})) temp = cls(**base_hyperparameters) peptide_encoding_shape = temp.peptides_to_network_input([]).shape[1:] # Create placeholder allele representations for pan-allele models allele_representations = None if base_hyperparameters.get('allele_amino_acid_encoding'): from .amino_acid import ENCODING_DATA_FRAMES encoding_name = base_hyperparameters['allele_amino_acid_encoding'] encoding_df = ENCODING_DATA_FRAMES.get(encoding_name) if encoding_df is not None: allele_seq_length = 37 embedding_dim = allele_seq_length * len(encoding_df.columns) allele_representations = numpy.zeros((1, embedding_dim), dtype=numpy.float32) # Create sub-networks sub_networks = [] for sub_config in merged_configs: model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_encoding_shape, allele_representations=allele_representations, locally_connected_layers=sub_config.get('locally_connected_layers', []), peptide_dense_layer_sizes=sub_config.get('peptide_dense_layer_sizes', []), allele_dense_layer_sizes=sub_config.get('allele_dense_layer_sizes', []), layer_sizes=sub_config.get('layer_sizes', [32]), peptide_allele_merge_method=sub_config.get('peptide_allele_merge_method', 'multiply'), peptide_allele_merge_activation=sub_config.get('peptide_allele_merge_activation', ''), activation=sub_config.get('activation', 'tanh'), output_activation=sub_config.get('output_activation', 'sigmoid'), dropout_probability=sub_config.get('dropout_probability', 0.0), batch_normalization=sub_config.get('batch_normalization', False), dense_layer_l1_regularization=base_hyperparameters.get('dense_layer_l1_regularization', 0.001), dense_layer_l2_regularization=base_hyperparameters.get('dense_layer_l2_regularization', 0.0), topology=sub_config.get('topology', 'feedforward'), num_outputs=sub_config.get('num_outputs', 1), init=base_hyperparameters.get('init', 'glorot_uniform'), ) sub_networks.append(model) return MergedClass1NeuralNetwork(sub_networks, merge_method=merge_method) @staticmethod def model_cache_key(network_json): """ Given a JSON description of a neural network, return a cache key. Parameters ---------- network_json : string Returns ------- string """ # Remove regularization settings as they don't affect predictions def drop_properties(d): if isinstance(d, dict): d.pop('dense_layer_l1_regularization', None) d.pop('dense_layer_l2_regularization', None) return d description = json.loads(network_json, object_hook=drop_properties) return json.dumps(description) @staticmethod def keras_network_cache_key(network_json): """ Backward-compatible alias for ``model_cache_key``. """ return Class1NeuralNetwork.model_cache_key(network_json) def network(self, borrow=False): """ Return the PyTorch model associated with this predictor. Parameters ---------- borrow : bool Whether to return a cached model if possible Returns ------- Class1NeuralNetworkModel """ if self._network is None and self.network_json is not None: self.load_weights() if borrow: return self.borrow_cached_network( self.network_json, self.network_weights ) else: config = json.loads(self.network_json) # Detect if weights are from Keras or PyTorch format # Keras JSON has 'class_name': 'Model' or 'Functional'; PyTorch has 'hyperparameters' is_keras_format = config.get('class_name') in ('Model', 'Functional') # Pass this instance's hyperparameters to preserve peptide_encoding etc. self._network = self._create_model_from_config( config, instance_hyperparameters=self.hyperparameters) if self.network_weights is not None: self._network.set_weights_list( self.network_weights, auto_convert_keras=is_keras_format ) self.network_json = None self.network_weights = None return self._network def update_network_description(self): """ Update self.network_json and self.network_weights properties based on this instances's neural network. """ if self._network is not None: config = { 'hyperparameters': dict(self.hyperparameters), } # Check if this is a merged network if isinstance(self._network, MergedClass1NeuralNetwork): # Save sub-network configs for merged networks sub_configs = [] for subnet in self._network.networks: sub_config = {} # Get the architecture info from the network itself sub_config['layer_sizes'] = [ layer.out_features for layer in subnet.dense_layers ] sub_config['locally_connected_layers'] = [ {'filters': layer.out_channels, 'kernel_size': layer.kernel_size} for layer in subnet.lc_layers ] if hasattr(subnet, 'lc_layers') else [] sub_config['peptide_dense_layer_sizes'] = [ layer.out_features for layer in subnet.peptide_dense_layers ] if hasattr(subnet, 'peptide_dense_layers') else [] sub_config['allele_dense_layer_sizes'] = [ layer.out_features for layer in subnet.allele_dense_layers ] if hasattr(subnet, 'allele_dense_layers') else [] # MHCflurry hyperparameters use keep probability, not # PyTorch Dropout.p (drop probability). sub_config['dropout_probability'] = getattr( subnet, 'dropout_probability', 0.0, ) sub_config['batch_normalization'] = ( hasattr(subnet, 'batch_norms') and bool(subnet.batch_norms) and any(bn is not None for bn in subnet.batch_norms) ) sub_config['activation'] = subnet.activation_name sub_config['output_activation'] = subnet.output_activation_name sub_config['peptide_allele_merge_method'] = subnet.peptide_allele_merge_method sub_config['peptide_allele_merge_activation'] = subnet.peptide_allele_merge_activation sub_config['topology'] = subnet.topology sub_config['num_outputs'] = subnet.output_layer.out_features sub_configs.append(sub_config) config['merged_networks'] = sub_configs config['merge_method'] = self._network.merge_method else: # Save whether the network has allele features config['has_allele'] = getattr(self._network, 'has_allele', False) # Save allele representations if present in the network if hasattr(self._network, 'allele_embedding') and self._network.allele_embedding is not None: allele_embed = self._network.allele_embedding.weight.detach().cpu().numpy() config['allele_representations'] = allele_embed.tolist() self.network_json = json.dumps(config) self.network_weights = self._network.get_weights_list() def get_config(self): """ serialize to a dict all attributes except model weights Returns ------- dict """ self.update_network_description() result = dict(self.__dict__) result["_network"] = None result["network_weights"] = None result["network_weights_loader"] = None result["prediction_cache"] = None return result @classmethod def from_config(cls, config, weights=None, weights_loader=None): """ deserialize from a dict returned by get_config(). Supports both: - Native Class1NeuralNetwork configs with 'hyperparameters' key - Legacy Keras model JSON configs with 'class_name', 'config', etc. Parameters ---------- config : dict weights : list of array, optional Network weights to restore weights_loader : callable, optional Function to call (no arguments) to load weights when needed Returns ------- Class1NeuralNetwork """ config = dict(config) # Check if this is a legacy Keras JSON config if config.get('class_name') in ('Model', 'Functional'): hyperparameters, keras_metadata = cls._parse_keras_json_config(config) instance = cls(**hyperparameters) # Store metadata for weight loading instance._keras_metadata = keras_metadata # Store the original config as network_json for lazy network creation instance.network_json = json.dumps(config) else: # Standard Class1NeuralNetwork config format instance = cls(**config.pop("hyperparameters")) instance.__dict__.update(config) instance.network_weights = weights instance.network_weights_loader = weights_loader instance.prediction_cache = weakref.WeakKeyDictionary() return instance def load_weights(self): """ Load weights by evaluating self.network_weights_loader, if needed. """ if self.network_weights_loader: self.network_weights = self.network_weights_loader() self.network_weights_loader = None def get_weights(self): """ Get the network weights Returns ------- list of numpy.array giving weights for each layer or None if there is no network """ self.update_network_description() self.load_weights() return self.network_weights def get_weights_list(self): """ Get the network weights as a list of numpy arrays. Returns ------- list of numpy.array giving weights for each layer or None if there is no network """ return self.get_weights() def set_weights_list(self, weights, auto_convert_keras=True): """ Set the network weights from a list of numpy arrays. If a network exists, the weights are set directly on it. Otherwise, the weights are stored and will be applied when the network is created. Parameters ---------- weights : list of numpy.array Weights for each layer auto_convert_keras : bool If True, attempt to auto-detect and convert Keras weight formats to PyTorch format. Default True. """ if self._network is not None: # Network exists, set weights directly self._network.set_weights_list(weights, auto_convert_keras=auto_convert_keras) else: # Store weights for later application self.network_weights = weights # Store flag for auto-conversion self._auto_convert_keras_weights = auto_convert_keras def __getstate__(self): """ serialize to a dict. Model weights are included. For pickle support. Returns ------- dict """ self.update_network_description() self.load_weights() result = dict(self.__dict__) result["_network"] = None result["prediction_cache"] = None return result def __setstate__(self, state): """ Deserialize. For pickle support. """ self.__dict__.update(state) self.prediction_cache = weakref.WeakKeyDictionary() def peptides_to_network_input(self, peptides): """ Encode peptides to the fixed-length encoding expected by the neural network (which depends on the architecture). Parameters ---------- peptides : EncodableSequences or list of string Returns ------- numpy.array """ encoder = EncodableSequences.create(peptides) encoded = encoder.variable_length_to_fixed_length_vector_encoding( **self.hyperparameters["peptide_encoding"] ) assert len(encoded) == len(peptides) return encoded @property def supported_peptide_lengths(self): """ (minimum, maximum) lengths of peptides supported, inclusive. Returns ------- (int, int) tuple """ try: self.peptides_to_network_input([""]) except EncodingError as e: return e.supported_peptide_lengths raise RuntimeError("peptides_to_network_input did not raise") def allele_encoding_to_network_input(self, allele_encoding): """ Encode alleles to the fixed-length encoding expected by the neural network (which depends on the architecture). Parameters ---------- allele_encoding : AlleleEncoding Returns ------- (numpy.array, numpy.array) Indices and allele representations. """ return ( allele_encoding.indices.values, allele_encoding.allele_representations( self.hyperparameters["allele_amino_acid_encoding"] ), ) @staticmethod def data_dependent_weights_initialization(network, x_dict=None, method="lsuv", verbose=1): """ Data dependent weights initialization. Parameters ---------- network : Class1NeuralNetworkModel x_dict : dict of string -> numpy.ndarray Training data method : string Initialization method. Currently only "lsuv" is supported. verbose : int Status updates printed to stdout if verbose > 0 """ if verbose: print("Performing data-dependent init: ", method) if method == "lsuv": assert x_dict is not None, "Data required for LSUV init" lsuv_init(network, x_dict, verbose=verbose > 0) else: raise RuntimeError("Unsupported init method: ", method) @staticmethod def _regularized_parameters(network): """ Parameters subject to master-branch dense kernel regularization. """ for name, param in network.named_parameters(): if not param.requires_grad or not name.endswith("weight"): continue if any(part in name for part in ( "peptide_dense_layers", "allele_dense_layers", "dense_layers")): yield param @staticmethod def _regularization_penalty(parameters, l1=0.0, l2=0.0): """ Match Keras kernel_regularizer semantics used on dense kernels. """ parameters = tuple(parameters) if not parameters or (not l1 and not l2): return None penalty = torch.zeros((), device=parameters[0].device) for param in parameters: if l1: penalty = penalty + (l1 * param.abs().sum()) if l2: penalty = penalty + (l2 * param.square().sum()) return penalty def get_device(self): """Get the PyTorch device to use.""" return get_pytorch_device() def fit_generator( self, generator, validation_peptide_encoding, validation_affinities, validation_allele_encoding=None, validation_inequalities=None, validation_output_indices=None, steps_per_epoch=10, epochs=1000, min_epochs=0, patience=10, min_delta=0.0, verbose=1, progress_callback=None, progress_preamble="", progress_print_interval=5.0): """ Fit using a generator. Does not support many of the features of fit(), such as random negative peptides. """ device = self.get_device() fit_info = collections.defaultdict(list) loss_obj = get_pytorch_loss(self.hyperparameters["loss"]) ( validation_allele_input, allele_representations, ) = self.allele_encoding_to_network_input(validation_allele_encoding) if self.network() is None: self._network = self.make_network( allele_representations=allele_representations, **self.network_hyperparameter_defaults.subselect(self.hyperparameters) ) if verbose > 0: print(self.network()) network = self.network() network.to(device) self.set_allele_representations(allele_representations) # Setup optimizer optimizer = self._create_optimizer(network) if self.hyperparameters["learning_rate"] is not None: for param_group in optimizer.param_groups: param_group['lr'] = self.hyperparameters["learning_rate"] fit_info["learning_rate"] = optimizer.param_groups[0]['lr'] regularization_parameters = tuple(self._regularized_parameters(network)) l1_reg = self.hyperparameters["dense_layer_l1_regularization"] l2_reg = self.hyperparameters["dense_layer_l2_regularization"] # Prepare validation data validation_x_dict = { "peptide": self.peptides_to_network_input(validation_peptide_encoding), "allele": validation_allele_input, } encode_y_kwargs = {} if validation_inequalities is not None: encode_y_kwargs["inequalities"] = validation_inequalities if validation_output_indices is not None: encode_y_kwargs["output_indices"] = validation_output_indices output = loss_obj.encode_y(from_ic50(validation_affinities), **encode_y_kwargs) mutable_generator_state = { "yielded_values": 0 } def wrapped_generator(): for alleles, peptides, affinities in generator: (allele_encoding_input, _) = self.allele_encoding_to_network_input( alleles ) x_dict = { "peptide": self.peptides_to_network_input(peptides), "allele": allele_encoding_input, } y = from_ic50(affinities) yield (x_dict, y) mutable_generator_state["yielded_values"] += len(affinities) start = time.time() iterator = wrapped_generator() # Data dependent init data_dependent_init = self.hyperparameters[ "data_dependent_initialization_method" ] if data_dependent_init and not self.fit_info: first_chunk = next(iterator) self.data_dependent_weights_initialization( network, first_chunk[0], method=data_dependent_init, verbose=verbose, ) iterator = itertools.chain([first_chunk], iterator) min_val_loss_iteration = None min_val_loss = None last_progress_print = 0 epoch = 1 while True: epoch_start_time = time.time() network.train() epoch_losses = [] for step in range(steps_per_epoch): try: x_dict, y = next(iterator) except StopIteration: break # Convert to tensors peptide_tensor = torch.from_numpy(x_dict["peptide"]).float().to(device) allele_tensor = torch.from_numpy(x_dict["allele"]).float().to(device) y_tensor = torch.from_numpy(y.astype(numpy.float32)).to(device) optimizer.zero_grad() inputs = {"peptide": peptide_tensor, "allele": allele_tensor} predictions = network(inputs) loss = loss_obj(predictions, y_tensor) regularization_penalty = self._regularization_penalty( regularization_parameters, l1=l1_reg, l2=l2_reg, ) if regularization_penalty is not None: loss = loss + regularization_penalty loss.backward() optimizer.step() epoch_losses.append(loss.item()) # Compute validation loss network.eval() with torch.no_grad(): val_peptide = torch.from_numpy(validation_x_dict["peptide"]).float().to(device) val_allele = torch.from_numpy(validation_x_dict["allele"]).float().to(device) val_y = torch.from_numpy(output.astype(numpy.float32)).to(device) val_inputs = {"peptide": val_peptide, "allele": val_allele} val_predictions = network(val_inputs) val_loss = loss_obj(val_predictions, val_y) regularization_penalty = self._regularization_penalty( regularization_parameters, l1=l1_reg, l2=l2_reg, ) if regularization_penalty is not None: val_loss = val_loss + regularization_penalty val_loss = val_loss.item() epoch_time = time.time() - epoch_start_time train_loss = numpy.mean(epoch_losses) if epoch_losses else float('nan') fit_info["loss"].append(train_loss) fit_info["val_loss"].append(val_loss) if min_val_loss is None or val_loss < min_val_loss - min_delta: min_val_loss = val_loss min_val_loss_iteration = epoch patience_epoch_threshold = min( epochs, max(min_val_loss_iteration + patience, min_epochs) ) progress_message = ( "epoch %3d/%3d [%0.2f sec.]: loss=%g val_loss=%g. Min val " "loss %g at epoch %s. Cum. points: %d. Stop at epoch %d." % ( epoch, epochs, epoch_time, train_loss, val_loss, min_val_loss, min_val_loss_iteration, mutable_generator_state["yielded_values"], patience_epoch_threshold, ) ).strip() if progress_print_interval is not None and ( time.time() - last_progress_print > progress_print_interval ): print(progress_preamble, progress_message) last_progress_print = time.time() if progress_callback: progress_callback() if epoch >= patience_epoch_threshold: if progress_print_interval is not None: print(progress_preamble, "STOPPING", progress_message) break epoch += 1 fit_info["time"] = time.time() - start fit_info["num_points"] = mutable_generator_state["yielded_values"] self.fit_info.append(dict(fit_info)) def _create_optimizer(self, network): """Create an optimizer for the network.""" optimizer_name = self.hyperparameters["optimizer"].lower() lr = ( self.hyperparameters["learning_rate"] if self.hyperparameters["learning_rate"] is not None else 0.001 ) if optimizer_name == "rmsprop": # Match Keras defaults: rho=0.9, epsilon=1e-07 return torch.optim.RMSprop( network.parameters(), lr=lr, alpha=0.9, eps=1e-07) elif optimizer_name == "adam": # Match Keras default epsilon=1e-07. return torch.optim.Adam(network.parameters(), lr=lr, eps=1e-07) elif optimizer_name == "sgd": return torch.optim.SGD(network.parameters(), lr=lr) else: return torch.optim.Adam(network.parameters(), lr=lr, eps=1e-07) def fit( self, peptides, affinities, allele_encoding=None, inequalities=None, output_indices=None, sample_weights=None, shuffle_permutation=None, verbose=1, progress_callback=None, progress_preamble="", progress_print_interval=5.0): """ Fit the neural network. Parameters ---------- peptides : EncodableSequences or list of string affinities : list of float nM affinities. Must be same length of as peptides. allele_encoding : AlleleEncoding If not specified, the model will be a single-allele predictor. inequalities : list of string, each element one of ">", "<", or "=". output_indices : list of int For multi-output models only. sample_weights : list of float shuffle_permutation : list of int verbose : int progress_callback : function progress_preamble : string progress_print_interval : float """ device = self.get_device() encodable_peptides = EncodableSequences.create(peptides) peptide_encoding = self.peptides_to_network_input(encodable_peptides) fit_info = collections.defaultdict(list) random_negatives_planner = RandomNegativePeptides( **RandomNegativePeptides.hyperparameter_defaults.subselect( self.hyperparameters ) ) random_negatives_planner.plan( peptides=encodable_peptides.sequences, affinities=affinities, alleles=allele_encoding.alleles if allele_encoding else None, inequalities=inequalities, ) random_negatives_allele_encoding = None if allele_encoding is not None: random_negatives_allele_encoding = AlleleEncoding( random_negatives_planner.get_alleles(), borrow_from=allele_encoding ) num_random_negatives = random_negatives_planner.get_total_count() y_values = from_ic50(numpy.asarray(affinities)) assert numpy.isnan(y_values).sum() == 0, y_values if inequalities is not None: adjusted_inequalities = ( pandas.Series(inequalities) .map({ "=": "=", ">": "<", "<": ">", }) .values ) else: adjusted_inequalities = numpy.tile("=", len(y_values)) if len(adjusted_inequalities) != len(y_values): raise ValueError("Inequalities and y_values must have same length") x_dict_without_random_negatives = { "peptide": peptide_encoding, } allele_representations = None if allele_encoding is not None: ( allele_encoding_input, allele_representations, ) = self.allele_encoding_to_network_input(allele_encoding) x_dict_without_random_negatives["allele"] = allele_encoding_input # Shuffle if shuffle_permutation is None: shuffle_permutation = numpy.random.permutation(len(y_values)) y_values = y_values[shuffle_permutation] peptide_encoding = peptide_encoding[shuffle_permutation] adjusted_inequalities = adjusted_inequalities[shuffle_permutation] for key in x_dict_without_random_negatives: x_dict_without_random_negatives[key] = x_dict_without_random_negatives[key][ shuffle_permutation ] if sample_weights is not None: sample_weights = numpy.array(sample_weights, copy=False)[shuffle_permutation] if output_indices is not None: output_indices = numpy.array(output_indices, copy=False)[shuffle_permutation] loss_obj = get_pytorch_loss(self.hyperparameters["loss"]) if not loss_obj.supports_inequalities and ( any(inequality != "=" for inequality in adjusted_inequalities) ): raise ValueError("Loss %s does not support inequalities" % loss_obj) if ( not loss_obj.supports_multiple_outputs and output_indices is not None and (output_indices != 0).any() ): raise ValueError("Loss %s does not support multiple outputs" % loss_obj) if self.hyperparameters["num_outputs"] != 1: if output_indices is None: raise ValueError("Must supply output_indices for multi-output predictor") if self.network() is None: self._network = self.make_network( allele_representations=allele_representations, **self.network_hyperparameter_defaults.subselect(self.hyperparameters) ) if verbose > 0: print(self.network()) network = self.network() network.to(device) if allele_representations is not None: self.set_allele_representations(allele_representations) optimizer = self._create_optimizer(network) if self.hyperparameters["learning_rate"] is not None: for param_group in optimizer.param_groups: param_group['lr'] = self.hyperparameters["learning_rate"] fit_info["learning_rate"] = optimizer.param_groups[0]['lr'] # Prepare y values with random negatives if loss_obj.supports_inequalities: random_negative_ic50 = self.hyperparameters["random_negative_affinity_min"] random_negative_target = from_ic50(random_negative_ic50) y_with_negatives = numpy.concatenate([ numpy.tile(random_negative_target, num_random_negatives), y_values, ]) adjusted_inequalities_with_random_negatives = ( ["<"] * num_random_negatives + list(adjusted_inequalities) ) else: y_with_negatives = numpy.concatenate([ from_ic50( numpy.random.uniform( self.hyperparameters["random_negative_affinity_min"], self.hyperparameters["random_negative_affinity_max"], num_random_negatives, ) ), y_values, ]) adjusted_inequalities_with_random_negatives = None if sample_weights is not None: sample_weights_with_negatives = numpy.concatenate([ numpy.ones(num_random_negatives), sample_weights ]) else: sample_weights_with_negatives = None if output_indices is not None: random_negative_output_indices = ( self.hyperparameters["random_negative_output_indices"] if self.hyperparameters["random_negative_output_indices"] else list(range(0, self.hyperparameters["num_outputs"])) ) output_indices_with_negatives = numpy.concatenate([ pandas.Series(random_negative_output_indices, dtype=int) .sample(n=num_random_negatives, replace=True) .values, output_indices, ]) else: output_indices_with_negatives = None # Encode y encode_y_kwargs = {} if adjusted_inequalities_with_random_negatives is not None: encode_y_kwargs["inequalities"] = adjusted_inequalities_with_random_negatives if output_indices_with_negatives is not None: encode_y_kwargs["output_indices"] = output_indices_with_negatives y_encoded = loss_obj.encode_y(y_with_negatives, **encode_y_kwargs) min_val_loss_iteration = None min_val_loss = None needs_initialization = ( self.hyperparameters["data_dependent_initialization_method"] is not None and not self.fit_info ) start = time.time() last_progress_print = None # Validation split (fixed across epochs; only training data is reshuffled) val_split = self.hyperparameters["validation_split"] n_total = len(y_encoded) n_val = int(n_total * val_split) n_train = n_total - n_val indices = numpy.arange(n_total) if n_val > 0: train_indices_base = indices[:n_train] val_indices = indices[n_train:] else: train_indices_base = indices val_indices = None regularization_parameters = tuple(self._regularized_parameters(network)) l1_reg = self.hyperparameters["dense_layer_l1_regularization"] l2_reg = self.hyperparameters["dense_layer_l2_regularization"] for epoch in range(self.hyperparameters["max_epochs"]): random_negative_peptides = EncodableSequences.create( random_negatives_planner.get_peptides() ) random_negative_peptides_encoding = self.peptides_to_network_input( random_negative_peptides ) # Build x_dict with random negatives if len(random_negative_peptides) > 0: x_peptide = numpy.concatenate([ random_negative_peptides_encoding, x_dict_without_random_negatives["peptide"], ]) if "allele" in x_dict_without_random_negatives: x_allele = numpy.concatenate([ self.allele_encoding_to_network_input( random_negatives_allele_encoding )[0], x_dict_without_random_negatives["allele"], ]) else: x_allele = None else: x_peptide = x_dict_without_random_negatives["peptide"] x_allele = x_dict_without_random_negatives.get("allele") if needs_initialization: x_init = {"peptide": x_peptide} if x_allele is not None: x_init["allele"] = x_allele self.data_dependent_weights_initialization( network, x_init, method=self.hyperparameters["data_dependent_initialization_method"], verbose=verbose, ) needs_initialization = False # Train/val split (keep validation fixed) train_indices = train_indices_base.copy() numpy.random.shuffle(train_indices) # Training network.train() epoch_start = time.time() # Create batches batch_size = self.hyperparameters["minibatch_size"] train_losses = [] for batch_start in range(0, n_train, batch_size): batch_idx = train_indices[batch_start:batch_start + batch_size] peptide_batch = torch.from_numpy(x_peptide[batch_idx]).float().to(device) y_batch = torch.from_numpy(y_encoded[batch_idx].astype(numpy.float32)).to(device) inputs = {"peptide": peptide_batch} if x_allele is not None: allele_batch = torch.from_numpy(x_allele[batch_idx]).float().to(device) inputs["allele"] = allele_batch optimizer.zero_grad() predictions = network(inputs) weights_batch = None if sample_weights_with_negatives is not None: weights_batch = torch.from_numpy( sample_weights_with_negatives[batch_idx] ).float().to(device) loss = loss_obj(predictions, y_batch, sample_weights=weights_batch) regularization_penalty = self._regularization_penalty( regularization_parameters, l1=l1_reg, l2=l2_reg, ) if regularization_penalty is not None: loss = loss + regularization_penalty loss.backward() optimizer.step() train_losses.append(loss.item()) epoch_time = time.time() - epoch_start train_loss = numpy.mean(train_losses) fit_info["loss"].append(train_loss) # Validation if val_split > 0: network.eval() with torch.no_grad(): val_peptide = torch.from_numpy(x_peptide[val_indices]).float().to(device) val_y = torch.from_numpy(y_encoded[val_indices].astype(numpy.float32)).to(device) val_inputs = {"peptide": val_peptide} if x_allele is not None: val_allele = torch.from_numpy(x_allele[val_indices]).float().to(device) val_inputs["allele"] = val_allele val_predictions = network(val_inputs) val_weights = None if sample_weights_with_negatives is not None: val_weights = torch.from_numpy( sample_weights_with_negatives[val_indices] ).float().to(device) val_loss = loss_obj( val_predictions, val_y, sample_weights=val_weights, ) regularization_penalty = self._regularization_penalty( regularization_parameters, l1=l1_reg, l2=l2_reg, ) if regularization_penalty is not None: val_loss = val_loss + regularization_penalty val_loss = val_loss.item() fit_info["val_loss"].append(val_loss) # Progress printing if progress_print_interval is not None and ( not last_progress_print or (time.time() - last_progress_print > progress_print_interval) ): print( ( progress_preamble + " " + "Epoch %3d / %3d [%0.2f sec]: loss=%g. " "Min val loss (%s) at epoch %s" % ( epoch, self.hyperparameters["max_epochs"], epoch_time, train_loss, str(min_val_loss), min_val_loss_iteration, ) ).strip() ) last_progress_print = time.time() # Early stopping if val_split > 0: if min_val_loss is None or ( val_loss < min_val_loss - self.hyperparameters["min_delta"] ): min_val_loss = val_loss min_val_loss_iteration = epoch if self.hyperparameters["early_stopping"]: threshold = min_val_loss_iteration + self.hyperparameters["patience"] if epoch > threshold: if progress_print_interval is not None: print( ( progress_preamble + " " + "Stopping at epoch %3d / %3d: loss=%g. " "Min val loss (%g) at epoch %s" % ( epoch, self.hyperparameters["max_epochs"], train_loss, min_val_loss if min_val_loss is not None else numpy.nan, min_val_loss_iteration, ) ).strip() ) break if progress_callback: progress_callback() gc.collect() fit_info["time"] = time.time() - start fit_info["num_points"] = len(peptides) self.fit_info.append(dict(fit_info)) def predict( self, peptides, allele_encoding=None, batch_size=DEFAULT_PREDICT_BATCH_SIZE, output_index=0): """ Predict affinities. Parameters ---------- peptides : EncodableSequences or list of string allele_encoding : AlleleEncoding, optional batch_size : int output_index : int or None Returns ------- numpy.array of nM affinity predictions """ assert self.prediction_cache is not None use_cache = allele_encoding is None and isinstance(peptides, EncodableSequences) if use_cache and peptides in self.prediction_cache: return self.prediction_cache[peptides].copy() device = self.get_device() x_dict = {"peptide": self.peptides_to_network_input(peptides)} if allele_encoding is not None: ( allele_encoding_input, allele_representations, ) = self.allele_encoding_to_network_input(allele_encoding) x_dict["allele"] = allele_encoding_input self.set_allele_representations(allele_representations) network = self.network() else: network = self.network(borrow=True) network.to(device) network.eval() # Batch prediction n_samples = len(x_dict["peptide"]) all_predictions = [] def prediction_tensor(batch_array): batch_array = numpy.asarray(batch_array, dtype=numpy.float32) if not batch_array.flags.writeable: batch_array = batch_array.copy() return torch.from_numpy(batch_array).to(device) with torch.no_grad(): for batch_start in range(0, n_samples, batch_size): batch_end = min(batch_start + batch_size, n_samples) peptide_batch = prediction_tensor( x_dict["peptide"][batch_start:batch_end] ) inputs = {"peptide": peptide_batch} if "allele" in x_dict: allele_batch = prediction_tensor( x_dict["allele"][batch_start:batch_end] ) inputs["allele"] = allele_batch batch_predictions = network(inputs) all_predictions.append(batch_predictions.cpu().numpy()) raw_predictions = numpy.concatenate(all_predictions, axis=0) predictions = numpy.array(raw_predictions, dtype="float64") if output_index is not None: predictions = predictions[:, output_index] result = to_ic50(predictions) if use_cache: self.prediction_cache[peptides] = result return result @classmethod def merge(cls, models, merge_method="average"): """ Merge multiple models at the neural network level. Parameters ---------- models : list of Class1NeuralNetwork merge_method : string, one of "average", "sum", or "concatenate" Returns ------- Class1NeuralNetwork """ if merge_method == "allele-specific": raise NotImplementedError("Allele-specific merge is not implemented") if len(models) == 1: return models[0] assert len(models) > 1 if any(not model.network().has_allele for model in models): raise NotImplementedError("Merging allele-specific models is not implemented") # For now, we create a simple ensemble wrapper # that averages predictions result = Class1NeuralNetwork(**dict(models[0].hyperparameters)) # Remove hyperparameters not shared by all models for model in models: for key, value in model.hyperparameters.items(): if result.hyperparameters.get(key, value) != value: del result.hyperparameters[key] # Create merged network result._network = MergedClass1NeuralNetwork( [model.network() for model in models], merge_method=merge_method ) result.update_network_description() return result def make_network( self, peptide_encoding, allele_amino_acid_encoding, allele_dense_layer_sizes, peptide_dense_layer_sizes, peptide_allele_merge_method, peptide_allele_merge_activation, layer_sizes, dense_layer_l1_regularization, dense_layer_l2_regularization, activation, init, output_activation, dropout_probability, batch_normalization, locally_connected_layers, topology, num_outputs=1, allele_representations=None): """ Helper function to make a PyTorch network for class 1 affinity prediction. """ peptide_encoding_shape = self.peptides_to_network_input([]).shape[1:] return Class1NeuralNetworkModel( peptide_encoding_shape=peptide_encoding_shape, allele_representations=allele_representations, locally_connected_layers=locally_connected_layers, peptide_dense_layer_sizes=peptide_dense_layer_sizes, allele_dense_layer_sizes=allele_dense_layer_sizes, layer_sizes=layer_sizes, peptide_allele_merge_method=peptide_allele_merge_method, peptide_allele_merge_activation=peptide_allele_merge_activation, activation=activation, output_activation=output_activation, dropout_probability=dropout_probability, batch_normalization=batch_normalization, dense_layer_l1_regularization=dense_layer_l1_regularization, dense_layer_l2_regularization=dense_layer_l2_regularization, topology=topology, num_outputs=num_outputs, init=init, ) def clear_allele_representations(self): """ Set allele representations to an empty array. """ original_model = self.network() if original_model is not None and original_model.allele_embedding is not None: existing_shape = original_model.allele_embedding.weight.shape new_weight = numpy.zeros( shape=(1, existing_shape[1]), dtype=numpy.float32 ) target = original_model.allele_embedding.weight original_model.allele_embedding.weight.data = torch.from_numpy( new_weight ).to(device=target.device, dtype=target.dtype) original_model.allele_embedding.weight.requires_grad = False def set_allele_representations(self, allele_representations, force_surgery=False): """ Set the allele representations in use by this model. Parameters ---------- allele_representations : numpy.ndarray of shape (a, l, m) force_surgery : bool """ network = self.network() if network is None: return reshaped = allele_representations.reshape( ( allele_representations.shape[0], numpy.prod(allele_representations.shape[1:]), ) ).astype(numpy.float32) # Handle merged networks (ensembles) if isinstance(network, MergedClass1NeuralNetwork): for sub_network in network.networks: self._update_embedding(sub_network, reshaped, force_surgery) elif hasattr(network, 'allele_embedding') and network.allele_embedding is not None: self._update_embedding(network, reshaped, force_surgery) def _update_embedding(self, network, reshaped, force_surgery): """Update the allele embedding for a single network.""" if network.allele_embedding is None: return target_weight = network.allele_embedding.weight existing_shape = target_weight.shape target_device = target_weight.device target_dtype = target_weight.dtype if existing_shape[0] > reshaped.shape[0] and not force_surgery: # Extend with NaNs reshaped = numpy.append( reshaped, numpy.ones([existing_shape[0] - reshaped.shape[0], reshaped.shape[1]]) * numpy.nan, axis=0, ) if existing_shape != reshaped.shape: # Need to resize embedding new_embedding = nn.Embedding( num_embeddings=reshaped.shape[0], embedding_dim=reshaped.shape[1] ).to(device=target_device) new_embedding.weight.data = torch.from_numpy(reshaped).to( device=target_device, dtype=target_dtype, ) new_embedding.weight.requires_grad = False network.allele_embedding = new_embedding else: network.allele_embedding.weight.data = torch.from_numpy( reshaped ).to(device=target_device, dtype=target_dtype) network.allele_embedding.weight.requires_grad = False class MergedClass1NeuralNetwork(nn.Module): """ A merged ensemble of Class1NeuralNetworkModel instances. """ def __init__(self, networks, merge_method="average"): super(MergedClass1NeuralNetwork, self).__init__() self.networks = nn.ModuleList(networks) self.merge_method = merge_method def forward(self, inputs): outputs = [network(inputs) for network in self.networks] stacked = torch.stack(outputs, dim=-1) if self.merge_method == "average": return stacked.mean(dim=-1) elif self.merge_method == "sum": return stacked.sum(dim=-1) elif self.merge_method == "concatenate": return torch.cat(outputs, dim=-1) else: raise ValueError(f"Unknown merge method: {self.merge_method}") def get_weights_list(self): """Get all weights as a flat list.""" weights = [] for network in self.networks: weights.extend(network.get_weights_list()) return weights def set_weights_list(self, weights, auto_convert_keras=False): """Set weights from a flat list.""" idx = 0 for network in self.networks: n_weights = len(list(network.parameters())) + len(list(network.buffers())) network.set_weights_list(weights[idx:idx + n_weights], auto_convert_keras=auto_convert_keras) idx += n_weights ================================================ FILE: mhcflurry/class1_presentation_predictor.py ================================================ from os.path import join, exists from os import mkdir from socket import gethostname from getpass import getuser import time import collections import logging import warnings import numpy import pandas import sklearn import sklearn.linear_model try: import tqdm except ImportError: tdqm = None from .version import __version__ from .class1_affinity_predictor import Class1AffinityPredictor from .class1_processing_predictor import Class1ProcessingPredictor from .class1_neural_network import DEFAULT_PREDICT_BATCH_SIZE from .encodable_sequences import EncodableSequences from .regression_target import from_ic50 from .downloads import get_default_class1_presentation_models_dir from .percent_rank_transform import PercentRankTransform MAX_ALLELES_PER_SAMPLE = 6 PREDICT_BATCH_SIZE = DEFAULT_PREDICT_BATCH_SIZE PREDICT_CHUNK_SIZE = 100000 # currently used only for cleavage prediction class Class1PresentationPredictor(object): """ A logistic regression model over predicted binding affinity (BA) and antigen processing (AP) score. Instances of this class delegate to Class1AffinityPredictor and Class1ProcessingPredictor instances to generate BA and AP predictions. These predictions are combined using a logistic regression model to give a "presentation score" prediction. Most users will call the `load` static method to get an instance of this class, then call the `predict` method to generate predictions. """ model_inputs = ["affinity_score", "processing_score"] def __init__( self, affinity_predictor=None, processing_predictor_with_flanks=None, processing_predictor_without_flanks=None, weights_dataframe=None, metadata_dataframes=None, percent_rank_transform=None, provenance_string=None): self.affinity_predictor = affinity_predictor self.processing_predictor_with_flanks = processing_predictor_with_flanks self.processing_predictor_without_flanks = processing_predictor_without_flanks self.weights_dataframe = weights_dataframe self.metadata_dataframes = ( dict(metadata_dataframes) if metadata_dataframes else {}) self._models_cache = {} self.percent_rank_transform = percent_rank_transform self.provenance_string = provenance_string @property def supported_alleles(self): """ List of alleles supported by the underlying Class1AffinityPredictor """ return self.affinity_predictor.supported_alleles @property def supported_peptide_lengths(self): """ (min, max) of supported peptide lengths, inclusive. """ return self.affinity_predictor.supported_peptide_lengths @property def supports_affinity_prediction(self): """Is there an affinity predictor associated with this instance?""" return self.affinity_predictor is not None @property def supports_processing_prediction(self): """Is there a processing predictor associated with this instance?""" return ( self.processing_predictor_with_flanks is not None or self.processing_predictor_without_flanks is not None) @property def supports_presentation_prediction(self): """Can this instance predict presentation?""" return ( self.supports_affinity_prediction and self.supports_processing_prediction and self.weights_dataframe is not None) def predict_affinity( self, peptides, alleles, sample_names=None, include_affinity_percentile=True, verbose=1, throw=True): """ Predict binding affinities across samples (each corresponding to up to six MHC I alleles). Two modes are supported: each peptide can be evaluated for binding to any of the alleles in any sample (this is what happens when sample_names is None), or the i'th peptide can be evaluated for binding the alleles of the sample given by the i'th entry in sample_names. For example, if we don't specify sample_names, then predictions are taken for all combinations of samples and peptides, for a result size of num peptides * num samples: >>> predictor = Class1PresentationPredictor.load() >>> predictor.predict_affinity( ... peptides=["SIINFEKL", "PEPTIDE"], ... alleles={ ... "sample1": ["A0201", "A0301", "B0702"], ... "sample2": ["A0101", "C0202"], ... }, ... verbose=0) peptide peptide_num sample_name affinity best_allele affinity_percentile 0 SIINFEKL 0 sample1 11927.161 A0201 6.296 1 PEPTIDE 1 sample1 32507.082 A0201 71.249 2 SIINFEKL 0 sample2 2725.593 C0202 6.662 3 PEPTIDE 1 sample2 28304.336 C0202 54.652 In contrast, here we specify sample_names, so peptide is evaluated for binding the alleles in the corresponding sample, for a result size equal to the number of peptides: >>> predictor.predict_affinity( ... peptides=["SIINFEKL", "PEPTIDE"], ... alleles={ ... "sample1": ["A0201", "A0301", "B0702"], ... "sample2": ["A0101", "C0202"], ... }, ... sample_names=["sample2", "sample1"], ... verbose=0) peptide peptide_num sample_name affinity best_allele affinity_percentile 0 SIINFEKL 0 sample2 2725.592 C0202 6.662 1 PEPTIDE 1 sample1 32507.078 A0201 71.249 Parameters ---------- peptides : list of string Peptide sequences alleles : dict of string -> list of string Keys are sample names, values are the alleles (genotype) for that sample sample_names : list of string [same length as peptides] Sample names corresponding to each peptide. If None, then predictions are generated for all sample genotypes across all peptides. include_affinity_percentile : bool Whether to include affinity percentile ranks verbose : int Set to 0 for quiet. throw : verbose Whether to throw exception (vs. just log a warning) on invalid peptides, etc. Returns ------- pandas.DataFrame : predictions """ df = pandas.DataFrame({ "peptide": numpy.asarray(peptides), }) df["peptide_num"] = df.index if sample_names is None: peptides = EncodableSequences.create(peptides) all_alleles = set() for lst in alleles.values(): all_alleles.update(lst) iterator = sorted(all_alleles) if verbose > 0: print("Predicting affinities.") if tqdm is not None: iterator = tqdm.tqdm(iterator, total=len(all_alleles)) predictions_df = pandas.DataFrame(index=df.index) for allele in iterator: predictions_df[allele] = self.affinity_predictor.predict( peptides=peptides, allele=allele, model_kwargs={'batch_size': PREDICT_BATCH_SIZE}, throw=throw) dfs = [] for (sample_name, sample_alleles) in alleles.items(): new_df = df.copy() new_df["sample_name"] = sample_name new_df["affinity"] = predictions_df[ sample_alleles ].min(axis=1).values if len(df) == 0: new_df["best_allele"] = [] else: sample_predictions = predictions_df[sample_alleles] best_allele = pandas.Series(index=sample_predictions.index, dtype=object) valid = sample_predictions.notna().any(axis=1) if valid.any(): best_allele.loc[valid] = sample_predictions.loc[valid].idxmin(axis=1) new_df["best_allele"] = best_allele.values dfs.append(new_df) result_df = pandas.concat(dfs, ignore_index=True) else: df["sample_name"] = numpy.asarray(sample_names) iterator = df.groupby("sample_name") if verbose > 0: print("Predicting affinities.") if tqdm is not None: iterator = tqdm.tqdm( iterator, total=df.sample_name.nunique()) for (sample, sub_df) in iterator: predictions_df = pandas.DataFrame(index=sub_df.index) sample_peptides = EncodableSequences.create(sub_df.peptide.values) for allele in alleles[sample]: predictions_df[allele] = self.affinity_predictor.predict( peptides=sample_peptides, allele=allele, model_kwargs={'batch_size': PREDICT_BATCH_SIZE}, throw=throw) df.loc[ sub_df.index, "affinity" ] = predictions_df.min(axis=1).values best_allele = pandas.Series(index=predictions_df.index, dtype=object) valid = predictions_df.notna().any(axis=1) if valid.any(): best_allele.loc[valid] = predictions_df.loc[valid].idxmin(axis=1) df.loc[ sub_df.index, "best_allele" ] = best_allele.values result_df = df if include_affinity_percentile: result_df["affinity_percentile"] = ( self.affinity_predictor.percentile_ranks( result_df.affinity.values, alleles=result_df.best_allele.values, throw=False)) return result_df def predict_processing( self, peptides, n_flanks=None, c_flanks=None, throw=True, verbose=1): """ Predict antigen processing scores for individual peptides, optionally including flanking sequences for better cleavage prediction. Parameters ---------- peptides : list of string n_flanks : list of string [same length as peptides] c_flanks : list of string [same length as peptides] throw : boolean Whether to raise exception on unsupported peptides verbose : int Returns ------- numpy.array : Antigen processing scores for each peptide """ if (n_flanks is None) != (c_flanks is None): raise ValueError("Specify both or neither of n_flanks, c_flanks") if n_flanks is None: if self.processing_predictor_without_flanks is None: raise ValueError("No processing predictor without flanks") predictor = self.processing_predictor_without_flanks n_flanks = [""] * len(peptides) c_flanks = n_flanks else: if self.processing_predictor_with_flanks is None: raise ValueError("No processing predictor with flanks") predictor = self.processing_predictor_with_flanks if len(peptides) == 0: return numpy.array([], dtype=float) num_chunks = int(numpy.ceil(float(len(peptides)) / PREDICT_CHUNK_SIZE)) peptide_chunks = numpy.array_split(peptides, num_chunks) n_flank_chunks = numpy.array_split(n_flanks, num_chunks) c_flank_chunks = numpy.array_split(c_flanks, num_chunks) iterator = zip(peptide_chunks, n_flank_chunks, c_flank_chunks) if verbose > 0: print("Predicting processing.") if tqdm is not None: iterator = tqdm.tqdm(iterator, total=len(peptide_chunks)) result_chunks = [] for (peptide_chunk, n_flank_chunk, c_flank_chunk) in iterator: result_chunk = predictor.predict( peptides=peptide_chunk, n_flanks=n_flank_chunk, c_flanks=c_flank_chunk, throw=throw, batch_size=PREDICT_BATCH_SIZE) result_chunks.append(result_chunk) return numpy.concatenate(result_chunks) def fit( self, targets, peptides, sample_names, alleles, n_flanks=None, c_flanks=None, verbose=1): """ Fit the presentation score logistic regression model. Parameters ---------- targets : list of int/float 1 indicates hit, 0 indicates decoy peptides : list of string [same length as targets] sample_names : list of string [same length as targets] alleles : dict of string -> list of string Keys are sample names, values are the alleles for that sample n_flanks : list of string [same length as targets] c_flanks : list of string [same length as targets] verbose : int """ df = self.predict_affinity( peptides=peptides, alleles=alleles, sample_names=sample_names, verbose=verbose) df["affinity_score"] = from_ic50(df.affinity) df["target"] = numpy.asarray(targets) if (n_flanks is None) != (c_flanks is None): raise ValueError("Specify both or neither of n_flanks, c_flanks") with_flanks_list = [] if self.processing_predictor_without_flanks is not None: with_flanks_list.append(False) if n_flanks is not None and self.processing_predictor_with_flanks is not None: with_flanks_list.append(True) if not with_flanks_list: raise RuntimeError("Can't fit any models") if self.weights_dataframe is None: self.weights_dataframe = pandas.DataFrame() for with_flanks in with_flanks_list: model_name = 'with_flanks' if with_flanks else "without_flanks" if verbose > 0: print("Training variant", model_name) df["processing_score"] = self.predict_processing( peptides=df.peptide.values, n_flanks=n_flanks if with_flanks else None, c_flanks=c_flanks if with_flanks else None, verbose=verbose) model = self.get_model() if verbose > 0: print("Fitting LR model.") print(df) model.fit( X=df[self.model_inputs].values, y=df.target.astype(float)) (intercept,) = model.intercept_.flatten() self.weights_dataframe.loc[model_name, "intercept"] = intercept for (name, value) in zip(self.model_inputs, numpy.squeeze(model.coef_)): self.weights_dataframe.loc[model_name, name] = value self._models_cache[model_name] = model def get_model(self, name=None): """ Load or instantiate a new logistic regression model. Private helper method. Parameters ---------- name : string If None (the default), an un-fit LR model is returned. Otherwise the weights are loaded for the specified model. Returns ------- sklearn.linear_model.LogisticRegression """ if name is None or name not in self._models_cache: model = sklearn.linear_model.LogisticRegression(solver="lbfgs") if name is not None: row = self.weights_dataframe.loc[name] model.intercept_ = row.intercept model.coef_ = numpy.expand_dims( row[self.model_inputs].values, axis=0) model.classes_ = numpy.array([0, 1]) else: model = self._models_cache[name] return model def predict( self, peptides, alleles, sample_names=None, n_flanks=None, c_flanks=None, include_affinity_percentile=False, verbose=1, throw=True): """ Predict presentation scores across a set of peptides. Presentation scores combine predictions for MHC I binding affinity and antigen processing. This method returns a pandas.DataFrame giving presentation scores plus the binding affinity and processing predictions and other intermediate results. Example: >>> predictor = Class1PresentationPredictor.load() >>> predictor.predict( ... peptides=["SIINFEKL", "PEPTIDE"], ... n_flanks=["NNN", "SNS"], ... c_flanks=["CCC", "CNC"], ... alleles={ ... "sample1": ["A0201", "A0301", "B0702"], ... "sample2": ["A0101", "C0202"], ... }, ... verbose=0) peptide n_flank c_flank peptide_num sample_name affinity best_allele processing_score presentation_score presentation_percentile 0 SIINFEKL NNN CCC 0 sample1 11927.161 A0201 0.838 0.145 2.282 1 PEPTIDE SNS CNC 1 sample1 32507.082 A0201 0.025 0.003 100.000 2 SIINFEKL NNN CCC 0 sample2 2725.593 C0202 0.838 0.416 1.017 3 PEPTIDE SNS CNC 1 sample2 28304.338 C0202 0.025 0.003 99.287 You can also specify sample_names, in which case peptide is evaluated for binding the alleles in the corresponding sample only. See `predict_affinity` for an examples. Parameters ---------- peptides : list of string Peptide sequences alleles : list of string or dict of string -> list of string If you are predicting for a single sample, pass a list of strings (up to 6) indicating the genotype. If you are predicting across multiple samples, pass a dict where the keys are (arbitrary) sample names and the values are the alleles to predict for that sample. Set to an empty list or dict to perform processing prediction only. sample_names : list of string [same length as peptides] If you are passing a dict for 'alleles', you can use this argument to specify which peptides go with which samples. If it is None, then predictions will be performed for each peptide across all samples. n_flanks : list of string [same length as peptides] Upstream sequences before the peptide. Sequences of any length can be given and a suffix of the size supported by the model will be used. c_flanks : list of string [same length as peptides] Downstream sequences after the peptide. Sequences of any length can be given and a prefix of the size supported by the model will be used. include_affinity_percentile : bool Whether to include affinity percentile ranks verbose : int Set to 0 for quiet. throw : verbose Whether to throw exception (vs. just log a warning) on invalid peptides, etc. Returns ------- pandas.DataFrame Presentation scores and intermediate results. """ if isinstance(peptides, str): raise TypeError("peptides must be a list not a string") if isinstance(alleles, str): raise TypeError("alleles must be a list or dict") if not isinstance(alleles, dict): # Make alleles into a dict. if sample_names is not None: raise ValueError( "alleles must be a dict when sample_names is specified") alleles = numpy.asarray(alleles) if len(alleles) > MAX_ALLELES_PER_SAMPLE: raise ValueError( "When alleles is a list, it must have at most %d elements. " "These alleles are taken to be a genotype for an " "individual, and the strongest prediction across alleles " "will be taken for each peptide. Note that this differs " "from Class1AffinityPredictor.predict(), where alleles " "is expected to be the same length as peptides." % MAX_ALLELES_PER_SAMPLE) alleles = { "sample1": alleles, } if (n_flanks is None) != (c_flanks is None): raise ValueError("Specify both or neither of n_flanks, c_flanks") if self.supports_processing_prediction: processing_scores = self.predict_processing( peptides=peptides, n_flanks=n_flanks, c_flanks=c_flanks, throw=throw, verbose=verbose) else: processing_scores = None if alleles: df = self.predict_affinity( peptides=peptides, alleles=alleles, sample_names=sample_names, # might be None include_affinity_percentile=include_affinity_percentile, verbose=verbose, throw=throw) df["affinity_score"] = from_ic50(df.affinity) else: # Processing prediction only. df = pandas.DataFrame({ "peptide_num": numpy.arange(len(peptides)), "peptide": peptides, }) df["sample_name"] = "sample1" if processing_scores is not None: df["processing_score"] = df.peptide_num.map( pandas.Series(processing_scores)) if c_flanks is not None: df.insert(1, "c_flank", df.peptide_num.map(pandas.Series(c_flanks))) if n_flanks is not None: df.insert(1, "n_flank", df.peptide_num.map(pandas.Series(n_flanks))) predict_presentation = ( "affinity_score" in df.columns and "processing_score" in df.columns and self.supports_presentation_prediction) if predict_presentation: if len(df) > 0: model_name = 'with_flanks' if n_flanks is not None else \ "without_flanks" model = self.get_model(model_name) input_matrix = df[self.model_inputs] null_mask = None if not throw: # Invalid peptides will be null. null_mask = input_matrix.isnull().any(axis=1) input_matrix = input_matrix.fillna(0.0) df["presentation_score"] = model.predict_proba( input_matrix.values)[:,1] if null_mask is not None: df.loc[null_mask, "presentation_score"] = numpy.nan df["presentation_percentile"] = self.percentile_ranks( df["presentation_score"], throw=False) else: df["presentation_score"] = [] df["presentation_percentile"] = [] del df["affinity_score"] return df def predict_sequences( self, sequences, alleles, result="best", comparison_quantity=None, filter_value=None, peptide_lengths=(8, 9, 10, 11), use_flanks=True, include_affinity_percentile=True, verbose=1, throw=True): """ Predict presentation across protein sequences. Example: >>> predictor = Class1PresentationPredictor.load() >>> predictor.predict_sequences( ... sequences={ ... 'protein1': "MDSKGSSQKGSRLLLLLVVSNLL", ... 'protein2': "SSLPTPEDKEQAQQTHH", ... }, ... alleles={ ... "sample1": ["A0201", "A0301", "B0702"], ... "sample2": ["A0101", "C0202"], ... }, ... result="filtered", ... comparison_quantity="affinity", ... filter_value=500, ... verbose=0) sequence_name pos peptide n_flank c_flank sample_name affinity best_allele affinity_percentile processing_score presentation_score presentation_percentile 0 protein1 14 LLLVVSNLL GSRLL sample1 57.180 A0201 0.398 0.233 0.754 0.351 1 protein1 13 LLLLVVSNL KGSRL L sample1 57.339 A0201 0.398 0.031 0.586 0.643 2 protein1 5 SSQKGSRLL MDSKG LLLVV sample2 110.779 C0202 0.782 0.061 0.456 0.920 3 protein1 6 SQKGSRLLL DSKGS LLVVS sample2 254.480 C0202 1.735 0.102 0.303 1.356 4 protein1 13 LLLLVVSNLL KGSRL sample1 260.390 A0201 1.012 0.158 0.345 1.215 5 protein1 12 LLLLLVVSNL QKGSR L sample1 308.150 A0201 1.094 0.015 0.206 1.802 6 protein2 0 SSLPTPEDK EQAQQ sample2 410.354 C0202 2.398 0.003 0.158 2.155 7 protein1 5 SSQKGSRL MDSKG LLLLV sample2 444.321 C0202 2.512 0.026 0.159 2.138 8 protein2 0 SSLPTPEDK EQAQQ sample1 459.296 A0301 0.971 0.003 0.144 2.292 9 protein1 4 GSSQKGSRL MDSK LLLLV sample2 469.052 C0202 2.595 0.014 0.146 2.261 Parameters ---------- sequences : str, list of string, or string -> string dict Protein sequences. If a dict is given, the keys are arbitrary ( e.g. protein names), and the values are the amino acid sequences. alleles : list of string, list of list of string, or dict of string -> list of string MHC I alleles. Can be: (1) a string (a single allele), (2) a list of strings (a single genotype), (3) a list of list of strings (multiple genotypes, where the total number of genotypes must equal the number of sequences), or (4) a dict giving multiple genotypes, which will each be run over the sequences. result : string Specify 'best' to return the strongest peptide for each sequence, 'all' to return predictions for all peptides, or 'filtered' to return predictions where the comparison_quantity is stronger (i.e (<) for affinity, (>) for scores) than filter_value. comparison_quantity : string One of "presentation_score", "processing_score", "affinity", or "affinity_percentile". Prediction to use to rank (if result is "best") or filter (if result is "filtered") results. Default is "presentation_score". filter_value : float Threshold value to use, only relevant when result is "filtered". If comparison_quantity is "affinity", then all results less than (i.e. tighter than) the specified nM affinity are retained. If it's "presentation_score" or "processing_score" then results greater than the indicated filter_value are retained. peptide_lengths : list of int Peptide lengths to predict for. use_flanks : bool Whether to include flanking sequences when running the AP predictor (for better cleavage prediction). include_affinity_percentile : bool Whether to include affinity percentile ranks in output. verbose : int Set to 0 for quiet mode. throw : boolean Whether to throw exceptions (vs. log warnings) on invalid inputs. Returns ------- pandas.DataFrame with columns: peptide, n_flank, c_flank, sequence_name, affinity, best_allele, processing_score, presentation_score """ if len(alleles) == 0: alleles = {} if len(alleles) > 0 and not self.supports_affinity_prediction: raise ValueError( "Affinity prediction not supported by this predictor") if comparison_quantity is None: if len(alleles) > 0: if self.supports_presentation_prediction: comparison_quantity = "presentation_score" else: comparison_quantity = "affinity" else: comparison_quantity = "processing_score" if comparison_quantity == "presentation_score": if not self.supports_presentation_prediction: raise ValueError( "Presentation prediction not supported by this predictor") elif comparison_quantity == "processing_score": if not self.supports_processing_prediction: raise ValueError( "Processing prediction not supported by this predictor") elif comparison_quantity in ("affinity", "affinity_percentile"): if not self.supports_affinity_prediction: raise ValueError( "Affinity prediction not supported by this predictor") else: raise ValueError( "Unknown comparison quantity: %s" % comparison_quantity) processing_predictor = self.processing_predictor_with_flanks if not use_flanks or processing_predictor is None: processing_predictor = self.processing_predictor_without_flanks if processing_predictor is not None: supported_sequence_lengths = processing_predictor.sequence_lengths n_flank_length = supported_sequence_lengths["n_flank"] c_flank_length = supported_sequence_lengths["c_flank"] else: n_flank_length = 0 c_flank_length = 0 sequence_names = [] n_flanks = [] if use_flanks else None c_flanks = [] if use_flanks else None peptides = [] if isinstance(sequences, str): sequences = [sequences] if not isinstance(sequences, dict): sequences = collections.OrderedDict( ("sequence_%04d" % (i + 1), sequence) for (i, sequence) in enumerate(sequences)) cross_product = True if isinstance(alleles, str): # Case (1) - alleles is a string alleles = [alleles] if isinstance(alleles, dict): if any([isinstance(v, str) for v in alleles.values()]): raise ValueError( "The values in the alleles dict must be lists, not strings") else: if all(isinstance(a, str) for a in alleles): # Case (2) - a simple list of alleles alleles = { 'sample1': alleles } else: # Case (3) - a list of lists alleles = collections.OrderedDict( ("genotype_%04d" % (i + 1), genotype) for (i, genotype) in enumerate(alleles)) cross_product = False if len(alleles) != len(sequences): raise ValueError( "When passing a list of lists for the alleles argument " "the length of the list (%d) must match the length of " "the sequences being predicted (%d)" % ( len(alleles), len(sequences))) if not isinstance(alleles, dict): raise ValueError("Invalid type for alleles: ", type(alleles)) sample_names = None if cross_product else [] genotype_names = list(alleles) position_in_sequence = [] for (i, (name, sequence)) in enumerate(sequences.items()): genotype_name = None if cross_product else genotype_names[i] if not isinstance(sequence, str): raise ValueError("Expected string, not %s (%s)" % ( sequence, type(sequence))) for peptide_start in range(len(sequence) - min(peptide_lengths) + 1): n_flank_start = max(0, peptide_start - n_flank_length) for peptide_length in peptide_lengths: peptide = sequence[ peptide_start: peptide_start + peptide_length ] if len(peptide) != peptide_length: continue c_flank_end = ( peptide_start + peptide_length + c_flank_length) sequence_names.append(name) position_in_sequence.append(peptide_start) if not cross_product: sample_names.append(genotype_name) peptides.append(peptide) if use_flanks: n_flanks.append( sequence[n_flank_start : peptide_start]) c_flanks.append( sequence[peptide_start + peptide_length : c_flank_end]) result_df = self.predict( peptides=peptides, alleles=alleles, n_flanks=n_flanks, c_flanks=c_flanks, sample_names=sample_names, include_affinity_percentile=include_affinity_percentile, verbose=verbose, throw=throw) result_df.insert( 0, "sequence_name", result_df.peptide_num.map(pandas.Series(sequence_names))) result_df.insert( 1, "pos", result_df.peptide_num.map(pandas.Series(position_in_sequence))) del result_df["peptide_num"] comparison_is_score = comparison_quantity.endswith("score") result_df = result_df.sort_values( comparison_quantity, ascending=not comparison_is_score) if result == "best": result_df = result_df.drop_duplicates( ["sequence_name", "sample_name"], keep="first" ).sort_values("sequence_name") elif result == "filtered": if comparison_is_score: result_df = result_df.loc[ result_df[comparison_quantity] >= filter_value ] else: result_df = result_df.loc[ result_df[comparison_quantity] <= filter_value ] elif result == "all": pass else: raise ValueError( "Unknown result: %s. Valid choices are: best, filtered, all" % result) result_df = result_df.reset_index(drop=True) result_df = result_df.copy() return result_df def save( self, models_dir, write_affinity_predictor=True, write_processing_predictor=True, write_weights=True, write_percent_ranks=True, write_info=True, write_metdata=True): """ Save the predictor to a directory on disk. If the directory does not exist it will be created. The wrapped Class1AffinityPredictor and Class1ProcessingPredictor instances are included in the saved data. Parameters ---------- models_dir : string Path to directory. It will be created if it doesn't exist. """ if write_weights and self.weights_dataframe is None: raise RuntimeError("Can't save before fitting") if not exists(models_dir): mkdir(models_dir) # Save underlying predictors if write_affinity_predictor: self.affinity_predictor.save(join(models_dir, "affinity_predictor")) if write_processing_predictor: if self.processing_predictor_with_flanks is not None: self.processing_predictor_with_flanks.save( join(models_dir, "processing_predictor_with_flanks")) if self.processing_predictor_without_flanks is not None: self.processing_predictor_without_flanks.save( join(models_dir, "processing_predictor_without_flanks")) if write_weights: # Save model coefficients. self.weights_dataframe.to_csv(join(models_dir, "weights.csv")) if write_percent_ranks: # Percent ranks if self.percent_rank_transform: series = self.percent_rank_transform.to_series() percent_ranks_df = pandas.DataFrame(index=series.index) numpy.testing.assert_array_almost_equal( series.index.values, percent_ranks_df.index.values) percent_ranks_df["presentation_score"] = series.values percent_ranks_path = join(models_dir, "percent_ranks.csv") percent_ranks_df.to_csv( percent_ranks_path, index=True, index_label="bin") logging.info("Wrote: %s", percent_ranks_path) if write_info: # Write "info.txt" info_path = join(models_dir, "info.txt") rows = [ ("trained on", time.asctime()), ("package ", "mhcflurry %s" % __version__), ("hostname ", gethostname()), ("user ", getuser()), ] pandas.DataFrame(rows).to_csv( info_path, sep="\t", header=False, index=False) if write_metdata: if self.metadata_dataframes: for (name, df) in self.metadata_dataframes.items(): metadata_df_path = join(models_dir, "%s.csv.bz2" % name) df.to_csv(metadata_df_path, index=False, compression="bz2") @classmethod def load(cls, models_dir=None, max_models=None): """ Deserialize a predictor from a directory on disk. This will also load the wrapped Class1AffinityPredictor and Class1ProcessingPredictor instances. Parameters ---------- models_dir : string Path to directory. If unspecified the default downloaded models are used. max_models : int, optional Maximum number of affinity and processing (counted separately) models to load Returns ------- `Class1PresentationPredictor` instance """ if models_dir is None: models_dir = get_default_class1_presentation_models_dir() affinity_predictor = Class1AffinityPredictor.load( join(models_dir, "affinity_predictor"), max_models=max_models) processing_predictor_with_flanks = None if exists(join(models_dir, "processing_predictor_with_flanks")): processing_predictor_with_flanks = Class1ProcessingPredictor.load( join(models_dir, "processing_predictor_with_flanks"), max_models=max_models) else: logging.warning( "Presentation predictor is missing processing predictor: %s", join(models_dir, "processing_predictor_with_flanks")) processing_predictor_without_flanks = None if exists(join(models_dir, "processing_predictor_without_flanks")): processing_predictor_without_flanks = Class1ProcessingPredictor.load( join(models_dir, "processing_predictor_without_flanks"), max_models=max_models) else: logging.warning( "Presentation predictor is missing processing predictor: %s", join(models_dir, "processing_predictor_without_flanks")) weights_dataframe = pandas.read_csv( join(models_dir, "weights.csv"), index_col=0) # Load percent ranks if available percent_rank_transform = None percent_ranks_path = join(models_dir, "percent_ranks.csv") if exists(percent_ranks_path): percent_ranks_df = pandas.read_csv(percent_ranks_path, index_col=0) percent_rank_transform = PercentRankTransform.from_series( percent_ranks_df["presentation_score"]) provenance_string = None try: info_path = join(models_dir, "info.txt") info = pandas.read_csv( info_path, sep="\t", header=None, index_col=0).iloc[ :, 0 ].to_dict() provenance_string = "generated on %s" % info["trained on"] except OSError: pass result = cls( affinity_predictor=affinity_predictor, processing_predictor_with_flanks=processing_predictor_with_flanks, processing_predictor_without_flanks=processing_predictor_without_flanks, weights_dataframe=weights_dataframe, percent_rank_transform=percent_rank_transform, provenance_string=provenance_string) return result def __repr__(self): pieces = ["at 0x%0x" % id(self), "[mhcflurry %s]" % __version__] if self.provenance_string: pieces.append(self.provenance_string) return "" % " ".join(pieces) def percentile_ranks(self, presentation_scores, throw=True): """ Return percentile ranks for the given presentation scores. Parameters ---------- presentation_scores : sequence of float Returns ------- numpy.array of float """ if self.percent_rank_transform is None: msg = "No presentation predictor percentile rank information" if throw: raise ValueError(msg) warnings.warn(msg) return numpy.ones(len(presentation_scores)) * numpy.nan # We subtract from 100 so that strong binders have low percentile ranks, # making them comparable to affinity percentile ranks. return 100 - self.percent_rank_transform.transform(presentation_scores) def calibrate_percentile_ranks(self, scores, bins=None): """ Compute the cumulative distribution of scores, to enable taking quantiles of this distribution later. Parameters ---------- scores : sequence of float Presentation prediction scores bins : object Anything that can be passed to numpy.histogram's "bins" argument can be used here, i.e. either an integer or a sequence giving bin edges. """ if bins is None: bins = numpy.linspace(0, 1, 1000) self.percent_rank_transform = PercentRankTransform() self.percent_rank_transform.fit(scores, bins=bins) ================================================ FILE: mhcflurry/class1_processing_neural_network.py ================================================ """ Antigen processing neural network implementation - PyTorch version """ import time import collections import gc import json import numpy import torch import torch.nn as nn import torch.nn.functional as F from .hyperparameters import HyperparameterDefaults from .class1_neural_network import DEFAULT_PREDICT_BATCH_SIZE from .flanking_encoding import FlankingEncoding from .common import get_pytorch_device class Class1ProcessingModel(nn.Module): """ PyTorch module for antigen processing prediction. """ def __init__( self, sequence_dims, n_flank_length, c_flank_length, peptide_max_length, flanking_averages, convolutional_filters, convolutional_kernel_size, convolutional_activation, convolutional_kernel_l1_l2, dropout_rate, post_convolutional_dense_layer_sizes): super(Class1ProcessingModel, self).__init__() self.n_flank_length = n_flank_length self.c_flank_length = c_flank_length self.peptide_max_length = peptide_max_length self.flanking_averages = flanking_averages # Input channels from sequence encoding in_channels = sequence_dims[1] # Main convolutional layer self.conv1 = nn.Conv1d( in_channels=in_channels, out_channels=convolutional_filters, kernel_size=convolutional_kernel_size, padding='same' ) # Activation function if convolutional_activation == 'tanh': self.conv_activation = torch.tanh elif convolutional_activation == 'relu': self.conv_activation = F.relu elif convolutional_activation == 'sigmoid': self.conv_activation = torch.sigmoid else: self.conv_activation = torch.tanh # Dropout self.dropout_rate = dropout_rate if dropout_rate > 0: self.dropout = nn.Dropout1d(p=dropout_rate) else: self.dropout = None # Post-convolutional dense layers for each flank # These are implemented as 1D convolutions with kernel_size=1 layer_sizes = list(post_convolutional_dense_layer_sizes) + [1] self.n_flank_post_convs = nn.ModuleList() self.c_flank_post_convs = nn.ModuleList() current_channels = convolutional_filters for i, size in enumerate(layer_sizes): self.n_flank_post_convs.append(nn.Conv1d( in_channels=current_channels, out_channels=size, kernel_size=1 )) self.c_flank_post_convs.append(nn.Conv1d( in_channels=current_channels, out_channels=size, kernel_size=1 )) current_channels = size # Dense layers for flanking averages (if enabled) self.n_flank_avg_dense = None self.c_flank_avg_dense = None if flanking_averages: if n_flank_length > 0: self.n_flank_avg_dense = nn.Linear(convolutional_filters, 1) if c_flank_length > 0: self.c_flank_avg_dense = nn.Linear(convolutional_filters, 1) # Final output layer # Number of inputs: 2 from n_flank (cleaved + max_pool) + 2 from c_flank # Plus optional flanking averages num_final_inputs = 4 if flanking_averages and n_flank_length > 0: num_final_inputs += 1 if flanking_averages and c_flank_length > 0: num_final_inputs += 1 self.output_layer = nn.Linear(num_final_inputs, 1) # Initialize output weights to ones (like Keras initializers.Ones()) nn.init.ones_(self.output_layer.weight) nn.init.zeros_(self.output_layer.bias) def forward(self, inputs): """ Forward pass. Parameters ---------- inputs : dict Dictionary with 'sequence' and 'peptide_length' keys Returns ------- torch.Tensor Predictions of shape (batch,) """ sequence = inputs['sequence'] # (batch, seq_len, channels) peptide_length = inputs['peptide_length'] # (batch, 1) # Transpose for Conv1d: (batch, channels, seq_len) x = sequence.permute(0, 2, 1) # Apply main convolution x = self.conv1(x) x = self.conv_activation(x) if self.dropout is not None: # Spatial dropout: same dropout mask for all positions # Equivalent to Keras Dropout with noise_shape=(None, 1, channels) x = self.dropout(x) # Transpose back: (batch, seq_len, channels) convolutional_result = x.permute(0, 2, 1) outputs_for_final = [] # Process n_flank n_flank_outputs = self._process_n_flank( convolutional_result, peptide_length ) outputs_for_final.extend(n_flank_outputs) # Process c_flank c_flank_outputs = self._process_c_flank( convolutional_result, peptide_length ) outputs_for_final.extend(c_flank_outputs) # Concatenate all outputs combined = torch.cat(outputs_for_final, dim=-1) # Final output output = torch.sigmoid(self.output_layer(combined)) return output.squeeze(-1) def _process_n_flank(self, conv_result, peptide_length): """Process n_flank feature extraction.""" outputs = [] # Apply post-convolutional layers # Transpose for Conv1d x = conv_result.permute(0, 2, 1) for i, conv_layer in enumerate(self.n_flank_post_convs): x = conv_layer(x) if i < len(self.n_flank_post_convs) - 1: x = self.conv_activation(x) else: x = torch.tanh(x) # Final layer always tanh # Transpose back single_output_result = x.permute(0, 2, 1) # (batch, seq_len, 1) # Extract at cleavage position (n_flank_length) cleaved = single_output_result[:, self.n_flank_length, :] # (batch, 1) outputs.append(cleaved) # Max pool over peptide (excluding first position) max_pool = self._max_pool_over_peptide_n( single_output_result, peptide_length ) outputs.append(max_pool) # Optional flanking average if self.n_flank_avg_dense is not None and self.n_flank_length > 0: avg = self._extract_n_flank_avg(conv_result) dense_out = torch.tanh(self.n_flank_avg_dense(avg)) # (batch, 1) outputs.append(dense_out) return outputs def _process_c_flank(self, conv_result, peptide_length): """Process c_flank feature extraction.""" outputs = [] # Apply post-convolutional layers x = conv_result.permute(0, 2, 1) for i, conv_layer in enumerate(self.c_flank_post_convs): x = conv_layer(x) if i < len(self.c_flank_post_convs) - 1: x = self.conv_activation(x) else: x = torch.tanh(x) single_output_result = x.permute(0, 2, 1) # (batch, seq_len, 1) # Extract at cleavage position (dynamic based on peptide_length) cleaved = self._extract_c_cleavage(single_output_result, peptide_length) outputs.append(cleaved) # Max pool over peptide (excluding last position) max_pool = self._max_pool_over_peptide_c( single_output_result, peptide_length ) outputs.append(max_pool) # Optional flanking average if self.c_flank_avg_dense is not None and self.c_flank_length > 0: # Average over c_flank region (dynamic based on peptide_length) avg = self._extract_c_flank_avg(conv_result, peptide_length) dense_out = torch.tanh(self.c_flank_avg_dense(avg)) outputs.append(dense_out) return outputs def _max_pool_over_peptide_n(self, x, peptide_length): """ Max pool over peptide region excluding first position. For n_flank cleavage site. """ batch_size, seq_len, features = x.shape peptide_length = peptide_length.view(-1) # Create position indices positions = torch.arange(seq_len, device=x.device).unsqueeze(0) # Mask: 1 for positions from n_flank_length+1 to n_flank_length+peptide_length starts = self.n_flank_length + 1 ends = (self.n_flank_length + peptide_length).unsqueeze(1) mask = (positions >= starts) & (positions < ends) # (batch, seq_len) # Apply mask (assuming x >= -1 from tanh) x_shifted = x + 1 mask_expanded = mask.unsqueeze(-1).float() masked_x = x_shifted * mask_expanded max_value = masked_x.max(dim=1)[0] - 1 # (batch, features) # Flip sign return -1 * max_value def _max_pool_over_peptide_c(self, x, peptide_length): """ Max pool over peptide region excluding last position. For c_flank cleavage site. """ batch_size, seq_len, features = x.shape peptide_length = peptide_length.view(-1) positions = torch.arange(seq_len, device=x.device).unsqueeze(0) # Mask: 1 for positions from n_flank_length to n_flank_length+peptide_length-1 starts = self.n_flank_length ends = (self.n_flank_length + peptide_length - 1).unsqueeze(1) mask = (positions >= starts) & (positions < ends) x_shifted = x + 1 mask_expanded = mask.unsqueeze(-1).float() masked_x = x_shifted * mask_expanded max_value = masked_x.max(dim=1)[0] - 1 return -1 * max_value def _extract_c_cleavage(self, x, peptide_length): """Extract at c-terminal cleavage position.""" peptide_length = peptide_length.view(-1) indices = self.n_flank_length + peptide_length - 1 batch_size = x.size(0) indices = indices.long().view(batch_size, 1, 1).expand(-1, -1, x.size(2)) result = x.gather(1, indices).squeeze(1) # (batch, features) return result def _extract_c_flank_avg(self, conv_result, peptide_length): """ Average over c-flank region using TF-compatible masking semantics. In TF/Keras this is implemented as: reduce_mean((x + 1) * mask, axis=1) - 1 which averages across the full sequence axis (not only masked positions). """ batch_size, seq_len, features = conv_result.shape peptide_length = peptide_length.view(-1) positions = torch.arange(seq_len, device=conv_result.device).unsqueeze(0) # Mask: 1 for c_flank positions starts = (self.n_flank_length + peptide_length).unsqueeze(1) ends = starts + self.c_flank_length mask = (positions >= starts) & (positions < ends) x_shifted = conv_result + 1 mask_expanded = mask.unsqueeze(-1).float() avg_value = (x_shifted * mask_expanded).mean(dim=1) - 1 return avg_value def _extract_n_flank_avg(self, conv_result): """ Average over n-flank region using TF-compatible masking semantics. In TF/Keras this is implemented as: reduce_mean((x + 1) * mask, axis=1) - 1 where mask selects n-flank positions. """ _, seq_len, _ = conv_result.shape positions = torch.arange(seq_len, device=conv_result.device).unsqueeze(0) mask = (positions >= 0) & (positions < self.n_flank_length) mask_expanded = mask.unsqueeze(-1).float() x_shifted = conv_result + 1 avg_value = (x_shifted * mask_expanded).mean(dim=1) - 1 return avg_value def get_weights_list(self): """Get weights as a list of numpy arrays.""" weights = [] for name, param in self.named_parameters(): weights.append(param.detach().cpu().numpy()) for name, buffer in self.named_buffers(): weights.append(buffer.detach().cpu().numpy()) return weights def set_weights_list(self, weights, auto_convert_keras=True): """ Set weights from a list of numpy arrays. Supports automatic detection and conversion of Keras-format weights. Parameters ---------- weights : list of numpy.ndarray auto_convert_keras : bool If True, automatically detect and convert Keras-format weights """ # Keras stores weights in layer definition order which interleaves # n_flank and c_flank post-conv layers: # conv1, n_post_0, c_post_0, n_post_1, c_post_1, n_avg, c_avg, output # PyTorch ModuleList stores: # conv1, n_post_0, n_post_1, c_post_0, c_post_1, n_avg, c_avg, output # We need to reorder Keras weights to match PyTorch parameter order if auto_convert_keras: weights = self._reorder_keras_weights(list(weights)) idx = 0 for name, param in self.named_parameters(): w = weights[idx].astype(numpy.float32) # Auto-detect and convert Keras weights if shapes don't match if auto_convert_keras and w.shape != param.shape: # Dense/Linear: Keras (in, out) -> PyTorch (out, in) if len(w.shape) == 2 and w.shape == param.shape[::-1]: w = w.T # Conv1D: Keras (k, in_ch, out_ch) -> PyTorch (out_ch, in_ch, k) elif len(w.shape) == 3 and w.shape == (param.shape[2], param.shape[1], param.shape[0]): w = w.transpose(2, 1, 0) if w.shape != param.shape: raise ValueError( f"Weight shape mismatch for {name}: " f"got {weights[idx].shape}, expected {param.shape}" ) param.data = torch.from_numpy(w).to( device=param.device, dtype=param.dtype, ) idx += 1 for name, buffer in self.named_buffers(): tensor = torch.from_numpy(weights[idx]).to( device=buffer.device, dtype=buffer.dtype, ) self._buffers[name] = tensor idx += 1 def _reorder_keras_weights(self, weights): """ Reorder Keras weights to match PyTorch parameter order. Keras interleaves n_flank and c_flank post-conv layers: conv1, n_post_0, c_post_0, n_post_1, c_post_1, ..., n_avg, c_avg, output PyTorch has: conv1, n_post_0, n_post_1, ..., c_post_0, c_post_1, ..., n_avg, c_avg, output Returns ------- list of numpy.ndarray """ # Count how many post-conv layers there are (each has weight + bias) n_post_conv_layers = len(self.n_flank_post_convs) if n_post_conv_layers == 0: return weights # Find indices in Keras weight list # Structure: conv1_w, conv1_b, [n_post_i_w, n_post_i_b, c_post_i_w, c_post_i_b]..., # n_avg_w, n_avg_b, c_avg_w, c_avg_b, out_w, out_b reordered = [] # Conv1 weights (indices 0, 1) reordered.append(weights[0]) reordered.append(weights[1]) # Keras has interleaved: n_post_0, c_post_0, n_post_1, c_post_1, ... # We need: n_post_0, n_post_1, ..., c_post_0, c_post_1, ... post_conv_start = 2 post_conv_end = post_conv_start + n_post_conv_layers * 4 # 4 = n_w, n_b, c_w, c_b per layer # Extract n_flank and c_flank post-conv weights separately n_flank_weights = [] c_flank_weights = [] for i in range(n_post_conv_layers): keras_idx = post_conv_start + i * 4 n_flank_weights.append(weights[keras_idx]) # n_post_i_w n_flank_weights.append(weights[keras_idx + 1]) # n_post_i_b c_flank_weights.append(weights[keras_idx + 2]) # c_post_i_w c_flank_weights.append(weights[keras_idx + 3]) # c_post_i_b # Add in PyTorch order: all n_flank first, then all c_flank reordered.extend(n_flank_weights) reordered.extend(c_flank_weights) # Remaining weights (avg dense and output) stay in same order reordered.extend(weights[post_conv_end:]) return reordered class Class1ProcessingNeuralNetwork(object): """ A neural network for antigen processing prediction """ network_hyperparameter_defaults = HyperparameterDefaults( amino_acid_encoding="BLOSUM62", peptide_max_length=15, n_flank_length=10, c_flank_length=10, flanking_averages=False, convolutional_filters=16, convolutional_kernel_size=8, convolutional_activation="tanh", convolutional_kernel_l1_l2=[0.0001, 0.0001], dropout_rate=0.5, post_convolutional_dense_layer_sizes=[], ) """ Hyperparameters (and their default values) that affect the neural network architecture. """ fit_hyperparameter_defaults = HyperparameterDefaults( max_epochs=500, validation_split=0.1, early_stopping=True, minibatch_size=256, ) """ Hyperparameters for neural network training. """ early_stopping_hyperparameter_defaults = HyperparameterDefaults( patience=30, min_delta=0.0, ) """ Hyperparameters for early stopping. """ compile_hyperparameter_defaults = HyperparameterDefaults( optimizer="adam", learning_rate=None, ) """ Loss and optimizer hyperparameters. """ auxiliary_input_hyperparameter_defaults = HyperparameterDefaults() """ Allele feature hyperparameters. """ hyperparameter_defaults = ( network_hyperparameter_defaults.extend(fit_hyperparameter_defaults) .extend(early_stopping_hyperparameter_defaults) .extend(compile_hyperparameter_defaults) .extend(auxiliary_input_hyperparameter_defaults) ) def __init__(self, **hyperparameters): self.hyperparameters = self.hyperparameter_defaults.with_defaults( hyperparameters ) self._network = None self.network_json = None self.network_weights = None self.fit_info = [] @property def sequence_lengths(self): """ Supported maximum sequence lengths Returns ------- dict of string -> int Keys are "peptide", "n_flank", "c_flank". Values give the maximum supported sequence length. """ return { "peptide": self.hyperparameters["peptide_max_length"], "n_flank": self.hyperparameters["n_flank_length"], "c_flank": self.hyperparameters["c_flank_length"], } def get_device(self): """Get the PyTorch device to use.""" return get_pytorch_device() def network(self): """ Return the PyTorch model associated with this network. """ if self._network is None and self.network_json is not None: # Re-create the network using hyperparameters self._network = self.make_network( **self.network_hyperparameter_defaults.subselect(self.hyperparameters) ) if self.network_weights is not None: # Detect if weights are from Keras or PyTorch format # Keras JSON has 'class_name': 'Model', PyTorch has 'hyperparameters' try: config = json.loads(self.network_json) is_keras_format = config.get('class_name') in ('Model', 'Functional') except (json.JSONDecodeError, TypeError): is_keras_format = False self._network.set_weights_list( self.network_weights, auto_convert_keras=is_keras_format ) return self._network @staticmethod def _regularized_parameters(network): """ Parameters subject to master-branch convolution kernel regularization. """ for name, param in network.named_parameters(): if not param.requires_grad or not name.endswith("weight"): continue if ( name == "conv1.weight" or "n_flank_post_convs" in name or "c_flank_post_convs" in name): yield param @staticmethod def _regularization_penalty(parameters, l1=0.0, l2=0.0): """ Match Keras kernel_regularizer semantics used on convolution kernels. """ parameters = tuple(parameters) if not parameters or (not l1 and not l2): return None penalty = torch.zeros((), device=parameters[0].device) for param in parameters: if l1: penalty = penalty + (l1 * param.abs().sum()) if l2: penalty = penalty + (l2 * param.square().sum()) return penalty def update_network_description(self): """ Update self.network_json and self.network_weights properties based on this instances's neural network. """ if self._network is not None: # Store hyperparameters as JSON (not the actual model structure) self.network_json = json.dumps({'hyperparameters': dict(self.hyperparameters)}) self.network_weights = self._network.get_weights_list() def fit( self, sequences, targets, sample_weights=None, shuffle_permutation=None, verbose=1, progress_callback=None, progress_preamble="", progress_print_interval=5.0, ): """ Fit the neural network. Parameters ---------- sequences : FlankingEncoding Peptides and upstream/downstream flanking sequences targets : list of float 1 indicates hit, 0 indicates decoy sample_weights : list of float If not specified all samples have equal weight. shuffle_permutation : list of int Permutation (integer list) of same length as peptides and affinities If None, then a random permutation will be generated. verbose : int Verbosity level progress_callback : function No-argument function to call after each epoch. progress_preamble : string Optional string of information to include in each progress update progress_print_interval : float How often (in seconds) to print progress update. Set to None to disable. """ device = self.get_device() x_dict = self.network_input(sequences) # Shuffle if shuffle_permutation is None: shuffle_permutation = numpy.random.permutation(len(targets)) targets = numpy.array(targets)[shuffle_permutation] assert numpy.isnan(targets).sum() == 0, targets if sample_weights is not None: sample_weights = numpy.array(sample_weights)[shuffle_permutation] for key in list(x_dict): x_dict[key] = x_dict[key][shuffle_permutation] fit_info = collections.defaultdict(list) if self._network is None: self._network = self.make_network( **self.network_hyperparameter_defaults.subselect(self.hyperparameters) ) if verbose > -1: print(self._network) network = self.network() network.to(device) # Setup optimizer optimizer = self._create_optimizer(network) # Loss function (binary cross-entropy) loss_fn = nn.BCELoss(reduction='none') reg_l1, reg_l2 = self.hyperparameters.get( "convolutional_kernel_l1_l2", [0.0, 0.0], ) regularization_parameters = tuple(self._regularized_parameters(network)) # Validation split val_split = self.hyperparameters["validation_split"] n_total = len(targets) n_val = int(n_total * val_split) n_train = n_total - n_val indices = numpy.arange(n_total) train_indices = indices[:n_train] val_indices = indices[n_train:] last_progress_print = None min_val_loss_iteration = None min_val_loss = None start = time.time() for epoch in range(self.hyperparameters["max_epochs"]): epoch_start = time.time() network.train() # Shuffle training indices each epoch numpy.random.shuffle(train_indices) batch_size = self.hyperparameters["minibatch_size"] train_losses = [] for batch_start in range(0, n_train, batch_size): batch_idx = train_indices[batch_start:batch_start + batch_size] seq_batch = torch.from_numpy(x_dict["sequence"][batch_idx]).float().to(device) length_batch = torch.from_numpy(x_dict["peptide_length"][batch_idx]).to(device) target_batch = torch.from_numpy(targets[batch_idx].astype(numpy.float32)).to(device) inputs = {"sequence": seq_batch, "peptide_length": length_batch} optimizer.zero_grad() predictions = network(inputs) loss = loss_fn(predictions, target_batch) if sample_weights is not None: weight_batch = torch.from_numpy( sample_weights[batch_idx].astype(numpy.float32) ).to(device) loss = loss * weight_batch loss = loss.mean() regularization_penalty = self._regularization_penalty( regularization_parameters, l1=reg_l1, l2=reg_l2, ) if regularization_penalty is not None: loss = loss + regularization_penalty loss.backward() optimizer.step() train_losses.append(loss.item()) epoch_time = time.time() - epoch_start train_loss = numpy.mean(train_losses) fit_info["loss"].append(train_loss) # Validation if val_split > 0: network.eval() with torch.no_grad(): val_seq = torch.from_numpy(x_dict["sequence"][val_indices]).float().to(device) val_length = torch.from_numpy(x_dict["peptide_length"][val_indices]).to(device) val_targets = torch.from_numpy(targets[val_indices].astype(numpy.float32)).to(device) val_inputs = {"sequence": val_seq, "peptide_length": val_length} val_predictions = network(val_inputs) val_loss = loss_fn(val_predictions, val_targets) if sample_weights is not None: val_weights = torch.from_numpy( sample_weights[val_indices].astype(numpy.float32) ).to(device) val_loss = val_loss * val_weights val_loss = val_loss.mean() regularization_penalty = self._regularization_penalty( regularization_parameters, l1=reg_l1, l2=reg_l2, ) if regularization_penalty is not None: val_loss = val_loss + regularization_penalty val_loss = val_loss.item() fit_info["val_loss"].append(val_loss) gc.collect() # Progress printing if progress_print_interval is not None and ( not last_progress_print or (time.time() - last_progress_print > progress_print_interval) ): print( ( progress_preamble + " " + "Epoch %3d / %3d [%0.2f sec]: loss=%g. " "Min val loss (%s) at epoch %s" % ( epoch, self.hyperparameters["max_epochs"], epoch_time, fit_info["loss"][-1], str(min_val_loss), min_val_loss_iteration, ) ).strip() ) last_progress_print = time.time() if val_split > 0: if min_val_loss is None or ( val_loss < min_val_loss - self.hyperparameters["min_delta"] ): min_val_loss = val_loss min_val_loss_iteration = epoch if self.hyperparameters["early_stopping"]: threshold = ( min_val_loss_iteration + self.hyperparameters["patience"] ) if epoch > threshold: if progress_print_interval is not None: print( ( progress_preamble + " " + "Stopping at epoch %3d / %3d: loss=%g. " "Min val loss (%g) at epoch %s" % ( epoch, self.hyperparameters["max_epochs"], fit_info["loss"][-1], ( min_val_loss if min_val_loss is not None else numpy.nan ), min_val_loss_iteration, ) ).strip() ) break if progress_callback: progress_callback() fit_info["time"] = time.time() - start fit_info["num_points"] = len(sequences.dataframe) self.fit_info.append(dict(fit_info)) if verbose > -1: print("Output weights", self.network().output_layer.weight.data.cpu().numpy()) def _create_optimizer(self, network): """Create an optimizer for the network.""" optimizer_name = self.hyperparameters["optimizer"].lower() lr = ( self.hyperparameters["learning_rate"] if self.hyperparameters["learning_rate"] is not None else 0.001 ) if optimizer_name == "adam": # Match Keras default epsilon=1e-07. return torch.optim.Adam(network.parameters(), lr=lr, eps=1e-07) elif optimizer_name == "rmsprop": # Match Keras defaults: rho=0.9, epsilon=1e-07. return torch.optim.RMSprop(network.parameters(), lr=lr, alpha=0.9, eps=1e-07) elif optimizer_name == "sgd": return torch.optim.SGD(network.parameters(), lr=lr) else: return torch.optim.Adam(network.parameters(), lr=lr, eps=1e-07) def predict( self, peptides, n_flanks=None, c_flanks=None, batch_size=DEFAULT_PREDICT_BATCH_SIZE, ): """ Predict antigen processing. Parameters ---------- peptides : list of string Peptide sequences n_flanks : list of string Upstream sequence before each peptide c_flanks : list of string Downstream sequence after each peptide batch_size : int Prediction batch size. Returns ------- numpy.array Processing scores. Range is 0-1, higher indicates more favorable processing. """ if n_flanks is None: n_flanks = [""] * len(peptides) if c_flanks is None: c_flanks = [""] * len(peptides) sequences = FlankingEncoding( peptides=peptides, n_flanks=n_flanks, c_flanks=c_flanks ) return self.predict_encoded(sequences=sequences, batch_size=batch_size) def predict_encoded( self, sequences, throw=True, batch_size=DEFAULT_PREDICT_BATCH_SIZE ): """ Predict antigen processing. Parameters ---------- sequences : FlankingEncoding Peptides and flanking sequences throw : boolean Whether to throw exception on unsupported peptides batch_size : int Prediction batch size. Returns ------- numpy.array """ device = self.get_device() x_dict = self.network_input(sequences, throw=throw) network = self.network() network.to(device) network.eval() n_samples = len(x_dict["sequence"]) all_predictions = [] def prediction_tensor(batch_array): batch_array = numpy.asarray(batch_array) if not batch_array.flags.writeable: batch_array = batch_array.copy() return torch.from_numpy(batch_array).to(device) with torch.no_grad(): for batch_start in range(0, n_samples, batch_size): batch_end = min(batch_start + batch_size, n_samples) seq_batch = prediction_tensor( x_dict["sequence"][batch_start:batch_end] ).float() length_batch = prediction_tensor( x_dict["peptide_length"][batch_start:batch_end] ) inputs = {"sequence": seq_batch, "peptide_length": length_batch} batch_predictions = network(inputs) all_predictions.append(batch_predictions.cpu().numpy()) raw_predictions = numpy.concatenate(all_predictions, axis=0) predictions = numpy.array(raw_predictions, dtype="float64") return predictions def network_input(self, sequences, throw=True): """ Encode peptides to the fixed-length encoding expected by the neural network (which depends on the architecture). Parameters ---------- sequences : FlankingEncoding Peptides and flanking sequences throw : boolean Whether to throw exception on unsupported peptides Returns ------- dict """ encoded = sequences.vector_encode( self.hyperparameters["amino_acid_encoding"], self.hyperparameters["peptide_max_length"], n_flank_length=self.hyperparameters["n_flank_length"], c_flank_length=self.hyperparameters["c_flank_length"], allow_unsupported_amino_acids=True, throw=throw, ) result = { "sequence": encoded.array, "peptide_length": encoded.peptide_lengths, } return result def make_network( self, amino_acid_encoding, peptide_max_length, n_flank_length, c_flank_length, flanking_averages, convolutional_filters, convolutional_kernel_size, convolutional_activation, convolutional_kernel_l1_l2, dropout_rate, post_convolutional_dense_layer_sizes, ): """ Helper function to make a PyTorch network given hyperparameters. """ empty_x_dict = self.network_input(FlankingEncoding([], [], [])) sequence_dims = empty_x_dict["sequence"].shape[1:] numpy.testing.assert_equal( sequence_dims[0], peptide_max_length + n_flank_length + c_flank_length ) return Class1ProcessingModel( sequence_dims=sequence_dims, n_flank_length=n_flank_length, c_flank_length=c_flank_length, peptide_max_length=peptide_max_length, flanking_averages=flanking_averages, convolutional_filters=convolutional_filters, convolutional_kernel_size=convolutional_kernel_size, convolutional_activation=convolutional_activation, convolutional_kernel_l1_l2=convolutional_kernel_l1_l2, dropout_rate=dropout_rate, post_convolutional_dense_layer_sizes=post_convolutional_dense_layer_sizes, ) def __getstate__(self): """ serialize to a dict. Model weights are included. For pickle support. Returns ------- dict """ self.update_network_description() result = dict(self.__dict__) result["_network"] = None return result def __setstate__(self, state): """ Deserialize. For pickle support. """ self.__dict__.update(state) def get_weights(self): """ Get the network weights Returns ------- list of numpy.array giving weights for each layer or None if there is no network """ self.update_network_description() return self.network_weights def get_config(self): """ serialize to a dict all attributes except model weights Returns ------- dict """ self.update_network_description() result = dict(self.__dict__) del result["_network"] result["network_weights"] = None return result @classmethod def from_config(cls, config, weights=None): """ deserialize from a dict returned by get_config(). Parameters ---------- config : dict weights : list of array, optional Network weights to restore Returns ------- Class1ProcessingNeuralNetwork """ config = dict(config) instance = cls(**config.pop("hyperparameters")) instance.__dict__.update(config) instance.network_weights = weights assert instance._network is None return instance ================================================ FILE: mhcflurry/class1_processing_predictor.py ================================================ from os.path import join, exists, abspath from os import mkdir from socket import gethostname from getpass import getuser import time import json import hashlib import logging import collections import numpy import pandas from .version import __version__ from .class1_neural_network import DEFAULT_PREDICT_BATCH_SIZE from .flanking_encoding import FlankingEncoding from .downloads import get_default_class1_processing_models_dir from .class1_processing_neural_network import Class1ProcessingNeuralNetwork from .common import save_weights, load_weights, NumpyJSONEncoder class Class1ProcessingPredictor(object): """ User-facing interface to antigen processing prediction. Delegates to an ensemble of Class1ProcessingNeuralNetwork instances. """ def __init__( self, models, manifest_df=None, metadata_dataframes=None, provenance_string=None): """ Instantiate a new Class1ProcessingPredictor Users will generally call load() to restore a saved predictor rather than using this constructor. Parameters ---------- models : list of Class1ProcessingNeuralNetwork Neural networks in the ensemble. manifest_df : pandas.DataFrame Manifest dataframe. If not specified a new one will be created when needed. metadata_dataframes : dict of string -> pandas.DataFrame Arbitrary metadata associated with this predictor provenance_string : string, optional Optional info string to use in __str__. """ self.models = models self._manifest_df = manifest_df self.metadata_dataframes = ( dict(metadata_dataframes) if metadata_dataframes else {}) self.provenance_string = provenance_string @property def sequence_lengths(self): """ Supported maximum sequence lengths. Passing a peptide greater than the maximum supported length results in an error. Passing an N- or C-flank sequence greater than the maximum supported length results in some part of it being ignored. Returns ------- dict of string -> int Keys are "peptide", "n_flank", "c_flank". Values give the maximum supported sequence length. """ df = pandas.DataFrame([model.sequence_lengths for model in self.models]) return { "peptide": df.peptide.min(), # min: anything greater is error "n_flank": df.n_flank.max(), # max: anything greater is ignored "c_flank": df.c_flank.max(), } def add_models(self, models): """ Add models to the ensemble (in-place). Parameters ---------- models : list of Class1ProcessingNeuralNetwork Returns ------- list of string Names of the new models. """ new_model_names = [] original_manifest = self.manifest_df new_manifest_rows = [] for model in models: model_name = self.model_name(len(self.models)) row = pandas.Series(collections.OrderedDict([ ("model_name", model_name), ("config_json", json.dumps( model.get_config(), cls=NumpyJSONEncoder)), ("model", model), ])).to_frame().T new_manifest_rows.append(row) self.models.append(model) new_model_names.append(model_name) self._manifest_df = pandas.concat( [original_manifest] + new_manifest_rows, ignore_index=True) self.check_consistency() return new_model_names @property def manifest_df(self): """ A pandas.DataFrame describing the models included in this predictor. Returns ------- pandas.DataFrame """ if self._manifest_df is None: rows = [] for (i, model) in enumerate(self.models): model_config = model.get_config() rows.append(( self.model_name(i), json.dumps(model_config, cls=NumpyJSONEncoder), model )) self._manifest_df = pandas.DataFrame( rows, columns=["model_name", "config_json", "model"]) return self._manifest_df @staticmethod def model_name(num): """ Generate a model name Returns ------- string """ random_string = hashlib.sha1( str(time.time()).encode()).hexdigest()[:16] return "CLEAVAGE-CLASSI-%d-%s" % ( num, random_string) @staticmethod def weights_path(models_dir, model_name): """ Generate the path to the weights file for a model Parameters ---------- models_dir : string model_name : string Returns ------- string """ return join(models_dir, "weights_%s.npz" % model_name) def predict( self, peptides, n_flanks=None, c_flanks=None, throw=True, batch_size=DEFAULT_PREDICT_BATCH_SIZE): """ Predict antigen processing. Parameters ---------- peptides : list of string Peptide sequences n_flanks : list of string Upstream sequence before each peptide c_flanks : list of string Downstream sequence after each peptide throw : boolean If True, a ValueError will be raised in the case of unsupported peptides. If False, a warning will be logged and the predictions for those peptides will be NaN. batch_size : int Prediction batch size. Returns ------- numpy.array Processing scores. Range is 0-1, higher indicates more favorable processing. """ return self.predict_to_dataframe( peptides=peptides, n_flanks=n_flanks, c_flanks=c_flanks, throw=throw, batch_size=batch_size).score.values def predict_to_dataframe( self, peptides, n_flanks=None, c_flanks=None, throw=True, batch_size=DEFAULT_PREDICT_BATCH_SIZE): """ Predict antigen processing. See `predict` method for parameter descriptions. Returns ------- pandas.DataFrame Processing predictions are in the "score" column. Also includes peptides and flanking sequences. """ if n_flanks is None: n_flanks = [""] * len(peptides) if c_flanks is None: c_flanks = [""] * len(peptides) sequences = FlankingEncoding( peptides=peptides, n_flanks=n_flanks, c_flanks=c_flanks) return self.predict_to_dataframe_encoded( sequences=sequences, throw=throw, batch_size=batch_size) def predict_to_dataframe_encoded( self, sequences, throw=True, batch_size=DEFAULT_PREDICT_BATCH_SIZE): """ Predict antigen processing. See `predict` method for more information. Parameters ---------- sequences : FlankingEncoding batch_size : int throw : boolean Returns ------- pandas.DataFrame """ score_array = [] for (i, network) in enumerate(self.models): predictions = network.predict_encoded( sequences, throw=throw, batch_size=batch_size) score_array.append(predictions) score_array = numpy.array(score_array) result_df = pandas.DataFrame({ "peptide": sequences.dataframe.peptide, "n_flank": sequences.dataframe.n_flank, "c_flank": sequences.dataframe.c_flank, "score": numpy.mean(score_array, axis=0), }) return result_df def check_consistency(self): """ Verify that self.manifest_df is consistent with instance variables. Currently only checks for agreement on the total number of models. Throws AssertionError if inconsistent. """ assert len(self.manifest_df) == len(self.models), ( "Manifest seems out of sync with models: %d vs %d entries: \n%s"% ( len(self.manifest_df), len(self.models), str(self.manifest_df))) def save(self, models_dir, model_names_to_write=None, write_metadata=True): """ Serialize the predictor to a directory on disk. If the directory does not exist it will be created. The serialization format consists of a file called "manifest.csv" with the configurations of each Class1ProcessingNeuralNetwork, along with per-network files giving the model weights. Parameters ---------- models_dir : string Path to directory. It will be created if it doesn't exist. """ self.check_consistency() if model_names_to_write is None: # Write all models model_names_to_write = self.manifest_df.model_name.values if not exists(models_dir): mkdir(models_dir) sub_manifest_df = self.manifest_df.loc[ self.manifest_df.model_name.isin(model_names_to_write) ].copy() # Network JSON configs may have changed since the models were added, # so we update the JSON configs here also. updated_network_config_jsons = [] for (_, row) in sub_manifest_df.iterrows(): updated_network_config_jsons.append( json.dumps(row.model.get_config(), cls=NumpyJSONEncoder)) weights_path = self.weights_path(models_dir, row.model_name) save_weights(row.model.get_weights(), weights_path) logging.info("Wrote: %s", weights_path) sub_manifest_df["config_json"] = updated_network_config_jsons self.manifest_df.loc[ sub_manifest_df.index, "config_json" ] = updated_network_config_jsons write_manifest_df = self.manifest_df[[ c for c in self.manifest_df.columns if c != "model" ]] manifest_path = join(models_dir, "manifest.csv") write_manifest_df.to_csv(manifest_path, index=False) logging.info("Wrote: %s", manifest_path) if write_metadata: # Write "info.txt" info_path = join(models_dir, "info.txt") rows = [ ("trained on", time.asctime()), ("package ", "mhcflurry %s" % __version__), ("hostname ", gethostname()), ("user ", getuser()), ] pandas.DataFrame(rows).to_csv( info_path, sep="\t", header=False, index=False) if self.metadata_dataframes: for (name, df) in self.metadata_dataframes.items(): metadata_df_path = join(models_dir, "%s.csv.bz2" % name) df.to_csv(metadata_df_path, index=False, compression="bz2") @classmethod def load(cls, models_dir=None, max_models=None): """ Deserialize a predictor from a directory on disk. Parameters ---------- models_dir : string Path to directory. If unspecified the default downloaded models are used. max_models : int, optional Maximum number of models to load Returns ------- `Class1ProcessingPredictor` instance """ if models_dir is None: models_dir = get_default_class1_processing_models_dir() manifest_path = join(models_dir, "manifest.csv") manifest_df = pandas.read_csv(manifest_path, nrows=max_models) models = [] for (_, row) in manifest_df.iterrows(): weights_filename = cls.weights_path(models_dir, row.model_name) config = json.loads(row.config_json) model = Class1ProcessingNeuralNetwork.from_config( config, weights=load_weights(abspath(weights_filename))) models.append(model) manifest_df["model"] = models logging.info("Loaded %d class1 processing models", len(models)) provenance_string = None try: info_path = join(models_dir, "info.txt") info = pandas.read_csv( info_path, sep="\t", header=None, index_col=0).iloc[ :, 0 ].to_dict() provenance_string = "generated on %s" % info["trained on"] except OSError: pass result = cls( models=models, manifest_df=manifest_df, provenance_string=provenance_string) return result def __repr__(self): pieces = ["at 0x%0x" % id(self), "[mhcflurry %s]" % __version__] if self.provenance_string: pieces.append(self.provenance_string) return "" % " ".join(pieces) ================================================ FILE: mhcflurry/cluster_parallelism.py ================================================ """ Simple, relatively naive parallel map implementation for HPC clusters. Used for training MHCflurry models. """ import traceback import sys import os import time import signal import argparse import pickle import subprocess import shutil from .local_parallelism import call_wrapped_kwargs from .class1_affinity_predictor import Class1AffinityPredictor try: from shlex import quote except ImportError: from pipes import quote def add_cluster_parallelism_args(parser): """ Add commandline arguments controlling cluster parallelism to an argparse ArgumentParser. Parameters ---------- parser : argparse.ArgumentParser """ group = parser.add_argument_group("Cluster parallelism") group.add_argument( "--cluster-parallelism", default=False, action="store_true") group.add_argument( "--cluster-submit-command", default='sh', help="Default: %(default)s") group.add_argument( "--cluster-results-workdir", default='./cluster-workdir', help="Default: %(default)s") group.add_argument( "--additional-complete-file", default='STDERR', help="Additional file to monitor for job completion. Default: %(default)s") group.add_argument( '--cluster-script-prefix-path', help="", ) group.add_argument( '--cluster-max-retries', type=int, help="How many times to rerun failing jobs. Default: %(default)s", default=3) def cluster_results_from_args( args, work_function, work_items, constant_data=None, input_serialization_method="pickle", result_serialization_method="pickle", clear_constant_data=False): """ Parallel map configurable using commandline arguments. See the cluster_results() function for docs. The `args` parameter should be an argparse.Namespace from an argparse parser generated using the add_cluster_parallelism_args() function. Parameters ---------- args work_function work_items constant_data result_serialization_method clear_constant_data Returns ------- generator """ return cluster_results( work_function=work_function, work_items=work_items, constant_data=constant_data, submit_command=args.cluster_submit_command, results_workdir=args.cluster_results_workdir, additional_complete_file=args.additional_complete_file, script_prefix_path=args.cluster_script_prefix_path, input_serialization_method=input_serialization_method, result_serialization_method=result_serialization_method, max_retries=args.cluster_max_retries, clear_constant_data=clear_constant_data ) def cluster_results( work_function, work_items, constant_data=None, submit_command="sh", results_workdir="./cluster-workdir", additional_complete_file=None, script_prefix_path=None, input_serialization_method="pickle", result_serialization_method="pickle", max_retries=3, clear_constant_data=False): """ Parallel map on an HPC cluster. Returns [work_function(item) for item in work_items] where each invocation of work_function is performed as a separate HPC cluster job. Order is preserved. Optionally, "constant data" can be specified, which will be passed to each work_function() invocation as a keyword argument called constant_data. This data is serialized once and all workers read it from the same source, which is more efficient than serializing it separately for each worker. Each worker's input is serialized to a shared NFS directory and the submit_command is used to launch a job to process that input. The shared filesystem is polled occasionally to watch for results, which are fed back to the user. Parameters ---------- work_function : A -> B work_items : list of A constant_data : object submit_command : string For running on LSF, we use "bsub" here. results_workdir : string Path to NFS shared directory where inputs and results can be written script_prefix_path : string Path to script that will be invoked to run each worker. A line calling the _mhcflurry-cluster-worker-entry-point command will be appended to the contents of this file. result_serialization_method : string, one of "pickle" or "save_predictor" The "save_predictor" works only when the return type of work_function is Class1AffinityPredictor max_retries : int How many times to attempt to re-launch a failed worker clear_constant_data : bool If True, the constant data dict is cleared on the launching host after it is serialized to disk. Returns ------- generator of B """ if input_serialization_method == "dill": import dill input_serialization_module = dill else: assert input_serialization_method == "pickle" input_serialization_module = pickle constant_payload = { 'constant_data': constant_data, 'function': work_function, } if not os.path.exists(results_workdir): os.mkdir(results_workdir) work_dir = os.path.join( os.path.abspath(results_workdir), str(int(time.time()))) os.mkdir(work_dir) constant_payload_path = os.path.join( work_dir, "global_data." + input_serialization_method) with open(constant_payload_path, "wb") as fd: input_serialization_module.dump( constant_payload, fd, protocol=input_serialization_module.HIGHEST_PROTOCOL) print("Wrote:", constant_payload_path) if clear_constant_data: constant_data.clear() print("Cleared constant data to free up memory.") if script_prefix_path: with open(script_prefix_path) as fd: script_prefix = fd.read() else: script_prefix = "#!/bin/bash" result_items = [] for (i, item) in enumerate(work_items): item_workdir = os.path.join( work_dir, "work-item.%03d-of-%03d" % (i, len(work_items))) os.mkdir(item_workdir) item_data_path = os.path.join( item_workdir, "data." + input_serialization_method) with open(item_data_path, "wb") as fd: input_serialization_module.dump( item, fd, protocol=input_serialization_module.HIGHEST_PROTOCOL) print("Wrote:", item_data_path) item_result_path = os.path.join(item_workdir, "result") item_error_path = os.path.join(item_workdir, "error.pkl") item_finished_path = os.path.join(item_workdir, "COMPLETE") item_script_pieces = [ script_prefix.format(work_item_num=i, work_dir=item_workdir) ] worker_command = os.environ.get( "MHCFLURRY_CLUSTER_WORKER_COMMAND", "_mhcflurry-cluster-worker-entry-point" ) item_script_pieces.append(" ".join([ worker_command, "--constant-data", quote(constant_payload_path), "--worker-data", quote(item_data_path), "--result-out", quote(item_result_path), "--error-out", quote(item_error_path), "--complete-dir", quote(item_finished_path), "--input-serialization-method", input_serialization_method, "--result-serialization-method", result_serialization_method, ])) item_script = "\n".join(item_script_pieces) item_script_path = os.path.join( item_workdir, "run.%d.sh" % i) with open(item_script_path, "w") as fd: fd.write(item_script) print("Wrote:", item_script_path) launch_command = " ".join([ submit_command, "<", quote(item_script_path) ]) subprocess.check_call(launch_command, shell=True) print("Invoked", launch_command) result_items.append({ 'work_dir': item_workdir, 'finished_path': item_finished_path, 'result_path': item_result_path, 'error_path': item_error_path, 'retry_num': 0, 'launch_command': launch_command, }) def result_generator(): additional_complete_file_path = None start = time.time() while result_items: print("[%0.1f sec elapsed] waiting on %d / %d items." % ( time.time() - start, len(result_items), len(work_items))) while True: result_item = None for d in result_items: if additional_complete_file: additional_complete_file_path = os.path.join( d['work_dir'], additional_complete_file) if os.path.exists(d['finished_path']): result_item = d break if additional_complete_file and os.path.exists( additional_complete_file_path): result_item = d print("Exists", additional_complete_file_path) break if result_item is None: time.sleep(60) else: result_items.remove(result_item) break complete_dir = result_item['finished_path'] result_path = result_item['result_path'] error_path = result_item['error_path'] retry_num = result_item['retry_num'] launch_command = result_item['launch_command'] print("[%0.1f sec elapsed] processing item %s" % ( time.time() - start, result_item)) if os.path.exists(error_path) or not os.path.exists(result_path): if os.path.exists(error_path): print("Error path exists", error_path) try: with open(error_path, "rb") as fd: exception = pickle.load(fd) print(exception) except Exception as e: exception = RuntimeError( "Error, but couldn't read error path: %s %s" % ( type(e), str(e))) else: exception = RuntimeError("Error, but no exception saved") if not os.path.exists(result_path): print("Result path does NOT exist", result_path) if retry_num < max_retries: print("Relaunching", launch_command) attempt_dir = os.path.join( result_item['work_dir'], "attempt.%d" % retry_num) if os.path.exists(complete_dir): shutil.move(complete_dir, attempt_dir) # directory if additional_complete_file and os.path.exists( additional_complete_file_path): shutil.move(additional_complete_file_path, attempt_dir) if os.path.exists(error_path): shutil.move(error_path, attempt_dir) subprocess.check_call(launch_command, shell=True) print("Invoked", launch_command) result_item['retry_num'] += 1 result_items.append(result_item) continue else: print("Max retries exceeded", max_retries) raise exception if os.path.exists(result_path): print("Result path exists", result_path) if result_serialization_method == "save_predictor": result = Class1AffinityPredictor.load(result_path) elif result_serialization_method == "pickle": with open(result_path, "rb") as fd: result = pickle.load(fd) else: raise ValueError( "Unsupported serialization method", result_serialization_method) yield result else: raise RuntimeError("Results do not exist", result_path) return result_generator() parser = argparse.ArgumentParser( usage="Entry point for cluster workers") parser.add_argument( "--constant-data", required=True, ) parser.add_argument( "--worker-data", required=True, ) parser.add_argument( "--result-out", required=True, ) parser.add_argument( "--error-out", required=True, ) parser.add_argument( "--complete-dir", ) parser.add_argument( "--input-serialization-method", choices=("pickle", "dill"), default="pickle") parser.add_argument( "--result-serialization-method", choices=("pickle", "save_predictor"), default="pickle") def worker_entry_point(argv=sys.argv[1:]): """ Entry point for the worker command. Parameters ---------- argv : list of string """ # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) if args.input_serialization_method == "dill": import dill input_serialization_module = dill else: assert args.input_serialization_method == "pickle" input_serialization_module = pickle with open(args.constant_data, "rb") as fd: constant_payload = input_serialization_module.load(fd) with open(args.worker_data, "rb") as fd: worker_data = input_serialization_module.load(fd) kwargs = dict(worker_data) if constant_payload['constant_data'] is not None: kwargs['constant_data'] = constant_payload['constant_data'] try: result = call_wrapped_kwargs(constant_payload['function'], kwargs) if args.result_serialization_method == 'save_predictor': result.save(args.result_out) else: with open(args.result_out, "wb") as fd: pickle.dump(result, fd, pickle.HIGHEST_PROTOCOL) print("Wrote:", args.result_out) except Exception as e: print("Exception: ", e) with open(args.error_out, "wb") as fd: pickle.dump(e, fd, pickle.HIGHEST_PROTOCOL) print("Wrote:", args.error_out) raise finally: if args.complete_dir: os.mkdir(args.complete_dir) print("Created: ", args.complete_dir) ================================================ FILE: mhcflurry/cluster_worker_entry_point.py ================================================ """ Module entry point for cluster workers to ensure the current interpreter is used. """ from .cluster_parallelism import worker_entry_point if __name__ == "__main__": worker_entry_point() ================================================ FILE: mhcflurry/common.py ================================================ import collections import logging import sys import os import json import warnings import numpy import pandas from mhcgnomes import parse, Allele, AlleleWithoutGene, Gene from . import amino_acid def normalize_allele_name( raw_name, forbidden_substrings=("MIC", "HFE"), raise_on_error=True, default_value=None, use_allele_aliases=True): """ Parses a string into a normalized allele representation. Parameters ---------- raw_name : str Input string to normalize forbidden_substrings : tuple of str Fail on inputs which contain any of these strings raise_on_error : bool If an allele fails to parse raise an exception if this argument is True default_value : str or None If raise_on_error is False and allele fails to parse, return this value use_allele_aliases : bool If True, use mhcgnomes allele alias table (IMGT historical name reassignments). Some old allele names (e.g. B*44:01, Cw*0201) were retired by IMGT when the original sequences were found to contain errors. Defaults to False to preserve current IMGT nomenclature; the pseudosequence loading code explicitly handles aliases with fallback logic. Returns ------- str or None """ for forbidden_substring in forbidden_substrings: if forbidden_substring in raw_name: if raise_on_error: raise ValueError("Unsupported gene in MHC allele name: %s" % raw_name) else: return default_value result = parse( raw_name, only_class1=True, required_result_types=[Allele, AlleleWithoutGene, Gene], preferred_result_types=[Allele], use_allele_aliases=use_allele_aliases, infer_class2_pairing=False, collapse_singleton_haplotypes=True, collapse_singleton_serotypes=True, raise_on_error=False, ) if result is None: if raise_on_error: raise ValueError("Invalid MHC allele name: %s" % raw_name) else: return default_value if ( result.annotation_pseudogene or result.annotation_null or result.annotation_questionable ): if raise_on_error: raise ValueError("Unsupported annotation on MHC allele: %s" % raw_name) else: return default_value return result.restrict_allele_fields(2).to_string() _pytorch_backend = "auto" _PYTORCH_BACKEND_ALIASES = { "default": "auto", } _TENSORFLOW_BACKEND_ALIASES = { "tensorflow": "auto", "tensorflow-default": "auto", "tensorflow-gpu": "gpu", "tensorflow-cpu": "cpu", } _VALID_PYTORCH_BACKENDS = ("auto", "gpu", "mps", "cpu") def normalize_pytorch_backend(backend): """ Normalize a requested backend name and validate it. Parameters ---------- backend : str or None Returns ------- str or None """ if backend is None: return None backend = _PYTORCH_BACKEND_ALIASES.get(backend, backend) if backend not in _VALID_PYTORCH_BACKENDS: raise ValueError( "Invalid backend %r. Expected one of: %s" % ( backend, ", ".join(_VALID_PYTORCH_BACKENDS), ) ) return backend def configure_pytorch(backend=None, gpu_device_nums=None, num_threads=None): """ Configure PyTorch device backend and threading. Can be called multiple times. Each call updates the settings provided. Parameters ---------- backend : str, optional Device backend: "auto", "gpu", "mps", or "cpu". "auto" selects the best available device (GPU > MPS > CPU). gpu_device_nums : list of int, optional CUDA devices to expose via CUDA_VISIBLE_DEVICES. An empty list hides CUDA entirely for the current process. num_threads : int, optional Number of threads for PyTorch operations """ import torch global _pytorch_backend if backend is not None: _pytorch_backend = normalize_pytorch_backend(backend) if gpu_device_nums is not None: os.environ['CUDA_VISIBLE_DEVICES'] = ','.join(map(str, gpu_device_nums)) if num_threads: torch.set_num_threads(num_threads) def configure_tensorflow(backend=None, gpu_device_nums=None, num_threads=None): """ Backward-compatible configuration entry point from the TF backend era. Parameters ---------- backend : str, optional Legacy backend value retained for API compatibility. TensorFlow-era names such as "tensorflow-cpu" are translated to the equivalent PyTorch backend and emit a deprecation warning. gpu_device_nums : list of int, optional GPU devices to potentially use. num_threads : int, optional Number of threads for backend operations. """ translated_backend = None if backend is not None: translated_backend = _TENSORFLOW_BACKEND_ALIASES.get(backend) if translated_backend is not None: warnings.warn( ( "configure_tensorflow(backend=%r) is deprecated; " "using PyTorch backend=%r. Use configure_pytorch() instead." ) % (backend, translated_backend), FutureWarning, stacklevel=2, ) else: translated_backend = normalize_pytorch_backend(backend) configure_pytorch( backend=translated_backend, gpu_device_nums=gpu_device_nums, num_threads=num_threads, ) def get_pytorch_device(): """ Get the PyTorch device based on the backend set by ``configure_pytorch``. Returns ------- torch.device """ import torch backend = _pytorch_backend if backend == "gpu": if not torch.cuda.is_available(): raise RuntimeError( "Backend 'gpu' requested but CUDA is not available") return torch.device('cuda') elif backend == "mps": if not (hasattr(torch.backends, 'mps') and torch.backends.mps.is_available()): raise RuntimeError( "Backend 'mps' requested but MPS is not available") return torch.device('mps') elif backend == "cpu": return torch.device('cpu') else: # auto: GPU > MPS > CPU if torch.cuda.is_available(): return torch.device('cuda') elif (hasattr(torch.backends, 'mps') and torch.backends.mps.is_available()): return torch.device('mps') else: return torch.device('cpu') def configure_logging(verbose=False): """ Configure logging module using defaults. Parameters ---------- verbose : boolean If true, output will be at level DEBUG, otherwise, INFO. """ level = logging.DEBUG if verbose else logging.INFO logging.basicConfig( format="%(asctime)s.%(msecs)d %(levelname)s %(module)s - %(funcName)s:" " %(message)s", datefmt="%Y-%m-%d %H:%M:%S", stream=sys.stderr, level=level, ) def amino_acid_distribution(peptides, smoothing=0.0): """ Compute the fraction of each amino acid across a collection of peptides. Parameters ---------- peptides : list of string smoothing : float, optional Small number (e.g. 0.01) to add to all amino acid fractions. The higher the number the more uniform the distribution. Returns ------- pandas.Series indexed by amino acids """ peptides = pandas.Series(peptides) aa_counts = pandas.Series(peptides.map(collections.Counter).sum()) normalized = aa_counts / aa_counts.sum() if smoothing: normalized += smoothing normalized /= normalized.sum() return normalized def random_peptides(num, length=9, distribution=None): """ Generate random peptides (kmers). Parameters ---------- num : int Number of peptides to return length : int Length of each peptide distribution : pandas.Series Maps 1-letter amino acid abbreviations to probabilities. If not specified a uniform distribution is used. Returns ---------- list of string """ if num == 0: return [] if distribution is None: distribution = pandas.Series(1, index=sorted(amino_acid.COMMON_AMINO_ACIDS)) distribution /= distribution.sum() return [ "".join(peptide_sequence) for peptide_sequence in numpy.random.choice( distribution.index, p=distribution.values, size=(int(num), int(length)) ) ] def positional_frequency_matrix(peptides): """ Given a set of peptides, calculate a length x amino acids frequency matrix. Parameters ---------- peptides : list of string All of same length Returns ------- pandas.DataFrame Index is position, columns are amino acids """ length = len(peptides[0]) assert all(len(peptide) == length for peptide in peptides) counts = pandas.DataFrame( index=[a for a in amino_acid.BLOSUM62_MATRIX.index if a != "X"], columns=numpy.arange(1, length + 1), ) for i in range(length): counts[i + 1] = pandas.Series([p[i] for p in peptides]).value_counts() result = (counts / len(peptides)).fillna(0.0).T result.index.name = "position" return result def save_weights(weights_list, filename): """ Save model weights to the given filename using numpy's ".npz" format. Parameters ---------- weights_list : list of numpy array filename : string """ numpy.savez( filename, **dict((("array_%d" % i), w) for (i, w) in enumerate(weights_list)) ) def load_weights(filename): """ Restore model weights from the given filename, which should have been created with `save_weights`. Parameters ---------- filename : string Returns ---------- list of array """ with numpy.load(filename) as loaded: weights = [loaded["array_%d" % i] for i in range(len(loaded.keys()))] return weights class NumpyJSONEncoder(json.JSONEncoder): """ JSON encoder (used with json module) that can handle numpy arrays. """ def default(self, obj): if isinstance( obj, ( numpy.int_, numpy.intc, numpy.intp, numpy.int8, numpy.int16, numpy.int32, numpy.int64, numpy.uint8, numpy.uint16, numpy.uint32, numpy.uint64, ), ): return int(obj) elif isinstance( obj, (numpy.float_, numpy.float16, numpy.float32, numpy.float64) ): return float(obj) if isinstance(obj, numpy.ndarray): return obj.tolist() return json.JSONEncoder.default(self, obj) ================================================ FILE: mhcflurry/custom_loss.py ================================================ """ Custom loss functions. For losses supporting inequalities, each training data point is associated with one of (=), (<), or (>). For e.g. (>) inequalities, penalization is applied only if the prediction is less than the given value. This module now delegates to pytorch_losses.py for the actual loss implementations. """ import numpy # Import PyTorch implementations from .pytorch_losses import ( MSEWithInequalities as PyTorchMSEWithInequalities, MSEWithInequalitiesAndMultipleOutputs as PyTorchMSEWithInequalitiesAndMultipleOutputs, MultiallelicMassSpecLoss as PyTorchMultiallelicMassSpecLoss, StandardLoss as PyTorchStandardLoss, ) CUSTOM_LOSSES = {} def get_loss(name): """ Get a custom_loss.Loss instance by name. Parameters ---------- name : string Returns ------- custom_loss.Loss """ if name.startswith("custom:"): try: custom_loss = CUSTOM_LOSSES[name.replace("custom:", "")] except KeyError: raise ValueError( "No such custom loss: %s. Supported losses are: %s" % ( name, ", ".join([ "custom:" + loss_name for loss_name in CUSTOM_LOSSES ]))) return custom_loss return StandardKerasLoss(name) class Loss(object): """ Thin wrapper to keep track of neural network loss functions, which could be custom or baked into PyTorch. Each subclass or instance should define these properties/methods: - name : string - loss : callable This is the PyTorch loss function - encode_y : numpy.ndarray -> numpy.ndarray Transformation to apply to regression target before fitting """ def __init__(self, name=None): self.name = name if name else self.name # use name from class instance def __str__(self): return "" % self.name def loss(self, y_true, y_pred): raise NotImplementedError() def get_keras_loss(self, reduction="sum_over_batch_size"): """ Backward-compatible accessor from the TF/Keras backend era. Parameters ---------- reduction : string Ignored. Kept for API compatibility. """ del reduction # unused legacy argument return self.loss class StandardKerasLoss(Loss): """ A standard loss function such as MSE. """ supports_inequalities = False supports_multiple_outputs = False def __init__(self, loss_name="mse"): self._pytorch_loss = PyTorchStandardLoss(loss_name) self.loss = loss_name Loss.__init__(self, loss_name) @staticmethod def encode_y(y): return numpy.array(y, dtype=numpy.float32) class TransformPredictionsLossWrapper(Loss): """ Wrapper that applies an arbitrary transform to y_pred before calling an underlying loss function. The y_pred_transform function should be a tensor -> tensor function. """ def __init__( self, loss, y_pred_transform=None): self.wrapped_loss = loss self.name = "transformed_%s" % loss.name self.y_pred_transform = y_pred_transform self.supports_inequalities = loss.supports_inequalities self.supports_multiple_outputs = loss.supports_multiple_outputs def encode_y(self, *args, **kwargs): return self.wrapped_loss.encode_y(*args, **kwargs) def loss(self, y_true, y_pred): y_pred_transformed = self.y_pred_transform(y_pred) return self.wrapped_loss.loss(y_true, y_pred_transformed) class MSEWithInequalities(Loss): """ Supports training a regression model on data that includes inequalities (e.g. x < 100). Mean square error is used as the loss for elements with an (=) inequality. For elements with e.g. a (> 0.5) inequality, then the loss for that element is (y - 0.5)^2 (standard MSE) if y < 500 and 0 otherwise. This loss assumes that the normal range for y_true and y_pred is 0 - 1. As a hack, the implementation uses other intervals for y_pred to encode the inequality information. y_true is interpreted as follows: between 0 - 1 Regular MSE loss is used. Penalty (y_pred - y_true)**2 is applied if y_pred is greater or less than y_true. between 2 - 3: Treated as a ">" inequality. Penalty (y_pred - (y_true - 2))**2 is applied only if y_pred is less than y_true - 2. between 4 - 5: Treated as a "<" inequality. Penalty (y_pred - (y_true - 4))**2 is applied only if y_pred is greater than y_true - 4. """ name = "mse_with_inequalities" supports_inequalities = True supports_multiple_outputs = False def __init__(self): self._pytorch_loss = PyTorchMSEWithInequalities() @staticmethod def encode_y(y, inequalities=None): return PyTorchMSEWithInequalities.encode_y(y, inequalities) @staticmethod def _max_value(values): if hasattr(values, "detach"): return float(values.detach().max().item()) return float(numpy.asarray(values).max()) def loss(self, y_true, y_pred): # Support both historical Keras-style (y_true, y_pred) and current # PyTorch-style (y_pred, y_true) calling conventions. if self._max_value(y_true) <= 1.5 and self._max_value(y_pred) > 1.5: y_true, y_pred = y_pred, y_true return self._pytorch_loss(y_pred, y_true) class MSEWithInequalitiesAndMultipleOutputs(Loss): """ Loss supporting inequalities and multiple outputs. This loss assumes that the normal range for y_true and y_pred is 0 - 1. As a hack, the implementation uses other intervals for y_pred to encode the inequality and output-index information. Inequalities are encoded into the regression target as in the MSEWithInequalities loss. Multiple outputs are encoded by mapping each regression target x (after transforming for inequalities) using the rule x -> x + i * 10 where i is the output index. The reason for explicitly encoding multiple outputs this way (rather than just making the regression target a matrix instead of a vector) is that in our use cases we frequently have missing data in the regression target. This encoding gives a simple way to penalize only on (data point, output index) pairs that have labels. """ name = "mse_with_inequalities_and_multiple_outputs" supports_inequalities = True supports_multiple_outputs = True def __init__(self): self._pytorch_loss = PyTorchMSEWithInequalitiesAndMultipleOutputs() @staticmethod def encode_y(y, inequalities=None, output_indices=None): return PyTorchMSEWithInequalitiesAndMultipleOutputs.encode_y( y, inequalities, output_indices ) def loss(self, y_true, y_pred): # Support both historical Keras-style (y_true, y_pred) and current # PyTorch-style (y_pred, y_true) calling conventions. if ( getattr(y_true, "ndim", None) == 2 and getattr(y_pred, "ndim", None) == 2 and y_true.shape[1] > 1 and y_pred.shape[1] == 1): y_true, y_pred = y_pred, y_true else: max_true = MSEWithInequalities._max_value(y_true) max_pred = MSEWithInequalities._max_value(y_pred) if max_true <= 1.5 and max_pred > 1.5: y_true, y_pred = y_pred, y_true return self._pytorch_loss(y_pred, y_true) class MultiallelicMassSpecLoss(Loss): """ Multiallelic mass spec loss function. """ name = "multiallelic_mass_spec_loss" supports_inequalities = True supports_multiple_outputs = False def __init__(self, delta=0.2, multiplier=1.0): self.delta = delta self.multiplier = multiplier self._pytorch_loss = PyTorchMultiallelicMassSpecLoss(delta, multiplier) @staticmethod def encode_y(y): return PyTorchMultiallelicMassSpecLoss.encode_y(y) def loss(self, y_true, y_pred): # Support both historical Keras-style (y_true, y_pred) and current # PyTorch-style (y_pred, y_true) calling conventions. if getattr(y_true, "ndim", None) == 2 and y_true.shape[1] > 1: y_true, y_pred = y_pred, y_true return self._pytorch_loss(y_pred, y_true) def check_shape(name, arr, expected_shape): """ Raise ValueError if arr.shape != expected_shape. Parameters ---------- name : string Included in error message to aid debugging arr : numpy.ndarray expected_shape : tuple of int """ if arr.shape != expected_shape: raise ValueError("Expected %s to have shape %s not %s" % ( name, str(expected_shape), str(arr.shape))) # Register custom losses. for cls in [ MSEWithInequalities, MSEWithInequalitiesAndMultipleOutputs, MultiallelicMassSpecLoss]: CUSTOM_LOSSES[cls.name] = cls() ================================================ FILE: mhcflurry/data_dependent_weights_initialization.py ================================================ """ Layer-sequential unit-variance initialization for neural networks. See: Mishkin and Matas, "All you need is a good init". 2016. https://arxiv.org/abs/1511.06422 """ # # LSUV initialization code in this file is adapted from: # https://github.com/ducha-aiki/LSUV-keras/blob/master/lsuv_init.py # by Dmytro Mishkin # # Here is the license for the original code: # # # Copyright (C) 2017, Dmytro Mishkin # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the # distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import numpy import torch import torch.nn as nn def svd_orthonormal(shape): """ Generate an orthonormal matrix using SVD. Parameters ---------- shape : tuple Shape of the weight matrix (must have at least 2 dimensions) Returns ------- numpy.ndarray Orthonormal matrix of the given shape """ # Orthonormal init code is from Lasagne # https://github.com/Lasagne/Lasagne/blob/master/lasagne/init.py if len(shape) < 2: raise RuntimeError("Only shapes of length 2 or more are supported.") flat_shape = (shape[0], numpy.prod(shape[1:])) a = numpy.random.standard_normal(flat_shape).astype("float32") u, _, v = numpy.linalg.svd(a, full_matrices=False) q = u if u.shape == flat_shape else v q = q.reshape(shape) return q def get_activations_pytorch(model, layer_name, x_dict, device=None): """ Get activations from a specific layer in a PyTorch model. Parameters ---------- model : nn.Module PyTorch model layer_name : str Name of the layer to get activations from x_dict : dict Input dictionary with tensors device : torch.device, optional Device to run on Returns ------- numpy.ndarray Activations from the specified layer """ if device is None: device = next(model.parameters()).device activations = {} def hook_fn(module, input, output): activations['output'] = output.detach().cpu().numpy() # Find the layer by name target_layer = None for name, module in model.named_modules(): if name == layer_name: target_layer = module break if target_layer is None: raise ValueError(f"Layer '{layer_name}' not found in model") # Register hook handle = target_layer.register_forward_hook(hook_fn) # Forward pass model.eval() with torch.no_grad(): # Convert inputs to tensors inputs = {} for key, value in x_dict.items(): if isinstance(value, numpy.ndarray): inputs[key] = torch.from_numpy(value).to(device) else: inputs[key] = value.to(device) # Run forward pass _ = model(inputs) # Remove hook handle.remove() return activations['output'] def get_activations(model, layer, X_batch): """ Backward-compatible activation helper from the TF backend era. Parameters ---------- model : nn.Module layer : str or object with ``name`` attribute X_batch : dict Network input dictionary. """ layer_name = layer if isinstance(layer, str) else getattr(layer, "name", None) if layer_name is None: raise ValueError("Layer must be a layer name or an object with a name attribute.") if not isinstance(X_batch, dict): raise ValueError("X_batch must be a dict of model inputs.") return get_activations_pytorch(model, layer_name, X_batch) def lsuv_init(model, batch, verbose=True, margin=0.1, max_iter=100): """ Initialize neural network weights using layer-sequential unit-variance initialization. See: Mishkin and Matas, "All you need is a good init". 2016. https://arxiv.org/abs/1511.06422 Parameters ---------- model : nn.Module PyTorch model batch : dict Training data batch (dict of numpy arrays or tensors) verbose : boolean Whether to print progress to stdout margin : float Acceptable variance margin max_iter : int Maximum iterations per layer Returns ------- nn.Module Same model, modified in-place """ needed_variance = 1.0 layers_initialized = 0 device = next(model.parameters()).device # Get list of layers to initialize (Dense/Linear and Conv layers) layers_to_init = [] for name, module in model.named_modules(): if isinstance(module, (nn.Linear, nn.Conv1d, nn.Conv2d)): layers_to_init.append((name, module)) for layer_name, layer in layers_to_init: # Get output shape try: activations = get_activations_pytorch(model, layer_name, batch, device) output_size = numpy.prod(activations.shape[1:]) except Exception as e: if verbose: print(f'LSUV initialization skipping {layer_name}: {e}') continue # Skip small layers if output_size < 32: if verbose: print(f'LSUV initialization skipping {layer_name} (output size {output_size} < 32)') continue layers_initialized += 1 # Apply orthonormal initialization to weights with torch.no_grad(): weight = layer.weight.data.cpu().numpy() ortho_weight = svd_orthonormal(weight.shape) layer.weight.data = torch.from_numpy(ortho_weight).to(device) # Get activations and compute variance activations = get_activations_pytorch(model, layer_name, batch, device) variance = numpy.var(activations) iteration = 0 if verbose: print(layer_name, variance) while abs(needed_variance - variance) > margin: if verbose: print( 'LSUV initialization', layer_name, iteration, needed_variance, margin, variance) if numpy.abs(numpy.sqrt(variance)) < 1e-7: break # avoid zero division # Scale weights to achieve unit variance with torch.no_grad(): scale_factor = numpy.sqrt(needed_variance) / numpy.sqrt(variance) layer.weight.data *= scale_factor # Recompute activations and variance activations = get_activations_pytorch(model, layer_name, batch, device) variance = numpy.var(activations) iteration += 1 if iteration >= max_iter: break if verbose: print('Done with LSUV: total layers initialized', layers_initialized) return model ================================================ FILE: mhcflurry/downloads.py ================================================ """ Manage local downloaded data. """ import logging import yaml from os.path import join, exists from os import environ from shlex import quote from importlib.resources import files from collections import OrderedDict from appdirs import user_data_dir import pandas ENVIRONMENT_VARIABLES = [ "MHCFLURRY_DATA_DIR", "MHCFLURRY_DOWNLOADS_CURRENT_RELEASE", "MHCFLURRY_DOWNLOADS_DIR", "MHCFLURRY_DEFAULT_CLASS1_MODELS" ] _DOWNLOADS_DIR = None _CURRENT_RELEASE = None _METADATA = None _MHCFLURRY_DEFAULT_CLASS1_MODELS_DIR = environ.get( "MHCFLURRY_DEFAULT_CLASS1_MODELS") _MHCFLURRY_DEFAULT_CLASS1_PRESENTATION_MODELS_DIR = environ.get( "MHCFLURRY_DEFAULT_CLASS1_PRESENTATION_MODELS_DIR") _MHCFLURRY_DEFAULT_CLASS1_PROCESSING_MODELS_DIR = environ.get( "MHCFLURRY_DEFAULT_CLASS1_PROCESSING_MODELS_DIR") def get_downloads_dir(): """ Return the path to local downloaded data """ return _DOWNLOADS_DIR def get_current_release(): """ Return the current downloaded data release """ return _CURRENT_RELEASE def get_downloads_metadata(): """ Return the contents of downloads.yml as a dict """ global _METADATA if _METADATA is None: _METADATA = yaml.safe_load( files("mhcflurry").joinpath("downloads.yml").read_text() ) return _METADATA def get_default_class1_models_dir(test_exists=True): """ Return the absolute path to the default class1 models dir. If environment variable MHCFLURRY_DEFAULT_CLASS1_MODELS is set to an absolute path, return that path. If it's set to a relative path (i.e. does not start with /) then return that path taken to be relative to the mhcflurry downloads dir. If environment variable MHCFLURRY_DEFAULT_CLASS1_MODELS is NOT set, then return the path to downloaded models in the "models_class1" download. Parameters ---------- test_exists : boolean, optional Whether to raise an exception of the path does not exist Returns ------- string : absolute path """ if _MHCFLURRY_DEFAULT_CLASS1_MODELS_DIR: result = join(get_downloads_dir(), _MHCFLURRY_DEFAULT_CLASS1_MODELS_DIR) if test_exists and not exists(result): raise IOError("No such directory: %s" % result) return result return get_path( "models_class1_pan", "models.combined", test_exists=test_exists) def get_default_class1_presentation_models_dir(test_exists=True): """ Return the absolute path to the default class1 presentation models dir. See `get_default_class1_models_dir`. If environment variable MHCFLURRY_DEFAULT_CLASS1_PRESENTATION_MODELS is set to an absolute path, return that path. If it's set to a relative path (does not start with /) then return that path taken to be relative to the mhcflurry downloads dir. Parameters ---------- test_exists : boolean, optional Whether to raise an exception of the path does not exist Returns ------- string : absolute path """ if _MHCFLURRY_DEFAULT_CLASS1_PRESENTATION_MODELS_DIR: result = join( get_downloads_dir(), _MHCFLURRY_DEFAULT_CLASS1_PRESENTATION_MODELS_DIR) if test_exists and not exists(result): raise IOError("No such directory: %s" % result) return result return get_path( "models_class1_presentation", "models", test_exists=test_exists) def get_default_class1_processing_models_dir(test_exists=True): """ Return the absolute path to the default class1 processing models dir. See `get_default_class1_models_dir`. If environment variable MHCFLURRY_DEFAULT_CLASS1_PROCESSING_MODELS is set to an absolute path, return that path. If it's set to a relative path (does not start with /) then return that path taken to be relative to the mhcflurry downloads dir. Parameters ---------- test_exists : boolean, optional Whether to raise an exception of the path does not exist Returns ------- string : absolute path """ if _MHCFLURRY_DEFAULT_CLASS1_PROCESSING_MODELS_DIR: result = join( get_downloads_dir(), _MHCFLURRY_DEFAULT_CLASS1_PROCESSING_MODELS_DIR) if test_exists and not exists(result): raise IOError("No such directory: %s" % result) return result # Default to the 'with flanks' model variant. return get_path( "models_class1_processing", "models.selected.with_flanks", test_exists=test_exists) def get_current_release_downloads(): """ Return a dict of all available downloads in the current release. The dict keys are the names of the downloads. The values are a dict with two entries: downloaded : bool Whether the download is currently available locally metadata : dict Info about the download from downloads.yml such as URL up_to_date : bool or None Whether the download URL(s) match what was used to download the current data. This is None if it cannot be determined. """ downloads = ( get_downloads_metadata() ['releases'] [get_current_release()] ['downloads']) def up_to_date(dir, urls): try: df = pandas.read_csv(join(dir, "DOWNLOAD_INFO.csv")) return list(df.url) == list(urls) except IOError: return None return OrderedDict( (download["name"], { 'downloaded': exists(join(get_downloads_dir(), download["name"])), 'up_to_date': up_to_date( join(get_downloads_dir(), download["name"]), [download['url']] if 'url' in download else download['part_urls']), 'metadata': download, }) for download in downloads ) def get_path(download_name, filename='', test_exists=True): """ Get the local path to a file in a MHCflurry download Parameters ----------- download_name : string filename : string Relative path within the download to the file of interest test_exists : boolean If True (default) throw an error telling the user how to download the data if the file does not exist Returns ----------- string giving local absolute path """ assert '/' not in download_name, "Invalid download: %s" % download_name path = join(get_downloads_dir(), download_name, filename) if test_exists and not exists(path): raise RuntimeError( "Missing MHCflurry downloadable file: %s. " "To download this data, run:\n\tmhcflurry-downloads fetch %s\n" "in a shell." % (quote(path), download_name)) return path def configure(): """ Setup various global variables based on environment variables. """ global _DOWNLOADS_DIR global _CURRENT_RELEASE _CURRENT_RELEASE = None _DOWNLOADS_DIR = environ.get("MHCFLURRY_DOWNLOADS_DIR") if not _DOWNLOADS_DIR: metadata = get_downloads_metadata() _CURRENT_RELEASE = environ.get("MHCFLURRY_DOWNLOADS_CURRENT_RELEASE") if not _CURRENT_RELEASE: _CURRENT_RELEASE = metadata['current-release'] current_release_compatability = ( metadata["releases"][_CURRENT_RELEASE]["compatibility-version"]) current_compatability = metadata["current-compatibility-version"] if current_release_compatability != current_compatability: logging.warning( "The specified downloads are not compatible with this version " "of the MHCflurry codebase. Downloads: release %s, " "compatability version: %d. Code compatability version: %d", _CURRENT_RELEASE, current_release_compatability, current_compatability) data_dir = environ.get("MHCFLURRY_DATA_DIR") if not data_dir: # increase the version every time we make a breaking change in # how the data is organized. For changes to e.g. just model # serialization, the downloads release numbers should be used. data_dir = user_data_dir("mhcflurry", version="4") _DOWNLOADS_DIR = join(data_dir, _CURRENT_RELEASE) logging.debug("Configured MHCFLURRY_DOWNLOADS_DIR: %s", _DOWNLOADS_DIR) configure() ================================================ FILE: mhcflurry/downloads.yml ================================================ # This file describes collections of data and trained model weights that are # released with MHCflurry. We refer to these datasets as "downloads." # # Downloads are organized into "releases", which generally correspond with # MHCflurry releases of the same version. # # When users run "mhcflurry-downloads fetch" without specifying any downloads # by name, the downloads with "default=true" are downloaded. # This should usually be the latest release. current-release: 2.2.0 # An integer indicating what models the current MHCflurry code base is compatible # with. Increment this integer when changes are made to MHCflurry that would break # the use of previously released models. current-compatibility-version: 2 # Add new releases here as they are made. releases: 2.2.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan.selected.20200610.tar.bz2 default: false - name: models_class1_presentation url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_presentation.20200611.tar.bz2 default: true - name: models_class1_processing url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_processing.selected.20200611.tar.bz2 default: false - name: models_class1_pan_unselected url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan.20200610.tar.bz2 default: false - name: models_class1_pan_variants url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan_variants.selected.20200610.tar.bz2 default: false - name: data_evaluation part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ac default: false - name: analysis_predictor_info url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/analysis_predictor_info.20200711.tar.bz2 default: false - name: data_predictions part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ac - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ad - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ae - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.af - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ag - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ah - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ai - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.aj - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ak - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.al default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_annotated.20191226.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/pre-2.1/data_iedb.20231019.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: https://github.com/openvax/mhcflurry/releases/download/pre-2.1/allele_sequences.20231025.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_published.20200501.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/pre-2.1/data_curated.20231023.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 2.0.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan.selected.20200610.tar.bz2 default: false - name: models_class1_presentation url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_presentation.20200611.tar.bz2 default: true - name: models_class1_processing url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_processing.selected.20200611.tar.bz2 default: false - name: models_class1_pan_unselected url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan.20200610.tar.bz2 default: false - name: models_class1_pan_variants url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/models_class1_pan_variants.selected.20200610.tar.bz2 default: false - name: data_evaluation part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ac default: false - name: analysis_predictor_info url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/analysis_predictor_info.20200711.tar.bz2 default: false - name: data_predictions part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ac - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ad - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ae - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.af - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ag - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ah - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ai - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.aj - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.ak - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_predictions.20200713.tar.bz2.part.al default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_annotated.20191226.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_iedb.20200427.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/allele_sequences.20191231.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_published.20200501.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_curated.20200427.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.7.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/models_class1_pan.selected.20200610.tar.bz2 default: false - name: models_class1_presentation url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/models_class1_presentation.20200611.tar.bz2 default: true - name: models_class1_processing url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/models_class1_processing.selected.20200611.tar.bz2 default: false - name: models_class1_pan_unselected url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/models_class1_pan.20200610.tar.bz2 default: false - name: models_class1_pan_variants url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/models_class1_pan_variants.selected.20200610.tar.bz2 default: false - name: models_class1_processing_variants url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_processing_variants.selected.20200124.tar.bz2 default: false - name: data_evaluation part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-2.0/data_evaluation.20200611.tar.bz2.part.ac default: false - name: analysis_predictor_info url: https://github.com/openvax/mhcflurry/releases/download/pre-2.0/analysis_predictor_info.20200610.tar.bz2 defaultl: false - name: data_predictions part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ac - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ad - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ae - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.af - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ag - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ah - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ai - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.aj - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ak - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.al - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.am - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.an - https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_predictions.20200430.tar.bz2.part.ao default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_annotated.20191226.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_iedb.20200427.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/allele_sequences.20191231.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_published.20200501.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/pre-1.7.0/data_curated.20200427.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.6.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_pan.selected.20200204.tar.bz2 default: false - name: models_class1_presentation url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_presentation.20200205.tar.bz2 default: true - name: models_class1_processing url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_processing.selected.20200122.tar.bz2 default: false - name: models_class1_pan_unselected url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_pan.20200104.tar.bz2 default: false - name: models_class1_pan_variants url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_pan_variants.selected.20200307.tar.bz2 default: false - name: models_class1_processing_variants url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/models_class1_processing_variants.selected.20200124.tar.bz2 default: false - name: data_evaluation url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_evaluation.20200209.tar.bz2 default: false - name: data_mass_spec_benchmark part_urls: - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ac - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ad - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ae - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.af - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ag - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ah - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ai - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.aj - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ak - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.al - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.am - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.an - https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_benchmark.20200105.tar.bz2.part.ao default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_mass_spec_annotated.20191226.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_iedb.20191220.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/allele_sequences.20191231.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_published.20191220.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/1.6.0/data_curated.20200103.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.5.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan.20191221.tar.bz2 default: false - name: models_class1_pan_unselected part_urls: - https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_unselected.20191221.tar.bz2.part.aa default: false - name: models_class1_pan_refined url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_refined.20191212c.tar.bz2 default: false - name: models_class1_pan_variants part_urls: - https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_variants.20191226.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_variants.20191226.tar.bz2.part.ab default: false - name: data_mass_spec_benchmark part_urls: - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ab - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ac - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ad - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ae - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.af - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ag - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ah - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ai - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.aj - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.ak - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.al - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.am - https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_benchmark.20191225.tar.bz2.part.an default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_annotated.20191226.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_iedb.20191220.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/allele_sequences.20190506.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_published.20191220.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_curated.20191226.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.4.0: compatibility-version: 2 downloads: - name: models_class1_pan url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/models_class1_pan.20190928.tar.bz2 default: false - name: models_class1_pan_unselected part_urls: - https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/models_class1_pan_unselected.20190924.tar.bz2.part.aa default: false - name: models_class1_pan_refined url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_refined.20191212c.tar.bz2 default: false - name: models_class1_pan_variants part_urls: - https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_variants.20191101.tar.bz2.part.aa - https://github.com/openvax/mhcflurry/releases/download/1.4.0/models_class1_pan_variants.20191101.tar.bz2.part.ab default: false - name: data_mass_spec_benchmark url: https://www.dropbox.com/s/4wzotlnl58i1w32/data_mass_spec_benchmark.20191027.tar.bz2?dl=1 default: false - name: data_mass_spec_annotated url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_mass_spec_annotated.20191030.tar.bz2 default: false - name: data_references url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_references.20190927.tar.bz2 default: false - name: data_iedb url: https://github.com/openvax/mhcflurry/releases/download/pre-1.4.0/data_iedb.20190916.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/allele_sequences.20190506.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_published.20191030.tar.bz2 default: false - name: data_curated url: https://github.com/openvax/mhcflurry/releases/download/1.4.0/data_curated.20191030.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.3.0: compatibility-version: 2 downloads: - name: models_class1_pan url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/models_class1_pan.20190829.tar.bz2 default: false - name: models_class1_pan_unselected part_urls: - http://github.com/openvax/mhcflurry/releases/download/pan-dev1/models_class1_pan_unselected.20190826.tar.bz2.part.aa - http://github.com/openvax/mhcflurry/releases/download/pan-dev1/models_class1_pan_unselected.20190826.tar.bz2.part.ab default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_iedb.20190610.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_systemhcatlas.20190506.tar.bz2 default: false - name: allele_sequences url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/allele_sequences.20190506.tar.bz2 default: false - name: random_peptide_predictions url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/random_peptide_predictions.20190506.tar.bz2 default: false - name: data_published url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_published.tar.bz2 default: false - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/pan-dev1/data_curated.20190516.tar.bz2 default: true # Older downloads - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: false - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false 1.2.0: compatibility-version: 2 downloads: - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1.20180225.tar.bz2 default: true - name: models_class1_selected_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_selected_no_mass_spec.20180225.tar.bz2 default: true - name: models_class1_unselected url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_unselected.20180221.tar.bz2 default: false - name: models_class1_trained_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_trained_with_mass_spec.20180228.tar.bz2 default: false - name: models_class1_unselected_with_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2.1/models_class1_unselected_with_mass_spec.20180227.tar.bz2 default: false - name: models_class1_minimal url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/models_class1_minimal.20180226.tar.bz2 default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/data_iedb.tar.bz2 default: false - name: data_published url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/data_published.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/data_systemhcatlas.tar.bz2 default: false - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/pre-1.2/data_curated.20180219.tar.bz2 default: true 1.1.0: compatibility-version: 2 downloads: - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/models_class1.20180205.tar.bz2 default: true - name: models_class1_no_mass_spec url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/models_class1_no_mass_spec.20180205.tar.bz2 default: true - name: models_class1_experiments1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/models_class1_experiments1.tar.bz2 default: false - name: cross_validation_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/cross_validation_class1.tar.bz2 default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/data_iedb.tar.bz2 default: false - name: data_published url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/data_published.tar.bz2 default: false - name: data_systemhcatlas url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/data_systemhcatlas.tar.bz2 default: false - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/pre-1.1/data_curated.tar.bz2 default: true 1.0.0: compatibility-version: 2 downloads: - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/models_class1.tar.bz2 default: true - name: models_class1_experiments1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/models_class1_experiments1.tar.bz2 default: false - name: cross_validation_class1 url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/cross_validation_class1.tar.bz2 default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/data_iedb.tar.bz2 default: false - name: data_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_kim2014.tar.bz2 default: false - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/pre-1.0/data_curated.tar.bz2 default: true 0.9.2: compatibility-version: 2 downloads: - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/0.9.2/models_class1.tar.bz2 default: true - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_curated.tar.bz2 default: true - name: data_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_kim2014.tar.bz2 default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_iedb.tar.bz2 default: false - name: models_class1_experiments1 url: http://github.com/openvax/mhcflurry/releases/download/0.9.2/models_class1_experiments1.tar.bz2 default: false 0.9.1: compatibility-version: 2 downloads: - name: models_class1 url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/models_class1.tar.bz2 default: true - name: data_curated url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_curated.tar.bz2 default: true - name: data_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_kim2014.tar.bz2 default: false - name: data_iedb url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/data_iedb.tar.bz2 default: false - name: models_class1_experiments1 url: http://github.com/openvax/mhcflurry/releases/download/0.9.1/models_class1_experiments1.tar.bz2 default: false 0.2.0: compatibility-version: 1 downloads: - name: models_class1_allele_specific_ensemble url: http://github.com/openvax/mhcflurry/releases/download/0.2.0/models_class1_allele_specific_ensemble.tar.bz2 default: true - name: models_class1_allele_specific_single url: http://github.com/openvax/mhcflurry/releases/download/0.2.0/models_class1_allele_specific_single.tar.bz2 default: false - name: data_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.0.8/data_kim2014.tar.bz2 default: true - name: data_combined_iedb_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.0.8/data_combined_iedb_kim2014.tar.bz2 default: true 0.0.8: compatibility-version: 1 downloads: - name: models_class1_allele_specific_single url: http://github.com/openvax/mhcflurry/releases/download/0.0.8/models_class1_allele_specific_single.no_impute.tar.bz2 default: true - name: data_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.0.8/data_kim2014.tar.bz2 default: true - name: data_combined_iedb_kim2014 url: http://github.com/openvax/mhcflurry/releases/download/0.0.8/data_combined_iedb_kim2014.tar.bz2 default: true ================================================ FILE: mhcflurry/downloads_command.py ================================================ ''' Download MHCflurry released datasets and trained models. Examples Fetch the default downloads: $ mhcflurry-downloads fetch Fetch a specific download: $ mhcflurry-downloads fetch models_class1_pan Get the path to a download: $ mhcflurry-downloads path models_class1_pan Get the URL of a download: $ mhcflurry-downloads url models_class1_pan Summarize available and fetched downloads: $ mhcflurry-downloads info ''' import sys import argparse import logging import os from pipes import quote import errno import tarfile from shutil import copyfileobj from tempfile import NamedTemporaryFile from tqdm import tqdm import posixpath import pandas try: from urllib.request import urlretrieve from urllib.parse import urlsplit except ImportError: from urllib import urlretrieve from urlparse import urlsplit from .downloads import ( get_current_release, get_current_release_downloads, get_downloads_dir, get_path, ENVIRONMENT_VARIABLES) tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( "--quiet", action="store_true", default=False, help="Output less") parser.add_argument( "--verbose", "-v", action="store_true", default=False, help="Output more") subparsers = parser.add_subparsers(dest="subparser_name") parser_fetch = subparsers.add_parser('fetch') parser_fetch.add_argument( 'download_name', metavar="DOWNLOAD", nargs="*", help="Items to download") parser_fetch.add_argument( "--keep", action="store_true", default=False, help="Don't delete archives after they are extracted") parser_fetch.add_argument( "--release", default=get_current_release(), help="Release to download. Default: %(default)s") parser_fetch.add_argument( "--already-downloaded-dir", metavar="DIR", help="Don't download files, get them from DIR") parser_info = subparsers.add_parser('info') parser_path = subparsers.add_parser('path') parser_path.add_argument( "download_name", nargs="?", default='') parser_url = subparsers.add_parser('url') parser_url.add_argument( "download_name", nargs="?", default='') def run(argv=sys.argv[1:]): args = parser.parse_args(argv) if not args.quiet: logging.basicConfig(level="INFO") if args.verbose: logging.basicConfig(level="DEBUG") command_functions = { "fetch": fetch_subcommand, "info": info_subcommand, "path": path_subcommand, "url": url_subcommand, None: lambda args: parser.print_help(), } command_functions[args.subparser_name](args) def mkdir_p(path): """ Make directories as needed, similar to mkdir -p in a shell. From: http://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python """ try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: raise def yes_no(boolean): return "YES" if boolean else "NO" # For progress bar on download. See https://pypi.python.org/pypi/tqdm class TqdmUpTo(tqdm): """Provides `update_to(n)` which uses `tqdm.update(delta_n)`.""" def update_to(self, b=1, bsize=1, tsize=None): """ b : int, optional Number of blocks transferred so far [default: 1]. bsize : int, optional Size of each block (in tqdm units) [default: 1]. tsize : int, optional Total size (in tqdm units). If [default: None] remains unchanged. """ if tsize is not None: self.total = tsize self.update(b * bsize - self.n) # will also set self.n = b * bsize def fetch_subcommand(args): def qprint(msg): if not args.quiet: print(msg) if not args.release: raise RuntimeError( "No release defined. This can happen when you are specifying " "a custom models directory. Specify --release to indicate " "the release to download.") downloads = get_current_release_downloads() invalid_download_names = set( item for item in args.download_name if item not in downloads) if invalid_download_names: raise ValueError("Unknown download(s): %s. Valid downloads are: %s" % ( ', '.join(invalid_download_names), ', '.join(downloads))) items_to_fetch = set() for (name, info) in downloads.items(): default = not args.download_name and info['metadata']['default'] if name in args.download_name and info['downloaded']: print(( "*" * 40 + "\nThe requested download '%s' has already been downloaded. " "To re-download this data, first run: \n\t%s\nin a shell " "and then re-run this command.\n" + "*" * 40) % (name, 'rm -rf ' + quote(get_path(name)))) if not info['downloaded'] and (name in args.download_name or default): items_to_fetch.add(name) mkdir_p(get_downloads_dir()) qprint("Fetching %d/%d downloads from release %s" % ( len(items_to_fetch), len(downloads), args.release)) format_string = "%-40s %-20s %-20s %-20s " qprint(format_string % ( "DOWNLOAD NAME", "ALREADY DOWNLOADED?", "WILL DOWNLOAD NOW?", "URL")) for (item, info) in downloads.items(): urls = ( [info['metadata']["url"]] if "url" in info['metadata'] else info['metadata']["part_urls"]) url_description = urls[0] if len(urls) > 1: url_description += " + %d more parts" % (len(urls) - 1) qprint(format_string % ( item, yes_no(info['downloaded']), yes_no(item in items_to_fetch), url_description)) # TODO: may want to extract into somewhere temporary and then rename to # avoid making an incomplete extract if the process is killed. for item in items_to_fetch: metadata = downloads[item]['metadata'] urls = ( [metadata["url"]] if "url" in metadata else metadata["part_urls"]) temp = NamedTemporaryFile(delete=False, suffix=".tar.bz2") try: for (url_num, url) in enumerate(urls): delete_downloaded = True if args.already_downloaded_dir: filename = posixpath.basename(urlsplit(url).path) downloaded_path = os.path.join( args.already_downloaded_dir, filename) delete_downloaded = False else: qprint("Downloading [part %d/%d]: %s" % ( url_num + 1, len(urls), url)) (downloaded_path, _) = urlretrieve( url, temp.name if len(urls) == 1 else None, reporthook=TqdmUpTo( unit='B', unit_scale=True, miniters=1).update_to) qprint("Downloaded to: %s" % quote(downloaded_path)) if downloaded_path != temp.name: qprint("Copying to: %s" % temp.name) with open(downloaded_path, "rb") as fd: copyfileobj(fd, temp, length=64*1024*1024) if delete_downloaded: os.remove(downloaded_path) temp.close() tar = tarfile.open(temp.name, 'r:bz2') names = tar.getnames() logging.debug("Extracting: %s" % names) bad_names = [ n for n in names if n.strip().startswith("/") or n.strip().startswith("..") ] if bad_names: raise RuntimeError( "Archive has suspicious names: %s" % bad_names) result_dir = get_path(item, test_exists=False) os.mkdir(result_dir) for member in tqdm(tar.getmembers(), desc='Extracting'): tar.extractall(path=result_dir, members=[member]) tar.close() # Save URLs that were used for this download. pandas.DataFrame({"url": urls}).to_csv( os.path.join(result_dir, "DOWNLOAD_INFO.csv"), index=False) qprint("Extracted %d files to: %s" % ( len(names), quote(result_dir))) finally: if not args.keep: os.remove(temp.name) def info_subcommand(args): print("Environment variables") for variable in ENVIRONMENT_VARIABLES: value = os.environ.get(variable) if value: print(' %-35s = %s' % (variable, quote(value))) else: print(" %-35s [unset or empty]" % variable) print("") print("Configuration") def exists_string(path): return ( "exists" if os.path.exists(path) else "does not exist") items = [ ("current release", get_current_release(), ""), ("downloads dir", get_downloads_dir(), "[%s]" % exists_string(get_downloads_dir())), ] for (key, value, extra) in items: print(" %-35s = %-20s %s" % (key, quote(value), extra)) print("") downloads = get_current_release_downloads() format_string = "%-40s %-12s %-12s %-20s " print(format_string % ("DOWNLOAD NAME", "DOWNLOADED?", "UP TO DATE?", "URL")) for (item, info) in downloads.items(): urls = ( [info['metadata']["url"]] if "url" in info['metadata'] else info['metadata']["part_urls"]) url_description = urls[0] if len(urls) > 1: url_description += " + %d more parts" % (len(urls) - 1) print(format_string % ( item, yes_no(info['downloaded']), "" if not info['downloaded'] else ( "UNKNOWN" if info['up_to_date'] is None else yes_no(info['up_to_date']) ), url_description)) def path_subcommand(args): """ Print the local path to a download """ print(get_path(args.download_name)) def url_subcommand(args): """ Print the URL(s) for a download """ downloads = get_current_release_downloads() download = downloads[args.download_name]["metadata"] urls = [] if download.get("url"): urls.append(download["url"]) if download.get("part_urls"): urls.extend(download["part_urls"]) print("\n".join(urls)) ================================================ FILE: mhcflurry/encodable_sequences.py ================================================ """ Class for encoding variable-length peptides to fixed-size numerical matrices """ import math import numpy import pandas from . import amino_acid class EncodingError(ValueError): """ Exception raised when peptides cannot be encoded """ def __init__(self, message, supported_peptide_lengths): self.supported_peptide_lengths = supported_peptide_lengths ValueError.__init__( self, message + " Supported lengths: %s - %s." % supported_peptide_lengths) class EncodableSequences(object): """ Class for encoding variable-length peptides to fixed-size numerical matrices This class caches various encodings of a list of sequences. In practice this is used only for peptides. To encode MHC allele sequences, see AlleleEncoding. """ unknown_character = "X" @classmethod def create(klass, sequences): """ Factory that returns an EncodableSequences given a list of strings. As a convenience, you can also pass it an EncodableSequences instance, in which case the object is returned unchanged. """ if isinstance(sequences, klass): return sequences return klass(sequences) def __init__(self, sequences): if not all(isinstance(obj, str) for obj in sequences): raise ValueError("Sequence of strings is required") self.sequences = numpy.array(sequences) lengths = pandas.Series(self.sequences, dtype=numpy.object_).str.len() self.min_length = lengths.min() self.max_length = lengths.max() self.encoding_cache = {} self.fixed_sequence_length = None if len(self.sequences) > 0 and all( len(s) == len(self.sequences[0]) for s in self.sequences): self.fixed_sequence_length = len(self.sequences[0]) def __len__(self): return len(self.sequences) def variable_length_to_fixed_length_categorical( self, alignment_method="pad_middle", left_edge=4, right_edge=4, max_length=15): """ Encode variable-length sequences to a fixed-size index-encoded (integer) matrix. See `sequences_to_fixed_length_index_encoded_array` for details. Parameters ---------- alignment_method : string One of "pad_middle" or "left_pad_right_pad" left_edge : int, size of fixed-position left side Only relevant for pad_middle alignment method right_edge : int, size of the fixed-position right side Only relevant for pad_middle alignment method max_length : maximum supported peptide length Returns ------- numpy.array of integers with shape (num sequences, encoded length) For pad_middle, the encoded length is max_length. For left_pad_right_pad, it's 3 * max_length. """ cache_key = ( "fixed_length_categorical", alignment_method, left_edge, right_edge, max_length) if cache_key not in self.encoding_cache: fixed_length_sequences = ( self.sequences_to_fixed_length_index_encoded_array( self.sequences, alignment_method=alignment_method, left_edge=left_edge, right_edge=right_edge, max_length=max_length)) self.encoding_cache[cache_key] = fixed_length_sequences return self.encoding_cache[cache_key] def variable_length_to_fixed_length_vector_encoding( self, vector_encoding_name, alignment_method="pad_middle", left_edge=4, right_edge=4, max_length=15, trim=False, allow_unsupported_amino_acids=False): """ Encode variable-length sequences to a fixed-size matrix. Amino acids are encoded as specified by the vector_encoding_name argument. See `sequences_to_fixed_length_index_encoded_array` for details. See also: variable_length_to_fixed_length_categorical. Parameters ---------- vector_encoding_name : string How to represent amino acids. One of "BLOSUM62", "one-hot", etc. Full list of supported vector encodings is given by available_vector_encodings(). alignment_method : string One of "pad_middle" or "left_pad_right_pad" left_edge : int Size of fixed-position left side. Only relevant for pad_middle alignment method right_edge : int Size of the fixed-position right side. Only relevant for pad_middle alignment method max_length : int Maximum supported peptide length trim : bool If True, longer sequences will be trimmed to fit the maximum supported length. Not supported for all alignment methods. allow_unsupported_amino_acids : bool If True, non-canonical amino acids will be replaced with the X character before encoding. Returns ------- numpy.array with shape (num sequences, encoded length, m) where - m is the vector encoding length (usually 21). - encoded length is max_length if alignment_method is pad_middle; 3 * max_length if it's left_pad_right_pad. """ cache_key = ( "fixed_length_vector_encoding", vector_encoding_name, alignment_method, left_edge, right_edge, max_length, trim, allow_unsupported_amino_acids) if cache_key not in self.encoding_cache: fixed_length_sequences = ( self.sequences_to_fixed_length_index_encoded_array( self.sequences, alignment_method=alignment_method, left_edge=left_edge, right_edge=right_edge, max_length=max_length, trim=trim, allow_unsupported_amino_acids=allow_unsupported_amino_acids)) result = amino_acid.fixed_vectors_encoding( fixed_length_sequences, amino_acid.ENCODING_DATA_FRAMES[vector_encoding_name]) assert result.shape[0] == len(self.sequences) self.encoding_cache[cache_key] = result return self.encoding_cache[cache_key] @classmethod def sequences_to_fixed_length_index_encoded_array( klass, sequences, alignment_method="pad_middle", left_edge=4, right_edge=4, max_length=15, trim=False, allow_unsupported_amino_acids=False): """ Encode variable-length sequences to a fixed-size index-encoded (integer) matrix. How variable length sequences get mapped to fixed length is set by the "alignment_method" argument. Supported alignment methods are: pad_middle Encoding designed for preserving the anchor positions of class I peptides. This is what is used in allele-specific models. Each string must be of length at least left_edge + right_edge and at most max_length. The first left_edge characters in the input always map to the first left_edge characters in the output. Similarly for the last right_edge characters. The middle characters are filled in based on the length, with the X character filling in the blanks. Example: AAAACDDDD -> AAAAXXXCXXXDDDD left_pad_centered_right_pad Encoding that makes no assumptions on anchor positions but is 3x larger than pad_middle, since it duplicates the peptide (left aligned + centered + right aligned). This is what is used for the pan-allele models. Example: AAAACDDDD -> AAAACDDDDXXXXXXXXXAAAACDDDDXXXXXXXXXAAAACDDDD left_pad_right_pad Same as left_pad_centered_right_pad but only includes left- and right-padded peptide. Example: AAAACDDDD -> AAAACDDDDXXXXXXXXXXXXAAAACDDDD Parameters ---------- sequences : list of string alignment_method : string One of "pad_middle" or "left_pad_right_pad" left_edge : int Size of fixed-position left side. Only relevant for pad_middle alignment method right_edge : int Size of the fixed-position right side. Only relevant for pad_middle alignment method max_length : int maximum supported peptide length trim : bool If True, longer sequences will be trimmed to fit the maximum supported length. Not supported for all alignment methods. allow_unsupported_amino_acids : bool If True, non-canonical amino acids will be replaced with the X character before encoding. Returns ------- numpy.array of integers with shape (num sequences, encoded length) For pad_middle, the encoded length is max_length. For left_pad_right_pad, it's 2 * max_length. For left_pad_centered_right_pad, it's 3 * max_length. """ if allow_unsupported_amino_acids: fill_value = amino_acid.AMINO_ACID_INDEX['X'] def get_amino_acid_index(a): return amino_acid.AMINO_ACID_INDEX.get(a, fill_value) else: get_amino_acid_index = amino_acid.AMINO_ACID_INDEX.__getitem__ result = None if alignment_method == 'pad_middle': if trim: raise NotImplementedError("trim not supported") # Result array is int32, filled with X (null amino acid) value. result = numpy.full( fill_value=amino_acid.AMINO_ACID_INDEX['X'], shape=(len(sequences), max_length), dtype="int32") df = pandas.DataFrame({"peptide": sequences}, dtype=numpy.object_) df["length"] = df.peptide.str.len() middle_length = max_length - left_edge - right_edge min_length = left_edge + right_edge # For efficiency we handle each supported peptide length using bulk # array operations. for (length, sub_df) in df.groupby("length"): if length < min_length or length > max_length: raise EncodingError( "Sequence '%s' (length %d) unsupported. There are %d " "total peptides with this length." % ( sub_df.iloc[0].peptide, length, len(sub_df)), supported_peptide_lengths=( min_length, max_length)) # Array of shape (num peptides, length) giving fixed-length # amino acid encoding each peptide of the current length. fixed_length_sequences = numpy.stack( sub_df.peptide.map( lambda s: numpy.array([ get_amino_acid_index(char) for char in s ])).values) num_null = max_length - length num_null_left = int(math.ceil(num_null / 2)) num_middle_filled = middle_length - num_null middle_start = left_edge + num_null_left # Set left edge result[sub_df.index, :left_edge] = fixed_length_sequences[ :, :left_edge ] # Set middle. result[ sub_df.index, middle_start : middle_start + num_middle_filled ] = fixed_length_sequences[ :, left_edge : left_edge + num_middle_filled ] # Set right edge. result[ sub_df.index, -right_edge: ] = fixed_length_sequences[:, -right_edge:] elif alignment_method == "left_pad_right_pad": if trim: raise NotImplementedError("trim not supported") # We arbitrarily set a minimum length of 5, although this encoding # could handle smaller peptides. min_length = 5 # Result array is int32, filled with X (null amino acid) value. result = numpy.full( fill_value=amino_acid.AMINO_ACID_INDEX['X'], shape=(len(sequences), max_length * 2), dtype="int32") df = pandas.DataFrame({"peptide": sequences}, dtype=numpy.object_) # For efficiency we handle each supported peptide length using bulk # array operations. for (length, sub_df) in df.groupby(df.peptide.str.len()): if length < min_length or length > max_length: raise EncodingError( "Sequence '%s' (length %d) unsupported. There are %d " "total peptides with this length." % ( sub_df.iloc[0].peptide, length, len(sub_df)), supported_peptide_lengths=( min_length, max_length)) # Array of shape (num peptides, length) giving fixed-length # amino acid encoding each peptide of the current length. fixed_length_sequences = numpy.stack(sub_df.peptide.map( lambda s: numpy.array([ get_amino_acid_index(char) for char in s ])).values) # Set left edge result[sub_df.index, :length] = fixed_length_sequences # Set right edge. result[sub_df.index, -length:] = fixed_length_sequences elif alignment_method == "left_pad_centered_right_pad": if trim: raise NotImplementedError("trim not supported") # We arbitrarily set a minimum length of 5, although this encoding # could handle smaller peptides. min_length = 5 # Result array is int32, filled with X (null amino acid) value. result = numpy.full( fill_value=amino_acid.AMINO_ACID_INDEX['X'], shape=(len(sequences), max_length * 3), dtype="int32") df = pandas.DataFrame({"peptide": sequences}, dtype=numpy.object_) # For efficiency we handle each supported peptide length using bulk # array operations. for (length, sub_df) in df.groupby(df.peptide.str.len()): if length < min_length or length > max_length: raise EncodingError( "Sequence '%s' (length %d) unsupported. There are %d " "total peptides with this length." % ( sub_df.iloc[0].peptide, length, len(sub_df)), supported_peptide_lengths=( min_length, max_length)) # Array of shape (num peptides, length) giving fixed-length # amino acid encoding each peptide of the current length. fixed_length_sequences = numpy.stack(sub_df.peptide.map( lambda s: numpy.array([ get_amino_acid_index(char) for char in s ])).values) # Set left edge result[sub_df.index, :length] = fixed_length_sequences # Set right edge. result[sub_df.index, -length:] = fixed_length_sequences # Set center. center_left_padding = int( math.floor((max_length - length) / 2)) center_left_offset = max_length + center_left_padding result[ sub_df.index, center_left_offset : center_left_offset + length ] = fixed_length_sequences elif alignment_method in ("right_pad", "left_pad"): min_length = 1 # Result array is int32, filled with X (null amino acid) value. result = numpy.full( fill_value=amino_acid.AMINO_ACID_INDEX['X'], shape=(len(sequences), max_length), dtype="int32") df = pandas.DataFrame({"peptide": sequences}, dtype=numpy.object_) # For efficiency we handle each supported peptide length using bulk # array operations. for (length, sub_df) in df.groupby(df.peptide.str.len()): if length < min_length or (not trim and length > max_length): raise EncodingError( "Sequence '%s' (length %d) unsupported. There are %d " "total peptides with this length." % ( sub_df.iloc[0].peptide, length, len(sub_df)), supported_peptide_lengths=( min_length, max_length)) peptides = sub_df.peptide if length > max_length: # Trim. if alignment_method == "right_pad": peptides = peptides.str.slice(0, max_length) else: peptides = peptides.str.slice(length - max_length) # Array of shape (num peptides, length) giving fixed-length # amino acid encoding each peptide of the current length. fixed_length_sequences = numpy.stack(peptides.map( lambda s: numpy.array([ get_amino_acid_index(char) for char in s ])).values) if alignment_method == "right_pad": # Left align (i.e. pad right): set left edge result[sub_df.index, :length] = fixed_length_sequences else: # Right align: set right edge. result[sub_df.index, -length:] = fixed_length_sequences else: raise NotImplementedError( "Unsupported alignment method: %s" % alignment_method) return result ================================================ FILE: mhcflurry/ensemble_centrality.py ================================================ """ Measures of centrality (e.g. mean) used to combine predictions across an ensemble. The input to these functions are log affinities, and they are expected to return a centrality measure also in log-space. """ import numpy def _nanmean_no_warnings(log_values): """ Row-wise nanmean that returns nan for all-nan rows without warnings. """ valid = ~numpy.isnan(log_values) counts = valid.sum(axis=1).astype("float64") sums = numpy.where(valid, log_values, 0.0).sum(axis=1) result = numpy.full(log_values.shape[0], numpy.nan, dtype="float64") numpy.divide(sums, counts, out=result, where=counts > 0) return result def _nanmedian_no_warnings(log_values): """ Row-wise nanmedian that returns nan for all-nan rows without warnings. """ result = numpy.full(log_values.shape[0], numpy.nan, dtype="float64") row_has_values = (~numpy.isnan(log_values)).any(axis=1) if row_has_values.any(): result[row_has_values] = numpy.nanmedian(log_values[row_has_values], axis=1) return result def robust_mean(log_values): """ Mean of values falling within the 25-75 percentiles. Parameters ---------- log_values : 2-d numpy.array Center is computed along the second axis (i.e. per row). Returns ------- center : numpy.array of length log_values.shape[1] """ if log_values.shape[1] <= 3: # Too few values to use robust mean. return _nanmean_no_warnings(log_values) result = numpy.full(log_values.shape[0], numpy.nan, dtype="float64") row_has_values = (~numpy.isnan(log_values)).any(axis=1) if not row_has_values.any(): return result valid_rows = log_values[row_has_values] without_nans = numpy.nan_to_num(valid_rows) # replace nan with 0 p75 = numpy.nanpercentile(valid_rows, 75, axis=1).reshape((-1, 1)) p25 = numpy.nanpercentile(valid_rows, 25, axis=1).reshape((-1, 1)) mask = ( (~numpy.isnan(valid_rows)) & (without_nans <= p75) & (without_nans >= p25)) mask_f = mask.astype("float64") numerator = (without_nans * mask_f).sum(axis=1) denominator = mask_f.sum(axis=1) robust = numpy.full(valid_rows.shape[0], numpy.nan, dtype="float64") numpy.divide(numerator, denominator, out=robust, where=denominator > 0) result[row_has_values] = robust return result CENTRALITY_MEASURES = { "mean": _nanmean_no_warnings, "median": _nanmedian_no_warnings, "robust_mean": robust_mean, } ================================================ FILE: mhcflurry/fasta.py ================================================ """ Adapted from pyensembl, github.com/openvax/pyensembl Original implementation by Alex Rubinsteyn. The worse sin in bioinformatics is to write your own FASTA parser. We're doing this to avoid adding another dependency to MHCflurry, however. """ from gzip import GzipFile import logging import pandas def read_fasta_to_dataframe(filename, full_descriptions=False): """ Parse a fasta file to a pandas DataFrame. Parameters ---------- filename : string full_descriptions : bool If true, instead of returning sequence IDs (the first space-separated token), return the full description associated with each record. Returns ------- pandas.DataFrame with columns "sequence_id" and "sequence". """ reader = FastaParser() rows = reader.iterate_over_file( filename, full_descriptions=full_descriptions) return pandas.DataFrame( rows, columns=["sequence_id", "sequence"]) class FastaParser(object): """ FastaParser object consumes lines of a FASTA file incrementally. """ def __init__(self): self.current_id = None self.current_lines = [] def iterate_over_file(self, fasta_path, full_descriptions=False): """ Generator that yields identifiers paired with sequences. """ with self.open_file(fasta_path) as f: for line in f: line = line.rstrip() if len(line) == 0: continue # have to slice into a bytes object or else get a single integer first_char = line[0:1] if first_char == b">": previous_entry = self._current_entry() self.current_id = self._parse_header_id( line, full_description=full_descriptions) if len(self.current_id) == 0: logging.warning( "Unable to parse ID from header line: %s", line) self.current_lines = [] if previous_entry is not None: yield previous_entry elif first_char == b";": # semicolon are comment characters continue else: self.current_lines.append(line) # the last sequence is still in the lines buffer after we're done with # the file so make sure to yield it id_and_seq = self._current_entry() if id_and_seq is not None: yield id_and_seq def _current_entry(self): # when we hit a new entry, if this isn't the first # entry of the file then put the last one in the dictionary if self.current_id: if len(self.current_lines) == 0: logging.warning("No sequence data for '%s'", self.current_id) else: sequence = b"".join(self.current_lines).decode("ascii") return self.current_id, sequence @staticmethod def open_file(fasta_path): """ Open either a text file or compressed gzip file as a stream of bytes. """ if fasta_path.endswith("gz") or fasta_path.endswith("gzip"): return GzipFile(fasta_path, 'rb') else: return open(fasta_path, 'rb') @staticmethod def _parse_header_id(line, full_description=False): """ Pull the transcript or protein identifier from the header line which starts with '>' """ if type(line) is not bytes: raise TypeError("Expected header line to be of type %s but got %s" % ( bytes, type(line))) if len(line) <= 1: raise ValueError("No identifier on FASTA line") # split line at first space to get the unique identifier for # this sequence space_index = line.find(b" ") if space_index >= 0 and not full_description: identifier = line[1:space_index] else: identifier = line[1:] return identifier.decode("ascii") ================================================ FILE: mhcflurry/flanking_encoding.py ================================================ """ Class for encoding variable-length flanking and peptides to fixed-size numerical matrices """ from collections import namedtuple import logging from .encodable_sequences import EncodingError, EncodableSequences import numpy import pandas EncodingResult = namedtuple( "EncodingResult", ["array", "peptide_lengths"]) class FlankingEncoding(object): """ Encode peptides and optionally their N- and C-flanking sequences into fixed size numerical matrices. Similar to EncodableSequences but with support for flanking sequences and the encoding scheme used by the processing predictor. Instances of this class have an immutable list of peptides with flanking sequences. Encodings are cached in the instances for faster performance when the same set of peptides needs to encoded more than once. """ unknown_character = "X" def __init__(self, peptides, n_flanks, c_flanks): """ Constructor. Sequences of any lengths can be passed. Parameters ---------- peptides : list of string Peptide sequences n_flanks : list of string [same length as peptides] Upstream sequences c_flanks : list of string [same length as peptides] Downstream sequences """ self.dataframe = pandas.DataFrame({ "peptide": peptides, "n_flank": n_flanks, "c_flank": c_flanks, }, dtype=str) self.encoding_cache = {} def __len__(self): """ Number of peptides. """ return len(self.dataframe) def vector_encode( self, vector_encoding_name, peptide_max_length, n_flank_length, c_flank_length, allow_unsupported_amino_acids=True, throw=True): """ Encode variable-length sequences to a fixed-size matrix. Parameters ---------- vector_encoding_name : string How to represent amino acids. One of "BLOSUM62", "one-hot", etc. See `amino_acid.available_vector_encodings()`. peptide_max_length : int Maximum supported peptide length. n_flank_length : int Maximum supported N-flank length c_flank_length : int Maximum supported C-flank length allow_unsupported_amino_acids : bool If True, non-canonical amino acids will be replaced with the X character before encoding. throw : bool Whether to raise exception on unsupported peptides Returns ------- numpy.array with shape (num sequences, length, m) where - num sequences is number of peptides, i.e. len(self) - length is peptide_max_length + n_flank_length + c_flank_length - m is the vector encoding length (usually 21). """ cache_key = ( "vector_encode", vector_encoding_name, peptide_max_length, n_flank_length, c_flank_length, allow_unsupported_amino_acids, throw) if cache_key not in self.encoding_cache: result = self.encode( vector_encoding_name=vector_encoding_name, df=self.dataframe, peptide_max_length=peptide_max_length, n_flank_length=n_flank_length, c_flank_length=c_flank_length, allow_unsupported_amino_acids=allow_unsupported_amino_acids, throw=throw) self.encoding_cache[cache_key] = result return self.encoding_cache[cache_key] @staticmethod def encode( vector_encoding_name, df, peptide_max_length, n_flank_length, c_flank_length, allow_unsupported_amino_acids=False, throw=True): """ Encode variable-length sequences to a fixed-size matrix. Helper function. Users should use `vector_encode`. Parameters ---------- vector_encoding_name : string df : pandas.DataFrame peptide_max_length : int n_flank_length : int c_flank_length : int allow_unsupported_amino_acids : bool throw : bool Returns ------- numpy.array """ error_df = df.loc[ (df.peptide.str.len() > peptide_max_length) | (df.peptide.str.len() < 1) ] if len(error_df) > 0: message = ( "Sequence '%s' (length %d) unsupported. There are %d " "total peptides with this length." % ( error_df.iloc[0].peptide, len(error_df.iloc[0].peptide), len(error_df))) if throw: raise EncodingError( message, supported_peptide_lengths=(1, peptide_max_length + 1)) logging.warning(message) # Replace invalid peptides with X's. The encoding will be set to # NaNs for these peptides farther below. df.loc[error_df.index, "peptide"] = "X" * peptide_max_length if n_flank_length > 0: n_flanks = df.n_flank.str.pad( n_flank_length, side="left", fillchar="X").str.slice(-n_flank_length).str.upper() else: n_flanks = pandas.Series([""] * len(df), dtype=str) c_flanks = df.c_flank.str.pad( c_flank_length, side="right", fillchar="X").str.slice(0, c_flank_length).str.upper() peptides = df.peptide.str.upper() concatenated = n_flanks + peptides + c_flanks encoder = EncodableSequences.create(concatenated.values) array = encoder.variable_length_to_fixed_length_vector_encoding( vector_encoding_name=vector_encoding_name, alignment_method="right_pad", max_length=n_flank_length + peptide_max_length + c_flank_length, allow_unsupported_amino_acids=allow_unsupported_amino_acids) array = array.astype("float32") # So NaNs can be used. if len(error_df) > 0: array[error_df.index] = numpy.nan result = EncodingResult( array, peptide_lengths=peptides.str.len().values) return result ================================================ FILE: mhcflurry/hyperparameters.py ================================================ """ Hyperparameter (neural network options) management """ import itertools class HyperparameterDefaults(object): """ Class for managing hyperparameters. Thin wrapper around a dict. Instances of this class are a specification of the hyperparameters *supported* by a model and their defaults. The particular hyperparameter settings to be used, for example, to train a model are kept in plain dicts. """ def __init__(self, **defaults): self.defaults = dict(defaults) def extend(self, other): """ Return a new HyperparameterDefaults instance containing the hyperparameters from the current instance combined with those from other. It is an error if self and other have any hyperparameters in common. """ overlap = [key for key in other.defaults if key in self.defaults] if overlap: raise ValueError( "Duplicate hyperparameter(s): %s" % " ".join(overlap)) new = dict(self.defaults) new.update(other.defaults) return HyperparameterDefaults(**new) def with_defaults(self, obj): """ Given a dict of hyperparameter settings, return a dict containing those settings augmented by the defaults for any keys missing from the dict. """ self.check_valid_keys(obj) obj = dict(obj) for (key, value) in self.defaults.items(): if key not in obj: obj[key] = value return obj def subselect(self, obj): """ Filter a dict of hyperparameter settings to only those keys defined in this HyperparameterDefaults . """ return dict( (key, value) for (key, value) in obj.items() if key in self.defaults) def check_valid_keys(self, obj): """ Given a dict of hyperparameter settings, throw an exception if any keys are not defined in this HyperparameterDefaults instance. """ invalid_keys = [ x for x in obj if x not in self.defaults ] if invalid_keys: raise ValueError( "No such model parameters: %s. Valid parameters are: %s" % (" ".join(invalid_keys), " ".join(self.defaults))) def models_grid(self, **kwargs): ''' Make a grid of models by taking the cartesian product of all specified model parameter lists. Parameters ----------- The valid kwarg parameters are the entries of this HyperparameterDefaults instance. Each parameter must be a list giving the values to search across. Returns ----------- list of dict giving the parameters for each model. The length of the list is the product of the lengths of the input lists. ''' # Check parameters self.check_valid_keys(kwargs) for (key, value) in kwargs.items(): if not isinstance(value, list): raise ValueError( "All parameters must be lists, but %s is %s" % (key, str(type(value)))) # Make models, using defaults. parameters = dict( (key, [value]) for (key, value) in self.defaults.items()) parameters.update(kwargs) parameter_names = list(parameters) parameter_values = [parameters[name] for name in parameter_names] models = [ dict(zip(parameter_names, model_values)) for model_values in itertools.product(*parameter_values) ] return models ================================================ FILE: mhcflurry/local_parallelism.py ================================================ """ Infrastructure for "local" parallelism, i.e. multiprocess parallelism on one compute node. """ import itertools import traceback import sys import os import time import queue from multiprocessing import Pool, Queue, cpu_count from multiprocessing.util import Finalize from pprint import pprint import random import numpy from .common import configure_pytorch, normalize_pytorch_backend def add_local_parallelism_args(parser): """ Add local parallelism arguments to the given argparse.ArgumentParser. Parameters ---------- parser : argparse.ArgumentParser """ group = parser.add_argument_group("Local parallelism") group.add_argument( "--num-jobs", default=0, type=int, metavar="N", help="Number of local processes to parallelize training over. " "Set to 0 for serial run. Default: %(default)s.") group.add_argument( "--backend", choices=("auto", "default", "gpu", "mps", "cpu"), default="auto", help="Device backend. 'default' is a legacy alias for 'auto'. 'gpu' " "means CUDA. 'auto' (default) selects the " "best available device: GPU > MPS > CPU. When --gpus is set, " "GPU-assigned workers use CUDA and overflow workers are forced " "to CPU.") group.add_argument( "--gpus", type=int, metavar="N", help="Number of CUDA GPUs, starting at index 0, to assign across " "parallel workers. Requires --num-jobs > 0. Each assigned worker " "gets one GPU; workers beyond --gpus * --max-workers-per-gpu run " "on CPU.") group.add_argument( "--max-workers-per-gpu", type=int, metavar="N", default=1000, help="Maximum number of workers to assign to a GPU. Additional tasks will " "run on CPU.") group.add_argument( "--max-tasks-per-worker", type=int, metavar="N", default=None, help="Restart workers after N tasks. Workaround for memory " "leaks. Requires Python >=3.2.") group.add_argument( "--worker-log-dir", default=None, help="Write worker stdout and stderr logs to given directory.") def worker_pool_with_gpu_assignments_from_args(args): """ Create a multiprocessing.Pool where each worker uses its own GPU. Uses commandline arguments. See `worker_pool_with_gpu_assignments`. Parameters ---------- args : argparse.ArgumentParser Returns ------- multiprocessing.Pool """ return worker_pool_with_gpu_assignments( num_jobs=args.num_jobs, num_gpus=args.gpus, backend=args.backend, max_workers_per_gpu=args.max_workers_per_gpu, max_tasks_per_worker=args.max_tasks_per_worker, worker_log_dir=args.worker_log_dir, ) def worker_pool_with_gpu_assignments( num_jobs, num_gpus=0, backend=None, max_workers_per_gpu=1, max_tasks_per_worker=None, worker_log_dir=None): """ Create a multiprocessing.Pool where each worker uses its own GPU. Parameters ---------- num_jobs : int Number of worker processes. num_gpus : int backend : string max_workers_per_gpu : int max_tasks_per_worker : int worker_log_dir : string Returns ------- multiprocessing.Pool """ backend = normalize_pytorch_backend(backend or "auto") validate_worker_pool_args( num_jobs=num_jobs, num_gpus=num_gpus, backend=backend, max_workers_per_gpu=max_workers_per_gpu) if num_jobs == 0: configure_pytorch(backend=backend) return None worker_init_kwargs = worker_init_kwargs_for_scheduler( num_jobs=num_jobs, num_gpus=num_gpus, backend=backend, max_workers_per_gpu=max_workers_per_gpu) if num_gpus: print( "Assigning %d workers across %d CUDA GPUs (%d workers max per GPU). " "Overflow workers will run on CPU." % ( num_jobs, num_gpus, max_workers_per_gpu)) for (worker_num, kwargs) in enumerate(worker_init_kwargs): print( "Worker %d assigned backend=%s GPUs=%s" % ( worker_num, kwargs["backend"], kwargs.get("gpu_device_nums"))) if worker_log_dir: for kwargs in worker_init_kwargs: kwargs["worker_log_dir"] = worker_log_dir worker_pool = make_worker_pool( processes=num_jobs, initializer=worker_init, initializer_kwargs_per_process=worker_init_kwargs, max_tasks_per_worker=max_tasks_per_worker) return worker_pool def validate_worker_pool_args( num_jobs, num_gpus=0, backend="auto", max_workers_per_gpu=1): """ Validate local worker scheduling arguments. ``--gpus`` controls CUDA worker assignment only. It does not select MPS devices and it does not distribute a single model across multiple GPUs. """ backend = normalize_pytorch_backend(backend or "auto") if num_jobs < 0: raise ValueError("num_jobs must be >= 0") if num_gpus is None: num_gpus = 0 if num_gpus < 0: raise ValueError("num_gpus must be >= 0") if max_workers_per_gpu < 1: raise ValueError("max_workers_per_gpu must be >= 1") if num_gpus: if num_jobs == 0: raise ValueError("num_gpus requires num_jobs > 0") if backend not in ("auto", "gpu"): raise ValueError( "num_gpus is only supported with backend 'auto' or 'gpu'") def worker_init_kwargs_for_scheduler( num_jobs, num_gpus=0, backend="auto", max_workers_per_gpu=1): """ Build per-worker init kwargs from the local scheduling configuration. When ``num_gpus`` is set, workers are assigned one CUDA GPU each in round robin order. Any additional workers are forced onto CPU by hiding CUDA and setting their backend to ``cpu``. """ backend = normalize_pytorch_backend(backend or "auto") validate_worker_pool_args( num_jobs=num_jobs, num_gpus=num_gpus, backend=backend, max_workers_per_gpu=max_workers_per_gpu) if not num_gpus: return [{"backend": backend} for _ in range(num_jobs)] gpu_assignments = list(itertools.chain.from_iterable( range(num_gpus) for _ in range(max_workers_per_gpu))) worker_kwargs = [] for worker_num in range(num_jobs): if worker_num < len(gpu_assignments): worker_kwargs.append({ "backend": "gpu", "gpu_device_nums": [gpu_assignments[worker_num]], }) else: worker_kwargs.append({ "backend": "cpu", "gpu_device_nums": [], }) return worker_kwargs def make_worker_pool( processes=None, initializer=None, initializer_kwargs_per_process=None, max_tasks_per_worker=None): """ Convenience wrapper to create a multiprocessing.Pool. This function adds support for per-worker initializer arguments, which are not natively supported by the multiprocessing module. The motivation for this feature is to support allocating each worker to a (different) GPU. IMPLEMENTATION NOTE: The per-worker initializer arguments are implemented using a Queue. Each worker reads its arguments from this queue when it starts. When it terminates, it adds its initializer arguments back to the queue, so a future process can initialize itself using these arguments. There is one issue with this approach, however. If a worker crashes, it never repopulates the queue of initializer arguments. This will prevent any future worker from re-using those arguments. To deal with this issue we add a second 'backup queue'. This queue always contains the full set of initializer arguments: whenever a worker reads from it, it always pushes the pop'd args back to the end of the queue immediately. If the primary arg queue is ever empty, then workers will read from this backup queue. Parameters ---------- processes : int Number of workers. Default: num CPUs. initializer : function, optional Init function to call in each worker initializer_kwargs_per_process : list of dict, optional Arguments to pass to initializer function for each worker. Length of list must equal the number of workers. max_tasks_per_worker : int, optional Restart workers after this many tasks. Requires Python >=3.2. Returns ------- multiprocessing.Pool """ if not processes: processes = cpu_count() pool_kwargs = { 'processes': processes, } if max_tasks_per_worker: pool_kwargs["maxtasksperchild"] = max_tasks_per_worker if initializer: if initializer_kwargs_per_process: assert len(initializer_kwargs_per_process) == processes kwargs_queue = Queue() kwargs_queue_backup = Queue() for kwargs in initializer_kwargs_per_process: kwargs_queue.put(kwargs) kwargs_queue_backup.put(kwargs) pool_kwargs["initializer"] = worker_init_entry_point pool_kwargs["initargs"] = ( initializer, kwargs_queue, kwargs_queue_backup) else: pool_kwargs["initializer"] = initializer worker_pool = Pool(**pool_kwargs) print("Started pool: %s" % str(worker_pool)) pprint(pool_kwargs) return worker_pool def worker_init_entry_point( init_function, arg_queue=None, backup_arg_queue=None): kwargs = {} if arg_queue: try: kwargs = arg_queue.get(block=False) except queue.Empty: print("Argument queue empty. Using round robin arg queue.") kwargs = backup_arg_queue.get(block=True) backup_arg_queue.put(kwargs) # On exit we add the init args back to the queue so restarted workers # (e.g. when when running with maxtasksperchild) will pickup init # arguments from a previously exited worker. Finalize(None, arg_queue.put, (kwargs,), exitpriority=1) print("Initializing worker: %s" % str(kwargs)) init_function(**kwargs) def worker_init( keras_backend=None, backend=None, gpu_device_nums=None, worker_log_dir=None): del keras_backend # legacy argument retained for API compatibility if worker_log_dir: sys.stderr = sys.stdout = open(os.path.join( worker_log_dir, "LOG-worker.%d.%d.txt" % (os.getpid(), int(time.time()))), "w") # Each worker needs distinct random numbers numpy.random.seed() random.seed() if gpu_device_nums is not None: print("WORKER pid=%d assigned GPU devices: %s" % ( os.getpid(), gpu_device_nums)) configure_pytorch(backend=backend, gpu_device_nums=gpu_device_nums) else: configure_pytorch(backend=backend) # Solution suggested in https://bugs.python.org/issue13831 class WrapException(Exception): """ Add traceback info to exception so exceptions raised in worker processes can still show traceback info when re-raised in the parent. """ def __init__(self): exc_type, exc_value, exc_tb = sys.exc_info() self.exception = exc_value self.formatted = ''.join(traceback.format_exception(exc_type, exc_value, exc_tb)) def __str__(self): return '%s\nOriginal traceback:\n%s' % (Exception.__str__(self), self.formatted) def call_wrapped(function, *args, **kwargs): """ Run function on args and kwargs and return result, wrapping any exception raised in a WrapException. Parameters ---------- function : arbitrary function Any other arguments provided are passed to the function. Returns ------- object """ try: return function(*args, **kwargs) except Exception: raise WrapException() def call_wrapped_kwargs(function, kwargs): """ Invoke function on given kwargs and return result, wrapping any exception raised in a WrapException. Parameters ---------- function : arbitrary function kwargs : dict Returns ------- object result of calling function(**kwargs) """ return call_wrapped(function, **kwargs) ================================================ FILE: mhcflurry/percent_rank_transform.py ================================================ """ Class for transforming arbitrary values into percent ranks given a distribution. """ import numpy import pandas class PercentRankTransform(object): """ Transform arbitrary values into percent ranks. """ def __init__(self): self.cdf = None self.bin_edges = None def fit(self, values, bins): """ Fit the transform using the given values (e.g. ic50s). Parameters ---------- values : predictions (e.g. ic50 values) bins : bins for the cumulative distribution function Anything that can be passed to numpy.histogram's "bins" argument can be used here. """ assert self.cdf is None assert self.bin_edges is None assert len(values) > 0 (hist, self.bin_edges) = numpy.histogram(values, bins=bins) self.cdf = numpy.ones(len(hist) + 3) * numpy.nan self.cdf[0] = 0.0 self.cdf[1] = 0.0 self.cdf[-1] = 100.0 numpy.cumsum(hist * 100.0 / numpy.sum(hist), out=self.cdf[2:-1]) assert not numpy.isnan(self.cdf).any() def transform(self, values): """ Return percent ranks (range [0, 100]) for the given values. """ assert self.cdf is not None assert self.bin_edges is not None indices = numpy.searchsorted(self.bin_edges, values) result = self.cdf[indices] assert len(result) == len(values) # NaNs in input become NaNs in output result[numpy.isnan(values)] = numpy.nan return numpy.minimum(result, 100.0) def to_series(self): """ Serialize the fit to a pandas.Series. The index on the series gives the bin edges and the values give the CDF. Returns ------- pandas.Series """ return pandas.Series( self.cdf, index=[numpy.nan] + list(self.bin_edges) + [numpy.nan]) @staticmethod def from_series(series): """ Deseralize a PercentRankTransform the given pandas.Series, as returned by `to_series()`. Parameters ---------- series : pandas.Series Returns ------- PercentRankTransform """ result = PercentRankTransform() result.cdf = series.values result.bin_edges = series.index.values[1:-1] return result ================================================ FILE: mhcflurry/predict_command.py ================================================ ''' Run MHCflurry predictor on specified peptides. By default, the presentation predictor is used, and predictions for MHC I binding affinity, antigen processing, and the composite presentation score are returned. If you just want binding affinity predictions, pass --affinity-only. Examples: Write a CSV file containing the contents of INPUT.csv plus additional columns giving MHCflurry predictions: $ mhcflurry-predict INPUT.csv --out RESULT.csv The input CSV file is expected to contain columns "allele", "peptide", and, optionally, "n_flank", and "c_flank". If `--out` is not specified, results are written to stdout. You can also run on alleles and peptides specified on the commandline, in which case predictions are written for *all combinations* of alleles and peptides: $ mhcflurry-predict --alleles HLA-A0201 H-2Kb --peptides SIINFEKL DENDREKLLL Instead of individual alleles (in a CSV or on the command line), you can also give a comma separated list of alleles giving a sample genotype. In this case, the tightest binding affinity across the alleles for the sample will be returned. For example: $ mhcflurry-predict --peptides SIINFEKL DENDREKLLL \ --alleles \ HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:01,HLA-C*07:02 \ HLA-A*01:01,HLA-A*02:06,HLA-B*44:02,HLA-B*07:02,HLA-C*01:01,HLA-C*03:01 will give the tightest predicted affinities across alleles for each of the two genotypes specified for each peptide. ''' import sys import argparse import itertools import logging import os import pandas from .downloads import get_default_class1_presentation_models_dir from .class1_affinity_predictor import Class1AffinityPredictor from .class1_presentation_predictor import Class1PresentationPredictor from .version import __version__ parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False) helper_args = parser.add_argument_group(title="Help") helper_args.add_argument( "-h", "--help", action="help", help="Show this help message and exit" ) helper_args.add_argument( "--list-supported-alleles", action="store_true", default=False, help="Prints the list of supported alleles and exits" ) helper_args.add_argument( "--list-supported-peptide-lengths", action="store_true", default=False, help="Prints the list of supported peptide lengths and exits" ) helper_args.add_argument( "--version", action="version", version="mhcflurry %s" % __version__, ) input_args = parser.add_argument_group(title="Input (required)") input_args.add_argument( "input", metavar="INPUT.csv", nargs="?", help="Input CSV") input_args.add_argument( "--alleles", metavar="ALLELE", nargs="+", help="Alleles to predict (exclusive with passing an input CSV)") input_args.add_argument( "--peptides", metavar="PEPTIDE", nargs="+", help="Peptides to predict (exclusive with passing an input CSV)") input_mod_args = parser.add_argument_group(title="Input options") input_mod_args.add_argument( "--allele-column", metavar="NAME", default="allele", help="Input column name for alleles. Default: '%(default)s'") input_mod_args.add_argument( "--peptide-column", metavar="NAME", default="peptide", help="Input column name for peptides. Default: '%(default)s'") input_mod_args.add_argument( "--n-flank-column", metavar="NAME", default="n_flank", help="Column giving N-terminal flanking sequence. Default: '%(default)s'") input_mod_args.add_argument( "--c-flank-column", metavar="NAME", default="c_flank", help="Column giving C-terminal flanking sequence. Default: '%(default)s'") input_mod_args.add_argument( "--no-throw", action="store_true", default=False, help="Return NaNs for unsupported alleles or peptides instead of raising") output_args = parser.add_argument_group(title="Output options") output_args.add_argument( "--out", metavar="OUTPUT.csv", help="Output CSV") output_args.add_argument( "--prediction-column-prefix", metavar="NAME", default="mhcflurry_", help="Prefix for output column names. Default: '%(default)s'") output_args.add_argument( "--output-delimiter", metavar="CHAR", default=",", help="Delimiter character for results. Default: '%(default)s'") output_args.add_argument( "--no-affinity-percentile", default=False, action="store_true", help="Do not include affinity percentile rank") output_args.add_argument( "--always-include-best-allele", default=False, action="store_true", help="Always include the best_allele column even when it is identical " "to the allele column (i.e. all queries are monoallelic).") model_args = parser.add_argument_group(title="Model options") model_args.add_argument( "--models", metavar="DIR", default=None, help="Directory containing models. Either a binding affinity predictor or " "a presentation predictor can be used. " "Default: %s" % get_default_class1_presentation_models_dir( test_exists=False)) model_args.add_argument( "--affinity-only", action="store_true", default=False, help="Affinity prediction only (no antigen processing or presentation)") model_args.add_argument( "--no-flanking", action="store_true", default=False, help="Do not use flanking sequence information even when available") def run(argv=sys.argv[1:]): if not argv: parser.print_help() parser.exit(1) args = parser.parse_args(argv) # It's hard to pass a tab in a shell, so we correct a common error: if args.output_delimiter == "\\t": args.output_delimiter = "\t" models_dir = args.models if models_dir is None: # The reason we set the default here instead of in the argument parser # is that we want to test_exists at this point, so the user gets a # message instructing them to download the models if needed. models_dir = get_default_class1_presentation_models_dir(test_exists=True) if os.path.exists(os.path.join(models_dir, "weights.csv")): # Using a presentation predictor. predictor = Class1PresentationPredictor.load(models_dir) else: # Using just an affinity predictor. affinity_predictor = Class1AffinityPredictor.load(models_dir) predictor = Class1PresentationPredictor( affinity_predictor=affinity_predictor) if not args.affinity_only: logging.warning( "Specified models are an affinity predictor, which implies " "--affinity-only. Specify this argument to silence this warning.") args.affinity_only = True if args.list_supported_alleles: print("\n".join(predictor.supported_alleles)) return if args.list_supported_peptide_lengths: min_len, max_len = predictor.supported_peptide_lengths print("\n".join([str(length) for length in range(min_len, max_len + 1)])) return if args.input: if args.alleles or args.peptides: parser.error( "If an input file is specified, do not specify --alleles " "or --peptides") df = pandas.read_csv(args.input) print("Read input CSV with %d rows, columns are: %s" % ( len(df), ", ".join(df.columns))) for col in [args.allele_column, args.peptide_column]: if col not in df.columns: raise ValueError( "No such column '%s' in CSV. Columns are: %s" % ( col, ", ".join(["'%s'" % c for c in df.columns]))) else: if not args.alleles or not args.peptides: parser.error( "Specify either an input CSV file or both the " "--alleles and --peptides arguments") pairs = list(itertools.product(args.alleles, args.peptides)) df = pandas.DataFrame({ "allele": [p[0] for p in pairs], "peptide": [p[1] for p in pairs], }) logging.info( "Predicting for %d alleles and %d peptides = %d predictions" % ( len(args.alleles), len(args.peptides), len(df))) allele_string_to_alleles = ( df.drop_duplicates(args.allele_column).set_index( args.allele_column, drop=False)[ args.allele_column ].str.split(r"[,\s]+")).to_dict() if args.affinity_only: predictions = predictor.predict_affinity( peptides=df[args.peptide_column].values, alleles=allele_string_to_alleles, sample_names=df[args.allele_column], throw=not args.no_throw, include_affinity_percentile=not args.no_affinity_percentile) else: n_flanks = None c_flanks = None if not args.no_flanking: if args.n_flank_column in df.columns and args.c_flank_column in df.columns: n_flanks = df[args.n_flank_column] c_flanks = df[args.c_flank_column] else: logging.warning( "No flanking information provided. Specify --no-flanking " "to silence this warning") predictions = predictor.predict( peptides=df[args.peptide_column].values, n_flanks=n_flanks, c_flanks=c_flanks, alleles=allele_string_to_alleles, sample_names=df[args.allele_column], throw=not args.no_throw, include_affinity_percentile=not args.no_affinity_percentile) # If each query is just for a single allele, the "best_allele" column # is redundant so we remove it. if not args.always_include_best_allele: if all(len(a) == 1 for a in allele_string_to_alleles.values()): del predictions["best_allele"] for col in predictions.columns: if col not in ("allele", "peptide", "sample_name", "peptide_num"): df[args.prediction_column_prefix + col] = predictions[col] if args.out: df.to_csv(args.out, index=False, sep=args.output_delimiter) print("Wrote: %s" % args.out) else: df.to_csv(sys.stdout, index=False, sep=args.output_delimiter) ================================================ FILE: mhcflurry/predict_scan_command.py ================================================ ''' Scan protein sequences using the MHCflurry presentation predictor. By default, sub-sequences (peptides) with affinity percentile ranks less than 2.0 are returned. You can also specify --results-all to return predictions for all peptides, or adjust the filter threshold(s) using the --threshold-* options. Examples: Scan a set of sequences in a FASTA file for binders to any alleles in a MHC I genotype: $ mhcflurry-predict-scan \ test/data/example.fasta \ --alleles HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:01,HLA-C*07:02 Instead of a FASTA, you can also pass a CSV that has "sequence_id" and "sequence" columns. You can also specify multiple MHC I genotypes to scan as space-separated arguments to the --alleles option: $ mhcflurry-predict-scan \ test/data/example.fasta \ --alleles \ HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:02,HLA-C*07:02 \ HLA-A*01:01,HLA-A*02:06,HLA-B*44:02,HLA-B*07:02,HLA-C*01:02,HLA-C*03:01 If `--out` is not specified, results are written to standard out. You can also specify sequences on the commandline: mhcflurry-predict-scan \ --sequences MGYINVFAFPFTIYSLLLCRMNSRNYIAQVDVVNFNLT \ --alleles HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:02,HLA-C*07:02 ''' import sys import argparse import pandas from .downloads import get_default_class1_presentation_models_dir from .class1_presentation_predictor import Class1PresentationPredictor from .fasta import read_fasta_to_dataframe from .version import __version__ parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False) helper_args = parser.add_argument_group(title="Help") helper_args.add_argument( "-h", "--help", action="help", help="Show this help message and exit" ) helper_args.add_argument( "--list-supported-alleles", action="store_true", default=False, help="Print the list of supported alleles and exit" ) helper_args.add_argument( "--list-supported-peptide-lengths", action="store_true", default=False, help="Print the list of supported peptide lengths and exit" ) helper_args.add_argument( "--version", action="version", version="mhcflurry %s" % __version__, ) input_args = parser.add_argument_group(title="Input options") input_args.add_argument( "input", metavar="INPUT", nargs="?", help="Input CSV or FASTA") input_args.add_argument( "--input-format", choices=("guess", "csv", "fasta"), default="guess", help="Format of input file. By default, it is guessed from the file " "extension.") input_args.add_argument( "--alleles", metavar="ALLELE", nargs="+", help="Alleles to predict") input_args.add_argument( "--sequences", metavar="SEQ", nargs="+", help="Sequences to predict (exclusive with passing an input file)") input_args.add_argument( "--sequence-id-column", metavar="NAME", default="sequence_id", help="Input CSV column name for sequence IDs. Default: '%(default)s'") input_args.add_argument( "--sequence-column", metavar="NAME", default="sequence", help="Input CSV column name for sequences. Default: '%(default)s'") input_args.add_argument( "--no-throw", action="store_true", default=False, help="Return NaNs for unsupported alleles or peptides instead of raising") results_args = parser.add_argument_group(title="Result options") results_args.add_argument( "--peptide-lengths", default="8-11", metavar="L", help="Peptide lengths to consider. Pass as START-END (e.g. 8-11) or a " "comma-separated list (8,9,10,11). When using START-END, the range is " "INCLUSIVE on both ends. Default: %(default)s.") default_thresholds = { "presentation_score": 0.7, "processing_score": 0.5, "affinity": 500, "affinity_percentile": 2.0, } results_args.add_argument( "--results-all", action="store_true", default=False, help="Return results for all peptides regardless of affinity, etc.") results_args.add_argument( "--threshold-presentation-score", type=float, help=f"Threshold if filtering by presentation score. Default: > {default_thresholds['presentation_score']}") results_args.add_argument( "--threshold-processing-score", type=float, help=f"Threshold if filtering by processing score. Default: > {default_thresholds['processing_score']}") results_args.add_argument( "--threshold-affinity", type=float, help=f"Threshold if filtering by affinity. Default: < {default_thresholds['affinity']}") results_args.add_argument( "--threshold-affinity-percentile", type=float, help=f"Threshold if filtering by affinity percentile. Default: < {default_thresholds['affinity_percentile']}") output_args = parser.add_argument_group(title="Output options") output_args.add_argument( "--out", metavar="OUTPUT.csv", help="Output CSV") output_args.add_argument( "--output-delimiter", metavar="CHAR", default=",", help="Delimiter character for results. Default: '%(default)s'") output_args.add_argument( "--no-affinity-percentile", default=False, action="store_true", help="Do not include affinity percentile rank") model_args = parser.add_argument_group(title="Model options") model_args.add_argument( "--models", metavar="DIR", default=None, help="Directory containing presentation models." "Default: %s" % get_default_class1_presentation_models_dir( test_exists=False)) model_args.add_argument( "--no-flanking", action="store_true", default=False, help="Do not use flanking sequence information in predictions") def parse_peptide_lengths(value): try: if "-" in value: (start, end) = value.split("-", 2) start = int(start.strip()) end = int(end.strip()) peptide_lengths = list(range(start, end + 1)) else: peptide_lengths = [ int(length.strip()) for length in value.split(",") ] except ValueError: raise ValueError("Couldn't parse peptide lengths: ", value) return peptide_lengths def run(argv=sys.argv[1:]): if not argv: parser.print_help() parser.exit(1) args = parser.parse_args(argv) # It's hard to pass a tab in a shell, so we correct a common error: if args.output_delimiter == "\\t": args.output_delimiter = "\t" peptide_lengths = parse_peptide_lengths(args.peptide_lengths) threshold_args = [ args.threshold_presentation_score, args.threshold_processing_score, args.threshold_affinity, args.threshold_affinity_percentile, ] if not args.results_all and all(x is None for x in threshold_args): print("Filtering by affinity-percentile < %s" % default_thresholds["affinity_percentile"]) print("to show all predictions, pass --results-all") args.threshold_affinity_percentile = default_thresholds["affinity_percentile"] models_dir = args.models if models_dir is None: # The reason we set the default here instead of in the argument parser # is that we want to test_exists at this point, so the user gets a # message instructing them to download the models if needed. models_dir = get_default_class1_presentation_models_dir(test_exists=True) predictor = Class1PresentationPredictor.load(models_dir) if args.list_supported_alleles: print("\n".join(predictor.supported_alleles)) return if args.list_supported_peptide_lengths: min_len, max_len = predictor.supported_peptide_lengths print("\n".join([str(length) for length in range(min_len, max_len + 1)])) return if args.input: if args.sequences: parser.error( "If an input file is specified, do not specify --sequences") input_format = args.input_format if input_format == "guess": extension = args.input.lower().split(".")[-1] if extension in ["gz", "bzip2"]: extension = args.input.lower().split(".")[-2] if extension == "csv": input_format = "csv" elif extension in ["fasta", "fa"]: input_format = "fasta" else: parser.error( "Couldn't guess input format from file extension: %s\n" "Pass the --input-format argument to specify if it is a " "CSV or fasta file" % args.input) print("Guessed input file format:", input_format) if input_format == "csv": df = pandas.read_csv(args.input) print("Read input CSV with %d rows, columns are: %s" % ( len(df), ", ".join(df.columns))) for col in [args.sequence_column,]: if col not in df.columns: raise ValueError( "No such column '%s' in CSV. Columns are: %s" % ( col, ", ".join(["'%s'" % c for c in df.columns]))) elif input_format == "fasta": df = read_fasta_to_dataframe(args.input) print("Read input fasta with %d sequences" % len(df)) print(df) else: raise ValueError("Unsupported input format", input_format) else: if not args.sequences: parser.error( "Specify either an input file or the --sequences argument") df = pandas.DataFrame({ args.sequence_column: args.sequences, }) if args.sequence_id_column not in df: df[args.sequence_id_column] = "sequence_" + df.index.astype(str) df = df.set_index(args.sequence_id_column) if args.alleles: genotypes = pandas.Series(args.alleles).str.split(r"[,\s]+") genotypes.index = genotypes.index.map(lambda i: "genotype_%02d" % i) alleles = genotypes.to_dict() else: print("No alleles specified. Will perform processing prediction only.") alleles = {} result_df = predictor.predict_sequences( sequences=df[args.sequence_column].to_dict(), alleles=alleles, result="all", peptide_lengths=peptide_lengths, use_flanks=not args.no_flanking, include_affinity_percentile=not args.no_affinity_percentile, throw=not args.no_throw) # Apply thresholds if args.threshold_presentation_score is not None: result_df = result_df.loc[result_df.presentation_score >= args.threshold_presentation_score] if args.threshold_processing_score is not None: result_df = result_df.loc[result_df.processing_score >= args.threshold_processing_score] if args.threshold_affinity is not None: result_df = result_df.loc[result_df.affinity <= args.threshold_affinity] if args.threshold_affinity_percentile is not None: result_df = result_df.loc[result_df.affinity_percentile <= args.threshold_affinity_percentile] # Write results if args.out: result_df.to_csv(args.out, index=False, sep=args.output_delimiter) print("Wrote: %s" % args.out) else: result_df.to_csv(sys.stdout, index=False, sep=args.output_delimiter) ================================================ FILE: mhcflurry/pytorch_layers.py ================================================ """ PyTorch custom layers for mhcflurry. """ import torch import torch.nn as nn import torch.nn.functional as F def get_activation(name): """ Map activation name string to a PyTorch activation function. Parameters ---------- name : str Activation name: "tanh", "sigmoid", "relu", "linear", or "" Returns ------- callable or None Activation function, or None for no activation """ if not name or name == "linear": return None name = name.lower() if name == "tanh": return torch.tanh elif name == "sigmoid": return torch.sigmoid elif name == "relu": return F.relu else: raise ValueError(f"Unknown activation: {name}") class LocallyConnected1D(nn.Module): """ A locally connected 1D layer (unshared convolution). Unlike Conv1D, this layer uses different filter weights at each position in the input sequence. This is equivalent to Keras' LocallyConnected1D. Parameters ---------- in_channels : int Number of input channels out_channels : int Number of output channels (filters) input_length : int Length of the input sequence kernel_size : int Size of the convolution kernel activation : str Activation function name """ def __init__(self, in_channels, out_channels, input_length, kernel_size, activation="tanh"): super(LocallyConnected1D, self).__init__() self.in_channels = in_channels self.out_channels = out_channels self.input_length = input_length self.kernel_size = kernel_size self.activation_name = activation self.output_length = input_length - kernel_size + 1 # Weight shape: (output_length, out_channels, in_channels * kernel_size) self.weight = nn.Parameter( torch.randn(self.output_length, out_channels, in_channels * kernel_size) ) # Bias shape: (output_length, out_channels) self.bias = nn.Parameter( torch.zeros(self.output_length, out_channels) ) self._activation = get_activation(activation) # Initialize weights nn.init.xavier_uniform_(self.weight) def forward(self, x): """ Forward pass. Parameters ---------- x : torch.Tensor Input tensor of shape (batch, sequence_length, in_channels) Returns ------- torch.Tensor Output tensor of shape (batch, output_length, out_channels) """ batch_size = x.size(0) # Use unfold to extract patches and match Keras flatten order. # x_unfolded shape: (batch, output_length, in_channels, kernel_size) x_unfolded = x.unfold(1, self.kernel_size, 1) # Keras flattens patches with kernel positions first, then channels. x_unfolded = x_unfolded.permute(0, 1, 3, 2) # Reshape to (batch, output_length, kernel_size * in_channels) x_unfolded = x_unfolded.reshape( batch_size, self.output_length, self.kernel_size * self.in_channels ) # Apply locally connected weights via einsum # x_unfolded: (batch, output_length, in_channels * kernel_size) # weight: (output_length, out_channels, in_channels * kernel_size) # result: (batch, output_length, out_channels) output = torch.einsum('boi,ofi->bof', x_unfolded, self.weight) + self.bias if self._activation is not None: output = self._activation(output) return output ================================================ FILE: mhcflurry/pytorch_losses.py ================================================ """ PyTorch loss functions for mhcflurry. Supports inequality constraints where training data includes (=), (<), and (>) relationships. For inequality constraints, penalization is applied only when predictions violate the constraint. """ import numpy import torch import torch.nn as nn import torch.nn.functional as F class MSEWithInequalities(nn.Module): """ MSE loss with inequality support. y_true is encoded as follows: - [0, 1]: equality constraint, standard MSE - [2, 3]: greater-than constraint (value = y_true - 2), penalize if pred < value - [4, 5]: less-than constraint (value = y_true - 4), penalize if pred > value """ supports_inequalities = True supports_multiple_outputs = False @staticmethod def encode_y(y, inequalities=None): """ Encode targets with inequality information. Parameters ---------- y : array-like Target values in [0, 1] inequalities : array-like of str, optional One of "=", ">", "<" for each target Returns ------- numpy.ndarray """ y = numpy.array(y, dtype=numpy.float32) if numpy.isnan(y).any(): raise ValueError("y contains NaN") if (y < 0).any() or (y > 1).any(): raise ValueError("Targets must be in [0, 1] for MSEWithInequalities") if inequalities is None: return y if len(inequalities) != len(y): raise ValueError("inequalities must have same length as y") for ineq in inequalities: if ineq not in {"=", ">", "<"}: raise ValueError("Inequalities must be one of '=', '>', '<'") offsets = numpy.array([ {'=': 0, '>': 2, '<': 4}[ineq] for ineq in inequalities ], dtype=numpy.float32) encoded = y + offsets assert not numpy.isnan(encoded).any() return encoded def forward(self, y_pred, y_true, sample_weights=None): """ Compute loss. Parameters ---------- y_pred : torch.Tensor Predictions, shape (batch,) or (batch, 1) y_true : torch.Tensor Encoded targets, shape (batch,) or (batch, 1) Returns ------- torch.Tensor Scalar loss value """ y_true = y_true.reshape(-1) y_pred = y_pred.reshape(-1) # Handle (=) inequalities: 0 <= y_true <= 1 diff1 = y_pred - y_true diff1 = diff1 * (y_true >= 0.0).float() * (y_true <= 1.0).float() # Handle (>) inequalities: 2 <= y_true <= 3 # Penalize only if pred < threshold (diff < 0) diff2 = y_pred - (y_true - 2.0) diff2 = diff2 * (y_true >= 2.0).float() * (y_true <= 3.0).float() diff2 = diff2 * (diff2 < 0.0).float() # Handle (<) inequalities: y_true >= 4 # Penalize only if pred > threshold (diff > 0) diff3 = y_pred - (y_true - 4.0) diff3 = diff3 * (y_true >= 4.0).float() diff3 = diff3 * (diff3 > 0.0).float() per_sample = diff1.square() + diff2.square() + diff3.square() if sample_weights is None: denominator = torch.clamp( (y_true != 2.0).float().sum(), min=1.0 ) return per_sample.sum() / denominator sample_weights = sample_weights.reshape(-1).to(per_sample.device) mask = (y_true != 2.0).float() denominator = torch.clamp((sample_weights * mask).sum(), min=1.0) return (per_sample * sample_weights).sum() / denominator class MSEWithInequalitiesAndMultipleOutputs(nn.Module): """ MSE loss with inequality and multiple output support. Extends MSEWithInequalities by encoding the output index into the target: encoded_target = inequality_encoded_value + output_index * 10 """ supports_inequalities = True supports_multiple_outputs = True @staticmethod def encode_y(y, inequalities=None, output_indices=None): """ Encode targets with inequality and output index information. Parameters ---------- y : array-like Target values in [0, 1] inequalities : array-like of str, optional One of "=", ">", "<" for each target output_indices : array-like of int, optional Output index for each target Returns ------- numpy.ndarray """ encoded = MSEWithInequalities.encode_y(y, inequalities) if output_indices is not None: output_indices = numpy.array(output_indices) if output_indices.shape != (len(encoded),): raise ValueError( "Expected output_indices to have shape %s not %s" % ((len(encoded),), output_indices.shape) ) if (output_indices < 0).any(): raise ValueError("Invalid output indices: %s" % output_indices) encoded = encoded + output_indices.astype(numpy.float32) * 10 return encoded def forward(self, y_pred, y_true, sample_weights=None): """ Compute loss. Parameters ---------- y_pred : torch.Tensor Predictions, shape (batch, num_outputs) y_true : torch.Tensor Encoded targets, shape (batch,) or (batch, 1) Returns ------- torch.Tensor Scalar loss value """ y_true = y_true.reshape(-1) if y_pred.dim() == 1: y_pred = y_pred.unsqueeze(1) # Decode output indices output_indices = (y_true / 10.0).long() inequality_encoded = y_true - output_indices.float() * 10.0 # Select the relevant output for each sample batch_indices = torch.arange(len(y_true), device=y_pred.device) output_indices_clamped = output_indices.clamp(0, y_pred.shape[1] - 1) selected_pred = y_pred[batch_indices, output_indices_clamped] # Apply MSEWithInequalities logic on selected predictions y_t = inequality_encoded y_p = selected_pred # Handle (=) inequalities diff1 = y_p - y_t diff1 = diff1 * (y_t >= 0.0).float() * (y_t <= 1.0).float() # Handle (>) inequalities diff2 = y_p - (y_t - 2.0) diff2 = diff2 * (y_t >= 2.0).float() * (y_t <= 3.0).float() diff2 = diff2 * (diff2 < 0.0).float() # Handle (<) inequalities diff3 = y_p - (y_t - 4.0) diff3 = diff3 * (y_t >= 4.0).float() diff3 = diff3 * (diff3 > 0.0).float() per_sample = diff1.square() + diff2.square() + diff3.square() if sample_weights is None: denominator = torch.clamp( (y_t != 2.0).float().sum(), min=1.0 ) return per_sample.sum() / denominator sample_weights = sample_weights.reshape(-1).to(per_sample.device) mask = (y_t != 2.0).float() denominator = torch.clamp((sample_weights * mask).sum(), min=1.0) return (per_sample * sample_weights).sum() / denominator class MultiallelicMassSpecLoss(nn.Module): """ Loss function for multiallelic mass spectrometry data. For each (hit, decoy) pair, penalizes when any decoy allele prediction exceeds the best hit allele prediction by more than delta. y_true encoding: - 1.0: hit (positive) - 0.0: decoy (negative) - -1.0: ignored """ supports_inequalities = True supports_multiple_outputs = False def __init__(self, delta=0.2, multiplier=1.0): super(MultiallelicMassSpecLoss, self).__init__() self.delta = delta self.multiplier = multiplier @staticmethod def encode_y(y): """Encode y (no-op for this loss).""" y = numpy.array(y, dtype=numpy.float32) assert numpy.isin(y, [-1.0, 0.0, 1.0]).all() return y def forward(self, y_pred, y_true, sample_weights=None): """ Compute loss. Parameters ---------- y_pred : torch.Tensor Predictions, shape (batch, num_alleles) y_true : torch.Tensor Labels, shape (batch,) or (batch, 1) Returns ------- torch.Tensor Scalar loss value """ y_true = y_true.reshape(-1) if y_pred.dim() == 1: y_pred = y_pred.unsqueeze(1) # Get hit and decoy masks hit_mask = (y_true == 1.0) decoy_mask = (y_true == 0.0) num_hits = hit_mask.sum().item() num_decoys = decoy_mask.sum().item() if num_hits == 0 or num_decoys == 0: return torch.tensor(0.0, device=y_pred.device, requires_grad=True) num_alleles = y_pred.shape[1] # Best allele prediction for each hit: (num_hits,) hit_preds = y_pred[hit_mask] hit_max = hit_preds.max(dim=1).values # (num_hits,) # All decoy predictions: (num_decoys, num_alleles) decoy_preds = y_pred[decoy_mask] # Compute pairwise terms: # For each (decoy, allele, hit): max(0, decoy_pred - hit_max + delta)^2 # decoy_preds: (num_decoys, num_alleles) -> (num_decoys, num_alleles, 1) # hit_max: (num_hits,) -> (1, 1, num_hits) term = decoy_preds.unsqueeze(2) - hit_max.unsqueeze(0).unsqueeze(0) + self.delta penalty = torch.clamp(term, min=0.0).square() denominator = num_hits * num_decoys * num_alleles result = self.multiplier * penalty.sum() / denominator return result class StandardLoss(nn.Module): """ Wrapper for standard PyTorch loss functions (MSE, MAE, etc). """ supports_inequalities = False supports_multiple_outputs = False def __init__(self, loss_name="mse"): super(StandardLoss, self).__init__() self.loss_name = loss_name if loss_name == "mse": self._loss_fn = nn.MSELoss() elif loss_name == "mae": self._loss_fn = nn.L1Loss() else: raise ValueError(f"Unknown standard loss: {loss_name}") @staticmethod def encode_y(y): """Encode y (simple cast to float32).""" return numpy.array(y, dtype=numpy.float32) def forward(self, y_pred, y_true, sample_weights=None): """ Compute loss. Parameters ---------- y_pred : torch.Tensor y_true : torch.Tensor sample_weights : torch.Tensor | None Optional per-example weights. Returns ------- torch.Tensor Scalar loss value """ y_pred = y_pred.reshape(-1) y_true = y_true.reshape(-1) if sample_weights is None: return self._loss_fn(y_pred, y_true) if self.loss_name == "mse": losses = F.mse_loss(y_pred, y_true, reduction="none") elif self.loss_name == "mae": losses = F.l1_loss(y_pred, y_true, reduction="none") else: losses = self._loss_fn(y_pred, y_true) sample_weights = sample_weights.reshape(-1).to(losses.device) denominator = torch.clamp(sample_weights.sum(), min=1.0) return (losses * sample_weights).sum() / denominator # Registry of custom losses _CUSTOM_LOSSES = { 'mse_with_inequalities': MSEWithInequalities, 'mse_with_inequalities_and_multiple_outputs': MSEWithInequalitiesAndMultipleOutputs, 'multiallelic_mass_spec_loss': MultiallelicMassSpecLoss, } def get_pytorch_loss(name): """ Get a PyTorch loss object by name. Parameters ---------- name : str Loss name. Prefix with "custom:" for custom losses, otherwise a standard loss name like "mse". Returns ------- nn.Module Loss module with encode_y, supports_inequalities, and supports_multiple_outputs attributes. """ if name.startswith("custom:"): custom_name = name.replace("custom:", "") if custom_name not in _CUSTOM_LOSSES: raise ValueError( f"No such custom loss: {name}. " f"Supported: {', '.join('custom:' + k for k in _CUSTOM_LOSSES)}" ) return _CUSTOM_LOSSES[custom_name]() return StandardLoss(name) ================================================ FILE: mhcflurry/random_negative_peptides.py ================================================ import logging import math import numpy import pandas from .hyperparameters import HyperparameterDefaults from .common import amino_acid_distribution, random_peptides class RandomNegativePeptides(object): """ Generate random negative (peptide, allele) pairs. These are used during model training, where they are resampled at each epoch. """ hyperparameter_defaults = HyperparameterDefaults( random_negative_rate=0.0, random_negative_constant=0, random_negative_match_distribution=True, random_negative_distribution_smoothing=0.0, random_negative_method="recommended", random_negative_binder_threshold=None, random_negative_lengths=[8,9,10,11,12,13,14,15]) """ Hyperperameters for random negative peptides. Number of random negatives will be: random_negative_rate * (num measurements) + random_negative_constant where the exact meaning of (num measurements) depends on the particular random_negative_method in use. If random_negative_match_distribution is True, then the amino acid frequencies of the training data peptides are used to generate the random peptides. Valid values for random_negative_method are: "by_length": used for allele-specific prediction. See description in `RandomNegativePeptides.plan_by_length` method. "by_allele": used for pan-allele prediction. See `RandomNegativePeptides.plan_by_allele` method. "by_allele_equalize_nonbinders": used for pan-allele prediction. See `RandomNegativePeptides.plan_by_allele_equalize_nonbinders` method. "recommended": the default. Use by_length if the predictor is allele- specific and by_allele if it's pan-allele. """ def __init__(self, **hyperparameters): self.hyperparameters = self.hyperparameter_defaults.with_defaults( hyperparameters) self.plan_df = None self.aa_distribution = None def plan(self, peptides, affinities, alleles=None, inequalities=None): """ Calculate the number of random negatives for each allele and peptide length. Call this once after instantiating the object. Parameters ---------- peptides : list of string affinities : list of float alleles : list of string, optional inequalities : list of string (">", "<", or "="), optional Returns ------- pandas.DataFrame indicating number of random negatives for each length and allele. """ numpy.testing.assert_equal(len(peptides), len(affinities)) if alleles is not None: numpy.testing.assert_equal(len(peptides), len(alleles)) if inequalities is not None: numpy.testing.assert_equal(len(peptides), len(inequalities)) peptides = pandas.Series(peptides, copy=False) peptide_lengths = peptides.str.len() if self.hyperparameters['random_negative_match_distribution']: self.aa_distribution = amino_acid_distribution( peptides.values, smoothing=self.hyperparameters[ 'random_negative_distribution_smoothing' ]) logging.info( "Using amino acid distribution for random negative:\n%s" % ( str(self.aa_distribution.to_dict()))) df_all = pandas.DataFrame({ 'length': peptide_lengths, 'affinity': affinities, }) df_all["allele"] = "" if alleles is None else alleles df_all["inequality"] = "=" if inequalities is None else inequalities df_binders = None df_nonbinders = None if self.hyperparameters['random_negative_binder_threshold']: df_nonbinders = df_all.loc[ (df_all.inequality != "<") & (df_all.affinity > self.hyperparameters[ 'random_negative_binder_threshold' ]) ] df_binders = df_all.loc[ (df_all.inequality != ">") & (df_all.affinity <= self.hyperparameters[ 'random_negative_binder_threshold' ]) ] method = self.hyperparameters['random_negative_method'] if method == 'recommended': # by_length for allele-specific prediction and by_allele for pan. method = ( "by_length" if alleles is None else "by_allele") function = { 'by_length': self.plan_by_length, 'by_allele': self.plan_by_allele, 'by_allele_equalize_nonbinders': self.plan_by_allele_equalize_nonbinders, }[method] function(df_all, df_binders, df_nonbinders) assert self.plan_df is not None logging.info("Random negative plan [%s]:\n%s", method, self.plan_df) return self.plan_df def plan_by_length(self, df_all, df_binders=None, df_nonbinders=None): """ Generate a random negative plan using the "by_length" policy. Parameters are as in the `plan` method. No return value. Used for allele-specific predictors. Does not work well for pan-allele. Different numbers of random negatives per length. Alleles are sampled proportionally to the number of times they are used in the training data. """ assert list(df_all.allele.unique()) == [""], ( "by_length only recommended for allele specific prediction") df = df_all if df_binders is None else df_binders lengths = self.hyperparameters['random_negative_lengths'] length_to_num_random_negative = {} length_counts = df.length.value_counts().to_dict() for length in lengths: length_to_num_random_negative[length] = int( length_counts.get(length, 0) * self.hyperparameters['random_negative_rate'] + self.hyperparameters['random_negative_constant']) plan_df = pandas.DataFrame(index=sorted(df.allele.unique())) for length in lengths: plan_df[length] = length_to_num_random_negative[length] self.plan_df = plan_df.astype(int) def plan_by_allele(self, df_all, df_binders=None, df_nonbinders=None): """ Generate a random negative plan using the "by_allele" policy. Parameters are as in the `plan` method. No return value. For each allele, a particular number of random negatives are used for all lengths. Across alleles, the number of random negatives varies; within an allele, the number of random negatives for each length is a constant """ allele_to_num_per_length = {} total_random_peptides_per_length = 0 df = df_all if df_binders is None else df_binders lengths = self.hyperparameters['random_negative_lengths'] all_alleles = df_all.allele.unique() for allele in all_alleles: sub_df = df.loc[df.allele == allele] num_for_allele = len(sub_df) * ( self.hyperparameters['random_negative_rate'] ) + self.hyperparameters['random_negative_constant'] num_per_length = int(math.ceil( num_for_allele / len(lengths))) total_random_peptides_per_length += num_per_length allele_to_num_per_length[allele] = num_per_length plan_df = pandas.DataFrame(index=sorted(df.allele.unique())) for length in lengths: plan_df[length] = plan_df.index.map(allele_to_num_per_length) self.plan_df = plan_df.astype(int) def plan_by_allele_equalize_nonbinders( self, df_all, df_binders, df_nonbinders): """ Generate a random negative plan using the "by_allele_equalize_nonbinders" policy. Parameters are as in the `plan` method. No return value. Requires that the random_negative_binder_threshold hyperparameter is set. In a first step, the number of random negatives selected by the "by_allele" method are added (see `plan_by_allele`). Then, the total number of non-binders are calculated for each allele and length. This total includes non-binder measurements in the training data plus the random negative peptides added in the first step. In a second step, additional random negative peptides are added so that for each allele, all peptide lengths have the same total number of non-binders. """ assert df_binders is not None assert df_nonbinders is not None lengths = self.hyperparameters['random_negative_lengths'] self.plan_by_allele(df_all, df_binders, df_nonbinders) first_pass_plan = self.plan_df self.plan_df = None # Use floating point while populating so NaN assignment remains valid # across pandas versions; cast to int at the end. new_plan = first_pass_plan.astype(float).copy() new_plan[:] = numpy.nan for (allele, first_pass_per_length) in first_pass_plan.iterrows(): real_nonbinders_by_length = df_nonbinders.loc[ df_nonbinders.allele == allele ].length.value_counts().reindex(lengths).fillna(0) total_nonbinders_by_length = ( real_nonbinders_by_length + first_pass_per_length) new_plan.loc[allele] = first_pass_per_length + ( total_nonbinders_by_length.max() - total_nonbinders_by_length) if new_plan.isna().any().any(): raise AssertionError( "Random negative plan contains NaN after equalization; " "this indicates an incomplete per-allele assignment bug." ) self.plan_df = new_plan.astype(int) def get_alleles(self): """ Get the list of alleles corresponding to each random negative peptide as returned by `get_peptides`. This does NOT change and can be safely called once and reused. Returns ------- list of string """ assert self.plan_df is not None, "Call plan() first" alleles = [] for allele, row in self.plan_df.iterrows(): alleles.extend([allele] * int(row.sum())) assert len(alleles) == self.get_total_count() return alleles def get_peptides(self): """ Get the list of random negative peptides. This will be different each time the method is called. Returns ------- list of string """ assert self.plan_df is not None, "Call plan() first" peptides = [] for allele, row in self.plan_df.iterrows(): for (length, num) in row.items(): peptides.extend( random_peptides( num, length=length, distribution=self.aa_distribution)) assert len(peptides) == self.get_total_count() return peptides def get_total_count(self): """ Total number of planned random negative peptides. Returns ------- int """ return self.plan_df.sum().sum() ================================================ FILE: mhcflurry/regression_target.py ================================================ import numpy def from_ic50(ic50, max_ic50=50000.0): """ Convert ic50s to regression targets in the range [0.0, 1.0]. Parameters ---------- ic50 : numpy.array of float Returns ------- numpy.array of float """ x = 1.0 - (numpy.log(numpy.maximum(ic50, 1e-12)) / numpy.log(max_ic50)) return numpy.minimum( 1.0, numpy.maximum(0.0, x)) def to_ic50(x, max_ic50=50000.0): """ Convert regression targets in the range [0.0, 1.0] to ic50s in the range [0, 50000.0]. Parameters ---------- x : numpy.array of float Returns ------- numpy.array of float """ return max_ic50 ** (1.0 - x) ================================================ FILE: mhcflurry/scoring.py ================================================ """ Measures of prediction accuracy """ import logging import sklearn.metrics import numpy import scipy from .regression_target import from_ic50 def make_scores( ic50_y, ic50_y_pred, sample_weight=None, threshold_nm=500, max_ic50=50000): """ Calculate AUC, F1, and Kendall Tau scores. Parameters ----------- ic50_y : float list true IC50s (i.e. affinities) ic50_y_pred : float list predicted IC50s sample_weight : float list [optional] threshold_nm : float [optional] max_ic50 : float [optional] Returns ----------- dict with entries "auc", "f1", "tau" """ y_pred = from_ic50(ic50_y_pred, max_ic50) try: auc = sklearn.metrics.roc_auc_score( ic50_y <= threshold_nm, y_pred, sample_weight=sample_weight) except ValueError as e: logging.warning(e) auc = numpy.nan try: f1 = sklearn.metrics.f1_score( ic50_y <= threshold_nm, ic50_y_pred <= threshold_nm, sample_weight=sample_weight) except ValueError as e: logging.warning(e) f1 = numpy.nan try: tau = scipy.stats.kendalltau(ic50_y_pred, ic50_y)[0] except ValueError as e: logging.warning(e) tau = numpy.nan return dict( auc=auc, f1=f1, tau=tau) ================================================ FILE: mhcflurry/select_allele_specific_models_command.py ================================================ """ Model select class1 single allele models. """ import argparse import os import signal import sys import time import traceback import random from functools import partial from pprint import pprint import numpy import pandas from scipy.stats import kendalltau, percentileofscore, pearsonr from sklearn.metrics import roc_auc_score import tqdm # progress bar from .class1_affinity_predictor import Class1AffinityPredictor from .common import normalize_allele_name from .encodable_sequences import EncodableSequences from .common import configure_logging, random_peptides from .local_parallelism import worker_pool_with_gpu_assignments_from_args, add_local_parallelism_args from .regression_target import from_ic50 tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", required=False, help=( "Model selection data CSV. Expected columns: " "allele, peptide, measurement_value")) parser.add_argument( "--exclude-data", metavar="FILE.csv", required=False, help=( "Data to EXCLUDE from model selection. Useful to specify the original " "training data used")) parser.add_argument( "--models-dir", metavar="DIR", required=True, help="Directory to read models") parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write selected models") parser.add_argument( "--out-unselected-predictions", metavar="FILE.csv", help="Write predictions for validation data using unselected predictor to " "FILE.csv") parser.add_argument( "--unselected-accuracy-scorer", metavar="SCORER", default="combined:mass-spec,mse") parser.add_argument( "--unselected-accuracy-scorer-num-samples", type=int, default=1000) parser.add_argument( "--unselected-accuracy-percentile-threshold", type=float, metavar="X", default=95) parser.add_argument( "--allele", default=None, nargs="+", help="Alleles to select models for. If not specified, all alleles with " "enough measurements will be used.") parser.add_argument( "--combined-min-models", type=int, default=8, metavar="N", help="Min number of models to select per allele when using combined selector") parser.add_argument( "--combined-max-models", type=int, default=1000, metavar="N", help="Max number of models to select per allele when using combined selector") parser.add_argument( "--combined-min-contribution-percent", type=float, default=1.0, metavar="X", help="Use only model selectors that can contribute at least X %% to the " "total score. Default: %(default)s") parser.add_argument( "--mass-spec-min-measurements", type=int, metavar="N", default=1, help="Min number of measurements required for an allele to use mass-spec model " "selection") parser.add_argument( "--mass-spec-min-models", type=int, default=8, metavar="N", help="Min number of models to select per allele when using mass-spec selector") parser.add_argument( "--mass-spec-max-models", type=int, default=1000, metavar="N", help="Max number of models to select per allele when using mass-spec selector") parser.add_argument( "--mse-min-measurements", type=int, metavar="N", default=1, help="Min number of measurements required for an allele to use MSE model " "selection") parser.add_argument( "--mse-min-models", type=int, default=8, metavar="N", help="Min number of models to select per allele when using MSE selector") parser.add_argument( "--mse-max-models", type=int, default=1000, metavar="N", help="Max number of models to select per allele when using MSE selector") parser.add_argument( "--scoring", nargs="+", default=["mse", "consensus"], help="Scoring procedures to use in order") parser.add_argument( "--consensus-min-models", type=int, default=8, metavar="N", help="Min number of models to select per allele when using consensus selector") parser.add_argument( "--consensus-max-models", type=int, default=1000, metavar="N", help="Max number of models to select per allele when using consensus selector") parser.add_argument( "--consensus-num-peptides-per-length", type=int, default=10000, help="Num peptides per length to use for consensus scoring") parser.add_argument( "--mass-spec-regex", metavar="REGEX", default="mass[- ]spec", help="Regular expression for mass-spec data. Runs on measurement_source col." "Default: %(default)s.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) add_local_parallelism_args(parser) def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) input_predictor = Class1AffinityPredictor.load(args.models_dir) print("Loaded: %s" % input_predictor) if args.allele: alleles = [normalize_allele_name(a) for a in args.allele] else: alleles = input_predictor.supported_alleles metadata_dfs = {} if args.data: df = pandas.read_csv(args.data) print("Loaded data: %s" % (str(df.shape))) df = df.loc[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) # Allele names in data are assumed to be already normalized. df = df.loc[df.allele.isin(alleles)].dropna() print("Selected %d alleles: %s" % (len(alleles), ' '.join(alleles))) if args.exclude_data: exclude_df = pandas.read_csv(args.exclude_data) metadata_dfs["model_selection_exclude"] = exclude_df print("Loaded exclude data: %s" % (str(df.shape))) df["_key"] = df.allele + "__" + df.peptide exclude_df["_key"] = exclude_df.allele + "__" + exclude_df.peptide df["_excluded"] = df._key.isin(exclude_df._key.unique()) print("Excluding measurements per allele (counts): ") print(df.groupby("allele")._excluded.sum()) print("Excluding measurements per allele (fractions): ") print(df.groupby("allele")._excluded.mean()) df = df.loc[~df._excluded] del df["_excluded"] del df["_key"] print("Reduced data to: %s" % (str(df.shape))) metadata_dfs["model_selection_data"] = df df["mass_spec"] = df.measurement_source.str.contains( args.mass_spec_regex) else: df = None if args.out_unselected_predictions: df["unselected_prediction"] = input_predictor.predict( alleles=df.allele.values, peptides=df.peptide.values) df.to_csv(args.out_unselected_predictions) print("Wrote: %s" % args.out_unselected_predictions) selectors = {} selector_to_model_selection_kwargs = {} def make_selector( scoring, combined_min_contribution_percent=args.combined_min_contribution_percent): if scoring in selectors: return ( selectors[scoring], selector_to_model_selection_kwargs[scoring]) start = time.time() if scoring.startswith("combined:"): model_selection_kwargs = { 'min_models': args.combined_min_models, 'max_models': args.combined_max_models, } component_selectors = [] for component_selector in scoring.split(":", 1)[1].split(","): component_selectors.append( make_selector( component_selector)[0]) selector = CombinedModelSelector( component_selectors, min_contribution_percent=combined_min_contribution_percent) elif scoring == "mse": model_selection_kwargs = { 'min_models': args.mse_min_models, 'max_models': args.mse_max_models, } min_measurements = args.mse_min_measurements selector = MSEModelSelector( df=df.loc[~df.mass_spec], predictor=input_predictor, min_measurements=min_measurements) elif scoring == "mass-spec": mass_spec_df = df.loc[df.mass_spec] model_selection_kwargs = { 'min_models': args.mass_spec_min_models, 'max_models': args.mass_spec_max_models, } min_measurements = args.mass_spec_min_measurements selector = MassSpecModelSelector( df=mass_spec_df, predictor=input_predictor, min_measurements=min_measurements) elif scoring == "consensus": model_selection_kwargs = { 'min_models': args.consensus_min_models, 'max_models': args.consensus_max_models, } selector = ConsensusModelSelector( predictor=input_predictor, num_peptides_per_length=args.consensus_num_peptides_per_length) else: raise ValueError("Unsupported scoring method: %s" % scoring) print("Instantiated model selector %s in %0.2f sec." % ( scoring, time.time() - start)) return (selector, model_selection_kwargs) for scoring in args.scoring: (selector, model_selection_kwargs) = make_selector(scoring) selectors[scoring] = selector selector_to_model_selection_kwargs[scoring] = model_selection_kwargs unselected_accuracy_scorer = None if args.unselected_accuracy_scorer: # Force running all selectors by setting combined_min_contribution_percent=0. unselected_accuracy_scorer = make_selector( args.unselected_accuracy_scorer, combined_min_contribution_percent=0.0)[0] print("Using unselected accuracy scorer: %s" % unselected_accuracy_scorer) GLOBAL_DATA["unselected_accuracy_scorer"] = unselected_accuracy_scorer print("Selectors for alleles:") allele_to_selector = {} allele_to_model_selection_kwargs = {} for allele in alleles: selector = None for possible_selector in args.scoring: if selectors[possible_selector].usable_for_allele(allele=allele): selector = selectors[possible_selector] print("%20s %s" % (allele, selector.plan_summary(allele))) break if selector is None: raise ValueError("No selectors usable for allele: %s" % allele) allele_to_selector[allele] = selector allele_to_model_selection_kwargs[allele] = ( selector_to_model_selection_kwargs[possible_selector]) GLOBAL_DATA["args"] = args GLOBAL_DATA["input_predictor"] = input_predictor GLOBAL_DATA["unselected_accuracy_scorer"] = unselected_accuracy_scorer GLOBAL_DATA["allele_to_selector"] = allele_to_selector GLOBAL_DATA["allele_to_model_selection_kwargs"] = allele_to_model_selection_kwargs if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") result_predictor = Class1AffinityPredictor(metadata_dataframes=metadata_dfs) worker_pool = worker_pool_with_gpu_assignments_from_args(args) start = time.time() if worker_pool is None: # Serial run print("Running in serial.") results = ( model_select(allele) for allele in alleles) else: # Parallel run random.shuffle(alleles) results = worker_pool.imap_unordered( partial(model_select, constant_data=GLOBAL_DATA), alleles, chunksize=1) unselected_summary = [] model_selection_dfs = [] for result in tqdm.tqdm(results, total=len(alleles)): pprint(result) summary_dict = dict(result) summary_dict["retained"] = result["selected"] is not None del summary_dict["selected"] unselected_summary.append(summary_dict) if result['selected'] is not None: model_selection_dfs.append( result['selected'].metadata_dataframes['model_selection']) result_predictor.merge_in_place([result['selected']]) if model_selection_dfs: model_selection_df = pandas.concat( model_selection_dfs, ignore_index=True) model_selection_df["selector"] = model_selection_df.allele.map( allele_to_selector) result_predictor.metadata_dataframes["model_selection"] = ( model_selection_df) result_predictor.metadata_dataframes["unselected_summary"] = ( pandas.DataFrame(unselected_summary)) print("Done model selecting for %d alleles." % len(alleles)) result_predictor.save(args.out_models_dir) model_selection_time = time.time() - start if worker_pool: worker_pool.close() worker_pool.join() print("Model selection time %0.2f min." % (model_selection_time / 60.0)) print("Predictor written to: %s" % args.out_models_dir) class ScrambledPredictor(object): def __init__(self, predictor): self.predictor = predictor self._predictions = {} self._allele = None def predict(self, peptides, allele): if peptides not in self._predictions: self._predictions[peptides] = pandas.Series( self.predictor.predict(peptides=peptides, allele=allele)) self._allele = allele assert allele == self._allele return self._predictions[peptides].sample(frac=1.0).values def model_select(allele, constant_data=GLOBAL_DATA): unselected_accuracy_scorer = constant_data["unselected_accuracy_scorer"] selector = constant_data["allele_to_selector"][allele] model_selection_kwargs = constant_data[ "allele_to_model_selection_kwargs" ][allele] predictor = constant_data["input_predictor"] args = constant_data["args"] unselected_accuracy_scorer_samples = constant_data["args"].unselected_accuracy_scorer_num_samples result_dict = { "allele": allele } unselected_score = None unselected_score_percentile = None unselected_score_scrambled_mean = None if unselected_accuracy_scorer: unselected_score_function = ( unselected_accuracy_scorer.score_function(allele)) additional_metadata = {} unselected_score = unselected_score_function( predictor, additional_metadata_out=additional_metadata) scrambled_predictor = ScrambledPredictor(predictor) scrambled_scores = numpy.array([ unselected_score_function( scrambled_predictor) for _ in range(unselected_accuracy_scorer_samples) ]) unselected_score_scrambled_mean = scrambled_scores.mean() unselected_score_percentile = percentileofscore( scrambled_scores, unselected_score) print( "Unselected score and percentile", allele, unselected_score, unselected_score_percentile, additional_metadata) result_dict.update( dict(("unselected_%s" % key, value) for (key, value) in additional_metadata.items())) selected = None threshold = args.unselected_accuracy_percentile_threshold if unselected_score_percentile is None or unselected_score_percentile >= threshold: selected = predictor.model_select( score_function=selector.score_function(allele=allele), alleles=[allele], **model_selection_kwargs) result_dict["unselected_score_plan"] = ( unselected_accuracy_scorer.plan_summary(allele) if unselected_accuracy_scorer else None) result_dict["selector_score_plan"] = selector.plan_summary(allele) result_dict["unselected_accuracy_score_percentile"] = unselected_score_percentile result_dict["unselected_score"] = unselected_score result_dict["unselected_score_scrambled_mean"] = unselected_score_scrambled_mean result_dict["selected"] = selected result_dict["num_models"] = len(selected.neural_networks) if selected else None return result_dict def cache_encoding(predictor, peptides): # Encode the peptides for each neural network, so the encoding # becomes cached. for network in predictor.neural_networks: network.peptides_to_network_input(peptides) class ScoreFunction(object): """ Thin wrapper over a score function (Class1AffinityPredictor -> float). Used to keep a summary string associated with the function. """ def __init__(self, function, summary=None): self.function = function self.summary = summary if summary else "(n/a)" def __call__(self, *args, **kwargs): return self.function(*args, **kwargs) class CombinedModelSelector(object): """ Model selector that computes a weighted average over other model selectors. """ def __init__(self, model_selectors, weights=None, min_contribution_percent=1.0): if weights is None: weights = numpy.ones(shape=(len(model_selectors),)) self.model_selectors = model_selectors self.selector_to_weight = dict(zip(self.model_selectors, weights)) self.min_contribution_percent = min_contribution_percent def usable_for_allele(self, allele): return any( selector.usable_for_allele(allele) for selector in self.model_selectors) def plan_summary(self, allele): return self.score_function(allele, dry_run=True).summary def score_function(self, allele, dry_run=False): selector_to_max_weighted_score = {} for selector in self.model_selectors: weight = self.selector_to_weight[selector] if selector.usable_for_allele(allele): max_weighted_score = selector.max_absolute_value(allele) * weight else: max_weighted_score = 0 selector_to_max_weighted_score[selector] = max_weighted_score max_total_score = sum(selector_to_max_weighted_score.values()) # Use only selectors that can contribute >1% to the total score selectors_to_use = [ selector for selector in self.model_selectors if ( selector_to_max_weighted_score[selector] > max_total_score * self.min_contribution_percent / 100.0) ] summary = ", ".join([ "%s(|%.3f|)" % ( selector.plan_summary(allele), selector_to_max_weighted_score[selector]) for selector in selectors_to_use ]) if dry_run: score = None else: score_functions_and_weights = [ (selector.score_function(allele=allele), self.selector_to_weight[selector]) for selector in selectors_to_use ] def score(predictor, additional_metadata_out=None): scores = numpy.array([ score_function( predictor, additional_metadata_out=additional_metadata_out) * weight for (score_function, weight) in score_functions_and_weights ]) if additional_metadata_out is not None: additional_metadata_out["combined_score_terms"] = str( list(scores)) return scores.sum() return ScoreFunction(score, summary=summary) class ConsensusModelSelector(object): """ Model selector that scores sub-ensembles based on their Kendall tau consistency with the full ensemble over a set of random peptides. """ def __init__( self, predictor, num_peptides_per_length=10000, multiply_score_by_value=10.0): (min_length, max_length) = predictor.supported_peptide_lengths peptides = [] for length in range(min_length, max_length + 1): peptides.extend( random_peptides(num_peptides_per_length, length=length)) self.peptides = EncodableSequences.create(peptides) self.predictor = predictor self.multiply_score_by_value = multiply_score_by_value cache_encoding(self.predictor, self.peptides) def usable_for_allele(self, allele): return True def max_absolute_value(self, allele): return self.multiply_score_by_value def plan_summary(self, allele): return "consensus (%d points)" % len(self.peptides) def score_function(self, allele): full_ensemble_predictions = self.predictor.predict( allele=allele, peptides=self.peptides) def score(predictor, additional_metadata_out=None): predictions = predictor.predict( allele=allele, peptides=self.peptides, ) tau = kendalltau(predictions, full_ensemble_predictions).correlation if additional_metadata_out is not None: additional_metadata_out["score_consensus_tau"] = tau return tau * self.multiply_score_by_value return ScoreFunction( score, summary=self.plan_summary(allele)) class MSEModelSelector(object): """ Model selector that uses mean-squared error to score models. Inequalities are supported. """ def __init__( self, df, predictor, min_measurements=1, multiply_score_by_data_size=True): self.df = df self.predictor = predictor self.min_measurements = min_measurements self.multiply_score_by_data_size = multiply_score_by_data_size def usable_for_allele(self, allele): return (self.df.allele == allele).sum() >= self.min_measurements def max_absolute_value(self, allele): if self.multiply_score_by_data_size: return (self.df.allele == allele).sum() else: return 1.0 def plan_summary(self, allele): return self.score_function(allele).summary def score_function(self, allele): sub_df = self.df.loc[self.df.allele == allele].reset_index(drop=True) peptides = EncodableSequences.create(sub_df.peptide.values) def score(predictor, additional_metadata_out=None): predictions = predictor.predict( allele=allele, peptides=peptides, ) deviations = from_ic50(predictions) - from_ic50( sub_df.measurement_value) if 'measurement_inequality' in sub_df.columns: # Must reverse meaning of inequality since we are working with # transformed 0-1 values, which are anti-correlated with the ic50s. # The measurement_inequality column is given in terms of ic50s. deviations.loc[ ( (sub_df.measurement_inequality == "<") & (deviations > 0)) | ((sub_df.measurement_inequality == ">") & (deviations < 0)) ] = 0.0 score_mse = (1 - (deviations ** 2).mean()) if additional_metadata_out is not None: additional_metadata_out["score_MSE"] = 1 - score_mse # We additionally include other scores on (=) measurements as # a convenience eq_df = sub_df if 'measurement_inequality' in sub_df.columns: eq_df = sub_df.loc[ sub_df.measurement_inequality == "=" ] additional_metadata_out["score_pearsonr"] = ( pearsonr( numpy.log(eq_df.measurement_value.values), numpy.log(predictions[eq_df.index.values]))[0]) for threshold in [500, 5000, 15000]: if (eq_df.measurement_value < threshold).nunique() == 2: additional_metadata_out["score_AUC@%d" % threshold] = ( roc_auc_score( (eq_df.measurement_value < threshold).values, -1 * predictions[eq_df.index.values])) return score_mse * ( len(sub_df) if self.multiply_score_by_data_size else 1) summary = "mse (%d points)" % (len(sub_df)) return ScoreFunction(score, summary=summary) class MassSpecModelSelector(object): """ Model selector that uses PPV of differentiating decoys from hits from mass-spec experiments. """ def __init__( self, df, predictor, decoys_per_length=0, min_measurements=100, multiply_score_by_data_size=True): # Index is peptide, columns are alleles hit_matrix = df.groupby( ["peptide", "allele"]).measurement_value.count().unstack().fillna( 0).astype(bool) if decoys_per_length: (min_length, max_length) = predictor.supported_peptide_lengths decoys = [] for length in range(min_length, max_length + 1): decoys.extend( random_peptides(decoys_per_length, length=length)) decoy_matrix = pandas.DataFrame( index=decoys, columns=hit_matrix.columns, dtype=bool) decoy_matrix[:] = False full_matrix = pandas.concat([hit_matrix, decoy_matrix]) else: full_matrix = hit_matrix if len(full_matrix) > 0: full_matrix = full_matrix.sample(frac=1.0).astype(float) self.df = full_matrix self.predictor = predictor self.min_measurements = min_measurements self.multiply_score_by_data_size = multiply_score_by_data_size self.peptides = EncodableSequences.create(full_matrix.index.values) cache_encoding(self.predictor, self.peptides) @staticmethod def ppv(y_true, predictions): df = pandas.DataFrame({"prediction": predictions, "y_true": y_true}) return df.sort_values("prediction", ascending=True)[ : int(y_true.sum()) ].y_true.mean() def usable_for_allele(self, allele): return allele in self.df.columns and ( self.df[allele].sum() >= self.min_measurements) def max_absolute_value(self, allele): if self.multiply_score_by_data_size: return self.df[allele].sum() else: return 1.0 def plan_summary(self, allele): return self.score_function(allele).summary def score_function(self, allele): total_hits = self.df[allele].sum() total_decoys = (self.df[allele] == 0).sum() multiplier = total_hits if self.multiply_score_by_data_size else 1 def score(predictor, additional_metadata_out=None): predictions = predictor.predict( allele=allele, peptides=self.peptides, ) ppv = self.ppv(self.df[allele], predictions) if additional_metadata_out is not None: additional_metadata_out["score_mass_spec_PPV"] = ppv # We additionally compute AUC score. additional_metadata_out["score_mass_spec_AUC"] = roc_auc_score( self.df[allele].values, -1 * predictions) return ppv * multiplier summary = "mass-spec (%d hits / %d decoys)" % (total_hits, total_decoys) return ScoreFunction(score, summary=summary) if __name__ == '__main__': run() ================================================ FILE: mhcflurry/select_pan_allele_models_command.py ================================================ """ Model select class1 pan-allele models. APPROACH: For each training fold, we select at least min and at most max models (where min and max are set by the --{min/max}-models-per-fold argument) using a step-up (forward) selection procedure. The final ensemble is the union of all selected models across all folds. """ import argparse import os import signal import sys import time import traceback import hashlib from pprint import pprint import numpy import pandas import tqdm # progress bar from .class1_affinity_predictor import Class1AffinityPredictor from .encodable_sequences import EncodableSequences from .allele_encoding import AlleleEncoding from .common import configure_logging from .local_parallelism import ( worker_pool_with_gpu_assignments_from_args, add_local_parallelism_args) from .cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) from .regression_target import from_ic50 tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", required=False, help=( "Model selection data CSV. Expected columns: " "allele, peptide, measurement_value")) parser.add_argument( "--models-dir", metavar="DIR", required=True, help="Directory to read models") parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write selected models") parser.add_argument( "--min-models-per-fold", type=int, default=2, metavar="N", help="Min number of models to select per fold") parser.add_argument( "--max-models-per-fold", type=int, default=1000, metavar="N", help="Max number of models to select per fold") parser.add_argument( "--mass-spec-regex", metavar="REGEX", default="mass[- ]spec", help="Regular expression for mass-spec data. Runs on measurement_source col." "Default: %(default)s.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def mse( predictions, actual, inequalities=None, affinities_are_already_01_transformed=False): """ Mean squared error of predictions vs. actual Parameters ---------- predictions : list of float actual : list of float inequalities : list of string (">", "<", or "=") affinities_are_already_01_transformed : boolean Predictions and actual are taken to be nanomolar affinities if affinities_are_already_01_transformed is False, otherwise 0-1 values. Returns ------- float """ if not affinities_are_already_01_transformed: predictions = from_ic50(predictions) actual = from_ic50(actual) deviations = ( numpy.asarray(predictions) - numpy.asarray(actual)) if inequalities is not None: # Must reverse meaning of inequality since we are working with # transformed 0-1 values, which are anti-correlated with the ic50s. # The measurement_inequality column is given in terms of ic50s. inequalities = numpy.asarray(inequalities) deviations[ ((inequalities == "<") & (deviations > 0)) | ( (inequalities == ">") & (deviations < 0)) ] = 0.0 return (deviations ** 2).mean() def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) df = pandas.read_csv(args.data) print("Loaded data: %s" % (str(df.shape))) input_predictor = Class1AffinityPredictor.load( args.models_dir, optimization_level=0) print("Loaded: %s" % input_predictor) alleles = input_predictor.supported_alleles (min_peptide_length, max_peptide_length) = ( input_predictor.supported_peptide_lengths) metadata_dfs = {} fold_cols = [c for c in df if c.startswith("fold_")] num_folds = len(fold_cols) if num_folds <= 1: raise ValueError("Too few folds: ", num_folds) df = df.loc[ (df.peptide.str.len() >= min_peptide_length) & (df.peptide.str.len() <= max_peptide_length) ] print("Subselected to %d-%dmers: %s" % ( min_peptide_length, max_peptide_length, str(df.shape))) print("Num folds: ", num_folds, "fraction included:") print(df[fold_cols].mean()) # Allele names in data are assumed to be already normalized. df = df.loc[df.allele.isin(alleles)] print("Subselected to supported alleles: %s" % str(df.shape)) metadata_dfs["model_selection_data"] = df df["mass_spec"] = df.measurement_source.str.contains( args.mass_spec_regex) def make_train_peptide_hash(sub_df): train_peptide_hash = hashlib.sha1() for peptide in sorted(sub_df.peptide.values): train_peptide_hash.update(peptide.encode()) return train_peptide_hash.hexdigest() folds_to_predictors = dict( (int(col.split("_")[-1]), ( [], make_train_peptide_hash(df.loc[df[col] == 1]))) for col in fold_cols) print(folds_to_predictors) for model in input_predictor.class1_pan_allele_models: training_info = model.fit_info[-1]['training_info'] fold_num = training_info['fold_num'] assert num_folds == training_info['num_folds'] (lst, hash) = folds_to_predictors[fold_num] train_peptide_hash = training_info['train_peptide_hash'] numpy.testing.assert_equal(hash, train_peptide_hash) lst.append(model) work_items = [] for (fold_num, (models, _)) in folds_to_predictors.items(): work_items.append({ 'fold_num': fold_num, 'models': models, 'min_models': args.min_models_per_fold, 'max_models': args.max_models_per_fold, }) GLOBAL_DATA["data"] = df GLOBAL_DATA["input_predictor"] = input_predictor if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") result_predictor = Class1AffinityPredictor( allele_to_sequence=input_predictor.allele_to_sequence, metadata_dataframes=metadata_dfs) serial_run = not args.cluster_parallelism and args.num_jobs == 0 worker_pool = None start = time.time() if serial_run: # Serial run print("Running in serial.") results = (model_select(**item) for item in work_items) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=model_select, work_items=work_items, constant_data=GLOBAL_DATA, result_serialization_method="pickle") else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None print("Processing %d work items in parallel." % len(work_items)) assert not serial_run for item in work_items: item['constant_data'] = GLOBAL_DATA # Parallel run results = worker_pool.imap_unordered( do_model_select_task, work_items, chunksize=1) models_by_fold = {} summary_dfs = [] for result in tqdm.tqdm(results, total=len(work_items)): pprint(result) fold_num = result['fold_num'] (all_models_for_fold, _) = folds_to_predictors[fold_num] models = result['selected_models'] summary_df = result['summary'].copy() summary_df.index = summary_df.index.map( lambda idx: all_models_for_fold[idx]) summary_dfs.append(summary_df) print("Selected %d models for fold %d: %s" % ( len(models), fold_num, result['selected_indices'])) models_by_fold[fold_num] = models for model in models: result_predictor.add_pan_allele_model(model) summary_df = pandas.concat(summary_dfs, ignore_index=False) summary_df["model_config"] = summary_df.index.map(lambda m: m.get_config()) result_predictor.metadata_dataframes["model_selection_summary"] = ( summary_df.reset_index(drop=True)) result_predictor.save(args.out_models_dir) model_selection_time = time.time() - start if worker_pool: worker_pool.close() worker_pool.join() print("Model selection time %0.2f min." % (model_selection_time / 60.0)) print("Predictor [%d models] written to: %s" % ( len(result_predictor.neural_networks), args.out_models_dir)) def do_model_select_task(item, constant_data=GLOBAL_DATA): if 'constant_data' in item: constant_data = item.pop('constant_data') return model_select(constant_data=constant_data, **item) def model_select( fold_num, models, min_models, max_models, constant_data=GLOBAL_DATA): """ Model select for a fold. Parameters ---------- fold_num : int models : list of Class1NeuralNetwork min_models : int max_models : int constant_data : dict Returns ------- dict with keys 'fold_num', 'selected_indices', 'summary' """ full_data = constant_data["data"] input_predictor = constant_data["input_predictor"] df = full_data.loc[ full_data["fold_%d" % fold_num] == 0 ] peptides = EncodableSequences.create(df.peptide.values) alleles = AlleleEncoding( df.allele.values, borrow_from=input_predictor.master_allele_encoding) predictions_df = df.copy() for (i, model) in enumerate(models): predictions_df[i] = from_ic50(model.predict(peptides, alleles)) actual = from_ic50(predictions_df.measurement_value) selected = [] selected_score = 0 remaining_models = set(numpy.arange(len(models))) individual_model_scores = {} while remaining_models and len(selected) < max_models: best_model = None best_model_score = 0 for i in remaining_models: possible_ensemble = list(selected) + [i] predictions = predictions_df[possible_ensemble].mean(axis=1) mse_score = 1 - mse( predictions, actual, inequalities=( predictions_df.measurement_inequality if 'measurement_inequality' in predictions_df.columns else None), affinities_are_already_01_transformed=True) if mse_score >= best_model_score: best_model = i best_model_score = mse_score if not selected: # First iteration. Store individual model scores. individual_model_scores[i] = mse_score if len(selected) < min_models or best_model_score > selected_score: selected_score = best_model_score remaining_models.remove(best_model) selected.append(best_model) else: break assert selected selected_models = [models[i] for i in selected] for model in selected_models: model.clear_allele_representations() summary_df = pandas.Series(individual_model_scores)[ numpy.arange(len(models)) ].to_frame() summary_df.columns = ['mse_score'] return { 'fold_num': fold_num, 'selected_indices': selected, 'selected_models': selected_models, 'summary': summary_df, # indexed by model index } if __name__ == '__main__': run() ================================================ FILE: mhcflurry/select_processing_models_command.py ================================================ """ Model select antigen processing models. APPROACH: For each training fold, we select at least min and at most max models (where min and max are set by the --{min/max}-models-per-fold argument) using a step-up (forward) selection procedure. The final ensemble is the union of all selected models across all folds. AUC is used as the metric. """ import argparse import os import signal import sys import time import traceback import hashlib from pprint import pprint import numpy import pandas from sklearn.metrics import roc_auc_score import tqdm # progress bar from .class1_processing_predictor import Class1ProcessingPredictor from .flanking_encoding import FlankingEncoding from .common import configure_logging from .local_parallelism import ( worker_pool_with_gpu_assignments_from_args, add_local_parallelism_args) from .cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", required=False, help=( "Model selection data CSV. Expected columns: " "peptide, hit, fold_0, ..., fold_N")) parser.add_argument( "--models-dir", metavar="DIR", required=True, help="Directory to read models") parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write selected models") parser.add_argument( "--min-models-per-fold", type=int, default=2, metavar="N", help="Min number of models to select per fold") parser.add_argument( "--max-models-per-fold", type=int, default=1000, metavar="N", help="Max number of models to select per fold") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) df = pandas.read_csv(args.data) print("Loaded data: %s" % (str(df.shape))) input_predictor = Class1ProcessingPredictor.load(args.models_dir) print("Loaded: %s" % input_predictor) metadata_dfs = {} fold_cols = [c for c in df if c.startswith("fold_")] num_folds = len(fold_cols) if num_folds <= 1: raise ValueError("Too few folds: ", num_folds) print("Num folds: ", num_folds, "fraction included:") print(df[fold_cols].mean()) metadata_dfs["model_selection_data"] = df def make_train_peptide_hash(sub_df): train_peptide_hash = hashlib.sha1() for peptide in sorted(sub_df.peptide.values): train_peptide_hash.update(peptide.encode()) return train_peptide_hash.hexdigest() folds_to_predictors = dict( (int(col.split("_")[-1]), ( [], make_train_peptide_hash(df.loc[df[col] == 1]))) for col in fold_cols) print(folds_to_predictors) for model in input_predictor.models: training_info = model.fit_info[-1]['training_info'] fold_num = training_info['fold_num'] assert num_folds == training_info['num_folds'] (lst, hash) = folds_to_predictors[fold_num] train_peptide_hash = training_info['train_peptide_hash'] numpy.testing.assert_equal(hash, train_peptide_hash) lst.append(model) work_items = [] for (fold_num, (models, _)) in folds_to_predictors.items(): work_items.append({ 'fold_num': fold_num, 'models': models, 'min_models': args.min_models_per_fold, 'max_models': args.max_models_per_fold, }) GLOBAL_DATA["data"] = df GLOBAL_DATA["input_predictor"] = input_predictor if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") result_predictor = Class1ProcessingPredictor( models=[], metadata_dataframes=metadata_dfs) serial_run = not args.cluster_parallelism and args.num_jobs == 0 worker_pool = None start = time.time() if serial_run: # Serial run print("Running in serial.") results = (model_select(**item) for item in work_items) elif args.cluster_parallelism: # Run using separate processes HPC cluster. print("Running on cluster.") results = cluster_results_from_args( args, work_function=model_select, work_items=work_items, constant_data=GLOBAL_DATA, result_serialization_method="pickle") else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None print("Processing %d work items in parallel." % len(work_items)) assert not serial_run # Parallel run results = worker_pool.imap_unordered( do_model_select_task, work_items, chunksize=1) models_by_fold = {} summary_dfs = [] for result in tqdm.tqdm(results, total=len(work_items)): pprint(result) fold_num = result['fold_num'] (all_models_for_fold, _) = folds_to_predictors[fold_num] models = [ all_models_for_fold[i] for i in result['selected_indices'] ] summary_df = result['summary'].copy() summary_df.index = summary_df.index.map( lambda idx: all_models_for_fold[idx]) summary_dfs.append(summary_df) print("Selected %d models for fold %d: %s" % ( len(models), fold_num, result['selected_indices'])) models_by_fold[fold_num] = models result_predictor.add_models(models) summary_df = pandas.concat(summary_dfs, ignore_index=False) summary_df["model_config"] = summary_df.index.map(lambda m: m.get_config()) result_predictor.metadata_dataframes["model_selection_summary"] = ( summary_df.reset_index(drop=True)) result_predictor.save(args.out_models_dir) model_selection_time = time.time() - start if worker_pool: worker_pool.close() worker_pool.join() print("Model selection time %0.2f min." % (model_selection_time / 60.0)) print("Predictor [%d models] written to: %s" % ( len(result_predictor.models), args.out_models_dir)) def do_model_select_task(item, constant_data=GLOBAL_DATA): return model_select(constant_data=constant_data, **item) def model_select( fold_num, models, min_models, max_models, constant_data=GLOBAL_DATA): """ Model select for a fold. Parameters ---------- fold_num : int models : list of Class1NeuralNetwork min_models : int max_models : int constant_data : dict Returns ------- dict with keys 'fold_num', 'selected_indices', 'summary' """ full_data = constant_data["data"] df = full_data.loc[ full_data["fold_%d" % fold_num] == 0 ] sequences = FlankingEncoding( peptides=df.peptide.values, n_flanks=df.n_flank.values, c_flanks=df.c_flank.values) predictions_df = df.copy() for (i, model) in enumerate(models): predictions_df[i] = model.predict_encoded(sequences) selected = [] selected_score = 0 remaining_models = set(numpy.arange(len(models))) individual_model_scores = {} selected_in_round = {} ensemble_score_when_selected = {} while remaining_models and len(selected) < max_models: best_model = None best_model_score = 0 for i in remaining_models: possible_ensemble = list(selected) + [i] predictions = predictions_df[possible_ensemble].mean(axis=1) auc_score = roc_auc_score(df.hit.values, predictions.values) if auc_score > best_model_score: best_model = i best_model_score = auc_score if not selected: # First iteration. Store individual model scores. individual_model_scores[i] = auc_score if len(selected) < min_models or best_model_score > selected_score: selected_score = best_model_score remaining_models.remove(best_model) selected.append(best_model) selected_in_round[best_model] = len(selected) ensemble_score_when_selected[best_model] = selected_score else: break assert selected summary_df = pandas.Series(individual_model_scores)[ numpy.arange(len(models)) ].to_frame() summary_df.columns = ['auc_score'] summary_df["selected_in_round"] = pandas.Series(selected_in_round) summary_df["ensemble_score_when_selected"] = pandas.Series( ensemble_score_when_selected) print(summary_df) return { 'fold_num': fold_num, 'selected_indices': selected, 'summary': summary_df, # indexed by model index } if __name__ == '__main__': run() ================================================ FILE: mhcflurry/testing_utils.py ================================================ """ Utilities used in MHCflurry unit tests. """ from . import Class1NeuralNetwork from .common import configure_pytorch def startup(): """ Configure PyTorch for running unit tests. """ configure_pytorch(num_threads=2) def cleanup(): """ Clear PyTorch session and other process-wide resources. """ Class1NeuralNetwork.clear_model_cache() ================================================ FILE: mhcflurry/train_allele_specific_models_command.py ================================================ """ Train Class1 single allele models. """ import argparse import os import signal import sys import time import traceback import random from functools import partial import pandas import yaml from sklearn.metrics.pairwise import cosine_similarity from sklearn.model_selection import StratifiedKFold from .common import normalize_allele_name import tqdm # progress bar from .class1_affinity_predictor import Class1AffinityPredictor from .common import configure_logging from .local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from .hyperparameters import HyperparameterDefaults from .allele_encoding import AlleleEncoding tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} # Note on parallelization: # When running in parallel, avoid using the neural network backend in the main # process. Model loading and inference should happen in worker processes. parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", required=True, help=( "Training data CSV. Expected columns: " "allele, peptide, measurement_value")) parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write models and manifest") parser.add_argument( "--hyperparameters", metavar="FILE.json", required=True, help="JSON or YAML of hyperparameters") parser.add_argument( "--allele", default=None, nargs="+", help="Alleles to train models for. If not specified, all alleles with " "enough measurements will be used.") parser.add_argument( "--min-measurements-per-allele", type=int, metavar="N", default=50, help="Train models for alleles with >=N measurements.") parser.add_argument( "--held-out-fraction-reciprocal", type=int, metavar="N", default=None, help="Hold out 1/N fraction of data (for e.g. subsequent model selection. " "For example, specify 5 to hold out 20 percent of the data.") parser.add_argument( "--held-out-fraction-seed", type=int, metavar="N", default=0, help="Seed for randomizing which measurements are held out. Only matters " "when --held-out-fraction is specified. Default: %(default)s.") parser.add_argument( "--ignore-inequalities", action="store_true", default=False, help="Do not use affinity value inequalities even when present in data") parser.add_argument( "--n-models", type=int, metavar="N", help="Ensemble size, i.e. how many models to train for each architecture. " "If specified here it overrides any 'n_models' specified in the " "hyperparameters.") parser.add_argument( "--max-epochs", type=int, metavar="N", help="Max training epochs. If specified here it overrides any 'max_epochs' " "specified in the hyperparameters.") parser.add_argument( "--allele-sequences", metavar="FILE.csv", help="Allele sequences file. Used for computing allele similarity matrix.") parser.add_argument( "--save-interval", type=float, metavar="N", default=60, help="Write models to disk every N seconds. Only affects parallel runs; " "serial runs write each model to disk as it is trained.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) add_local_parallelism_args(parser) TRAIN_DATA_HYPERPARAMETER_DEFAULTS = HyperparameterDefaults( subset="all", pretrain_min_points=None, ) def run(argv=sys.argv[1:]): global GLOBAL_DATA # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) hyperparameters_lst = yaml.safe_load(open(args.hyperparameters)) assert isinstance(hyperparameters_lst, list), hyperparameters_lst print("Loaded hyperparameters list: %s" % str(hyperparameters_lst)) df = pandas.read_csv(args.data) print("Loaded training data: %s" % (str(df.shape))) df = df.loc[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) if args.ignore_inequalities and "measurement_inequality" in df.columns: print("Dropping measurement_inequality column") del df["measurement_inequality"] # Allele counts are in terms of quantitative data only. allele_counts = ( df.loc[df.measurement_type == "quantitative"].allele.value_counts()) if args.allele: alleles = [normalize_allele_name(a) for a in args.allele] else: alleles = list(allele_counts.loc[ allele_counts > args.min_measurements_per_allele ].index) # Allele names in data are assumed to be already normalized. print("Selected %d/%d alleles: %s" % (len(alleles), df.allele.nunique(), ' '.join(alleles))) df = df.loc[df.allele.isin(alleles)].dropna() if args.held_out_fraction_reciprocal: df = subselect_df_held_out( df, recriprocal_held_out_fraction=args.held_out_fraction_reciprocal, seed=args.held_out_fraction_seed) print("Training data: %s" % (str(df.shape))) GLOBAL_DATA["train_data"] = df GLOBAL_DATA["args"] = args if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") predictor = Class1AffinityPredictor( metadata_dataframes={ 'train_data': df, }) serial_run = args.num_jobs == 0 work_items = [] for (h, hyperparameters) in enumerate(hyperparameters_lst): n_models = None if 'n_models' in hyperparameters: n_models = hyperparameters.pop("n_models") if args.n_models: n_models = args.n_models if not n_models: raise ValueError( "Specify --ensemble-size or n_models hyperparameter") if args.max_epochs: hyperparameters['max_epochs'] = args.max_epochs hyperparameters['train_data'] = ( TRAIN_DATA_HYPERPARAMETER_DEFAULTS.with_defaults( hyperparameters.get('train_data', {}))) if hyperparameters['train_data']['pretrain_min_points'] and ( 'allele_similarity_matrix' not in GLOBAL_DATA): print("Generating allele similarity matrix.") if not args.allele_sequences: parser.error( "Allele sequences required when using pretrain_min_points") allele_sequences = pandas.read_csv( args.allele_sequences, index_col="allele") print("Read %d allele sequences" % len(allele_sequences)) allele_sequences = allele_sequences.loc[ allele_sequences.index.isin(df.allele.unique()) ] print("Allele sequences matching train data: %d" % len(allele_sequences)) blosum_encoding = ( AlleleEncoding( allele_sequences.index.values, allele_sequences.pseudosequence.to_dict()) .fixed_length_vector_encoded_sequences("BLOSUM62")) allele_similarity_matrix = pandas.DataFrame( cosine_similarity( blosum_encoding.reshape((len(allele_sequences), -1))), index=allele_sequences.index.values, columns=allele_sequences.index.values) GLOBAL_DATA['allele_similarity_matrix'] = allele_similarity_matrix print("Computed allele similarity matrix") print(allele_similarity_matrix) for (i, allele) in enumerate(df.allele.unique()): for model_num in range(n_models): work_dict = { 'n_models': 1, 'allele_num': i, 'n_alleles': len(alleles), 'hyperparameter_set_num': h, 'num_hyperparameter_sets': len(hyperparameters_lst), 'allele': allele, 'hyperparameters': hyperparameters, 'verbose': args.verbosity, 'progress_print_interval': None if not serial_run else 5.0, 'predictor': predictor if serial_run else None, 'save_to': args.out_models_dir if serial_run else None, } work_items.append(work_dict) start = time.time() worker_pool = worker_pool_with_gpu_assignments_from_args(args) if worker_pool: print("Processing %d work items in parallel." % len(work_items)) # The estimated time to completion is more accurate if we randomize # the order of the work. random.shuffle(work_items) for item in work_items: item['constant_data'] = GLOBAL_DATA results_generator = worker_pool.imap_unordered( partial(call_wrapped_kwargs, train_model), work_items, chunksize=1) unsaved_predictors = [] last_save_time = time.time() for new_predictor in tqdm.tqdm(results_generator, total=len(work_items)): unsaved_predictors.append(new_predictor) if time.time() > last_save_time + args.save_interval: # Save current predictor. save_start = time.time() new_model_names = predictor.merge_in_place(unsaved_predictors) predictor.save( args.out_models_dir, model_names_to_write=new_model_names, write_metadata=False) print( "Saved predictor (%d models total) including %d new models " "in %0.2f sec to %s" % ( len(predictor.neural_networks), len(new_model_names), time.time() - save_start, args.out_models_dir)) unsaved_predictors = [] last_save_time = time.time() predictor.merge_in_place(unsaved_predictors) else: # Run in serial. In this case, every worker is passed the same predictor, # which it adds models to, so no merging is required. It also saves # as it goes so no saving is required at the end. for _ in tqdm.trange(len(work_items)): item = work_items.pop(0) # want to keep freeing up memory work_predictor = train_model(**item) assert work_predictor is predictor assert not work_items print("Saving final predictor to: %s" % args.out_models_dir) predictor.save(args.out_models_dir) # write all models just to be sure print("Done.") print("*" * 30) training_time = time.time() - start print("Trained affinity predictor with %d networks in %0.2f min." % ( len(predictor.neural_networks), training_time / 60.0)) print("*" * 30) if worker_pool: worker_pool.close() worker_pool.join() print("Predictor written to: %s" % args.out_models_dir) def alleles_by_similarity(allele): global GLOBAL_DATA allele_similarity = GLOBAL_DATA['allele_similarity_matrix'] if allele not in allele_similarity.columns: # Use random alleles print("No similar alleles for: %s" % allele) return [allele] + list( allele_similarity.columns.to_series().sample(frac=1.0)) return ( allele_similarity[allele] + ( allele_similarity.index == allele) # force specified allele first ).sort_values(ascending=False).index.tolist() def train_model( n_models, allele_num, n_alleles, hyperparameter_set_num, num_hyperparameter_sets, allele, hyperparameters, verbose, progress_print_interval, predictor, save_to, constant_data=GLOBAL_DATA): if predictor is None: predictor = Class1AffinityPredictor() pretrain_min_points = hyperparameters['train_data']['pretrain_min_points'] data = constant_data["train_data"] subset = hyperparameters.get("train_data", {}).get("subset", "all") if subset == "quantitative": data = data.loc[ data.measurement_type == "quantitative" ] elif subset == "all": pass else: raise ValueError("Unsupported subset: %s" % subset) data_size_by_allele = data.allele.value_counts() if pretrain_min_points: similar_alleles = alleles_by_similarity(allele) alleles = [] while not alleles or data_size_by_allele.loc[alleles].sum() < pretrain_min_points: alleles.append(similar_alleles.pop(0)) data = data.loc[data.allele.isin(alleles)] assert len(data) >= pretrain_min_points, (len(data), pretrain_min_points) train_rounds = (data.allele == allele).astype(int).values else: train_rounds = None data = data.loc[data.allele == allele] progress_preamble = ( "[%2d / %2d hyperparameters] " "[%4d / %4d alleles] %s " % ( hyperparameter_set_num + 1, num_hyperparameter_sets, allele_num + 1, n_alleles, allele)) train_data = data.sample(frac=1.0) predictor.fit_allele_specific_predictors( n_models=n_models, architecture_hyperparameters_list=[hyperparameters], allele=allele, peptides=train_data.peptide.values, affinities=train_data.measurement_value.values, inequalities=( train_data.measurement_inequality.values if "measurement_inequality" in train_data.columns else None), train_rounds=train_rounds, models_dir_for_save=save_to, progress_preamble=progress_preamble, progress_print_interval=progress_print_interval, verbose=verbose) return predictor def subselect_df_held_out(df, recriprocal_held_out_fraction=10, seed=0): df = df.copy() df["allele_peptide"] = df.allele + "_" + df.peptide kf = StratifiedKFold( n_splits=recriprocal_held_out_fraction, shuffle=True, random_state=seed) # Stratify by both allele and binder vs. nonbinder. df["key"] = [ "%s_%s" % ( row.allele, "binder" if row.measurement_value <= 500 else "nonbinder") for (_, row) in df.iterrows() ] (train, test) = next(kf.split(df, df.key)) selected_allele_peptides = df.iloc[train].allele_peptide.unique() result_df = df.loc[ df.allele_peptide.isin(selected_allele_peptides) ] del result_df["allele_peptide"] return result_df if __name__ == '__main__': run() ================================================ FILE: mhcflurry/train_pan_allele_models_command.py ================================================ """ Train Class1 pan-allele models. """ import argparse import os from os.path import join import signal import sys import time import traceback import random import pprint import hashlib import pickle import uuid from functools import partial import numpy import pandas import yaml import tqdm # progress bar from .class1_affinity_predictor import Class1AffinityPredictor from .class1_neural_network import Class1NeuralNetwork from .common import configure_logging, normalize_allele_name from .local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from .cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) from .allele_encoding import AlleleEncoding from .encodable_sequences import EncodableSequences tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} # Note on parallelization: # When running in parallel, avoid using the neural network backend in the main # process. Model loading and inference should happen in worker processes. parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", help=( "Training data CSV. Expected columns: " "allele, peptide, measurement_value")) parser.add_argument( "--pretrain-data", metavar="FILE.csv", help=( "Pre-training data CSV. Expected columns: " "allele, peptide, measurement_value")) parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write models and manifest") parser.add_argument( "--hyperparameters", metavar="FILE.json", help="JSON or YAML of hyperparameters") parser.add_argument( "--held-out-measurements-per-allele-fraction-and-max", type=float, metavar="X", nargs=2, default=[0.25, 100], help="Fraction of measurements per allele to hold out, and maximum number") parser.add_argument( "--ignore-inequalities", action="store_true", default=False, help="Do not use affinity value inequalities even when present in data") parser.add_argument( "--num-folds", type=int, default=4, metavar="N", help="Number of training folds.") parser.add_argument( "--num-replicates", type=int, metavar="N", default=1, help="Number of replicates per (architecture, fold) pair to train.") parser.add_argument( "--max-epochs", type=int, metavar="N", help="Max training epochs. If specified here it overrides any 'max_epochs' " "specified in the hyperparameters.") parser.add_argument( "--allele-sequences", metavar="FILE.csv", help="Allele sequences file.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) parser.add_argument( "--debug", action="store_true", default=False, help="Launch python debugger on error") parser.add_argument( "--continue-incomplete", action="store_true", default=False, help="Continue training models from an incomplete training run. If this is " "specified then the only required argument is --out-models-dir") parser.add_argument( "--only-initialize", action="store_true", default=False, help="Do not actually train models. The initialized run can be continued " "later with --continue-incomplete.") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def assign_folds(df, num_folds, held_out_fraction, held_out_max): """ Split training data into multple test/train pairs, which we refer to as folds. Note that a given data point may be assigned to multiple test or train sets; these folds are NOT a non-overlapping partition as used in cross validation. A fold is defined by a boolean value for each data point, indicating whether it is included in the training data for that fold. If it's not in the training data, then it's in the test data. Folds are balanced in terms of allele content. Parameters ---------- df : pandas.DataFrame training data num_folds : int held_out_fraction : float Fraction of data to hold out as test data in each fold held_out_max For a given allele, do not hold out more than held_out_max number of data points in any fold. Returns ------- pandas.DataFrame index is same as df.index, columns are "fold_0", ... "fold_N" giving whether the data point is in the training data for the fold """ result_df = pandas.DataFrame(index=df.index) for fold in range(num_folds): result_df["fold_%d" % fold] = True for (allele, sub_df) in df.groupby("allele"): medians = sub_df.groupby("peptide").measurement_value.median() low_peptides = medians[medians < medians.median()].index.values high_peptides = medians[medians >= medians.median()].index.values held_out_count = int( min(len(medians) * held_out_fraction, held_out_max)) held_out_peptides = set() if held_out_count == 0: pass elif held_out_count < 2: held_out_peptides = set( medians.index.to_series().sample(n=held_out_count)) else: held_out_low_count = min( len(low_peptides), int(held_out_count / 2)) held_out_high_count = min( len(high_peptides), held_out_count - held_out_low_count) held_out_low = pandas.Series(low_peptides).sample( n=held_out_low_count) if held_out_low_count else set() held_out_high = pandas.Series(high_peptides).sample( n=held_out_high_count) if held_out_high_count else set() held_out_peptides = set(held_out_low).union(set(held_out_high)) result_df.loc[ sub_df.index[sub_df.peptide.isin(held_out_peptides)], "fold_%d" % fold ] = False print("Training points per fold") print(result_df.sum()) print("Test points per fold") print((~result_df).sum()) return result_df def pretrain_data_iterator( filename, master_allele_encoding, peptides_per_chunk=1024): """ Step through a CSV file giving predictions for a large number of peptides (rows) and alleles (columns). Parameters ---------- filename : string master_allele_encoding : AlleleEncoding peptides_per_chunk : int Returns ------- Generator of (AlleleEncoding, EncodableSequences, float affinities) tuples """ empty = pandas.read_csv(filename, index_col=0, nrows=0) empty.columns = empty.columns.map(normalize_allele_name) print("Pretrain alleles available: ", *empty.columns.values) usable_alleles = [ c for c in empty.columns if c in master_allele_encoding.allele_to_sequence ] print("Using %d / %d alleles" % (len(usable_alleles), len(empty.columns))) print("Skipped alleles: ", [ c for c in empty.columns if c not in master_allele_encoding.allele_to_sequence ]) allele_encoding = AlleleEncoding( numpy.tile(usable_alleles, peptides_per_chunk), borrow_from=master_allele_encoding) while True: synthetic_iter = pandas.read_csv( filename, index_col=0, chunksize=peptides_per_chunk) for (k, df) in enumerate(synthetic_iter): if len(df) != peptides_per_chunk: continue df.columns = empty.columns df = df[usable_alleles] encodable_peptides = EncodableSequences( numpy.repeat( df.index.values, len(usable_alleles))) yield (allele_encoding, encodable_peptides, df.stack().values) def run(argv=sys.argv[1:]): # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) if args.debug: try: return main(args) except Exception as e: print(e) import ipdb # pylint: disable=import-error ipdb.set_trace() raise else: return main(args) def main(args): print("Arguments:") print(args) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) if not args.continue_incomplete: initialize_training(args) if not args.only_initialize: train_models(args) def initialize_training(args): required_arguments = [ "data", "out_models_dir", "hyperparameters", "num_folds", ] for arg in required_arguments: if getattr(args, arg) is None: parser.error("Missing required arg: %s" % arg) print("Initializing training.") hyperparameters_lst = yaml.safe_load(open(args.hyperparameters)) assert isinstance(hyperparameters_lst, list) print("Loaded hyperparameters list:") pprint.pprint(hyperparameters_lst) allele_sequences = pandas.read_csv( args.allele_sequences, index_col=0).iloc[:,0] df = pandas.read_csv(args.data) print("Loaded training data: %s" % (str(df.shape))) df = df.loc[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) df = df.loc[~df.measurement_value.isnull()] print("Dropped NaNs: %s" % (str(df.shape))) df = df.loc[df.allele.isin(allele_sequences.index)] print("Subselected to alleles with sequences: %s" % (str(df.shape))) print("Data inequalities:") print(df.measurement_inequality.value_counts()) if args.ignore_inequalities and "measurement_inequality" in df.columns: print("Dropping measurement_inequality column") del df["measurement_inequality"] # Allele names in data are assumed to be already normalized. print("Training data: %s" % (str(df.shape))) (held_out_fraction, held_out_max) = ( args.held_out_measurements_per_allele_fraction_and_max) folds_df = assign_folds( df=df, num_folds=args.num_folds, held_out_fraction=held_out_fraction, held_out_max=held_out_max) allele_sequences_in_use = allele_sequences[ allele_sequences.index.isin(df.allele) ] print("Will use %d / %d allele sequences" % ( len(allele_sequences_in_use), len(allele_sequences))) # All alleles, not just those with training data. full_allele_encoding = AlleleEncoding( alleles=allele_sequences.index.values, allele_to_sequence=allele_sequences.to_dict() ) # Only alleles with training data. For efficiency we perform model training # using only these alleles in the neural network embedding layer. allele_encoding = AlleleEncoding( alleles=allele_sequences_in_use.index.values, allele_to_sequence=allele_sequences_in_use.to_dict()) if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") predictor = Class1AffinityPredictor( allele_to_sequence=allele_encoding.allele_to_sequence, metadata_dataframes={ 'train_data': pandas.merge( df, folds_df, left_index=True, right_index=True) }) work_items = [] for (h, hyperparameters) in enumerate(hyperparameters_lst): if 'n_models' in hyperparameters: raise ValueError("n_models is unsupported") if args.max_epochs: hyperparameters['max_epochs'] = args.max_epochs if hyperparameters.get("train_data", {}).get("pretrain", False): if not args.pretrain_data: raise ValueError("--pretrain-data is required") for fold in range(args.num_folds): for replicate in range(args.num_replicates): work_dict = { 'work_item_name': str(uuid.uuid4()), 'architecture_num': h, 'num_architectures': len(hyperparameters_lst), 'fold_num': fold, 'num_folds': args.num_folds, 'replicate_num': replicate, 'num_replicates': args.num_replicates, 'hyperparameters': hyperparameters, 'pretrain_data_filename': args.pretrain_data, } work_items.append(work_dict) training_init_info = {} training_init_info["train_data"] = df training_init_info["folds_df"] = folds_df training_init_info["allele_encoding"] = allele_encoding training_init_info["full_allele_encoding"] = full_allele_encoding training_init_info["work_items"] = work_items # Save empty predictor (for metadata) predictor.save(args.out_models_dir) # Write training_init_info. with open(join(args.out_models_dir, "training_init_info.pkl"), "wb") as fd: pickle.dump(training_init_info, fd, protocol=pickle.HIGHEST_PROTOCOL) print("Done initializing training.") def train_models(args): global GLOBAL_DATA print("Beginning training.") predictor = Class1AffinityPredictor.load( args.out_models_dir, optimization_level=0) print("Loaded predictor with %d networks" % len(predictor.neural_networks)) with open(join(args.out_models_dir, "training_init_info.pkl"), "rb") as fd: GLOBAL_DATA.update(pickle.load(fd)) print("Loaded training init info.") all_work_items = GLOBAL_DATA["work_items"] complete_work_item_names = [ network.fit_info[-1]["training_info"]["work_item_name"] for network in predictor.neural_networks ] work_items = [ item for item in all_work_items if item["work_item_name"] not in complete_work_item_names ] print("Found %d work items, of which %d are incomplete and will run now." % ( len(all_work_items), len(work_items))) serial_run = not args.cluster_parallelism and args.num_jobs == 0 # The estimated time to completion is more accurate if we randomize # the order of the work. random.shuffle(work_items) for (work_item_num, item) in enumerate(work_items): item['work_item_num'] = work_item_num item['num_work_items'] = len(work_items) item['progress_print_interval'] = 60.0 if not serial_run else 5.0 item['predictor'] = predictor if serial_run else None item['save_to'] = args.out_models_dir if serial_run else None item['verbose'] = args.verbosity if args.pretrain_data: item['pretrain_data_filename'] = args.pretrain_data start = time.time() worker_pool = None if serial_run: # Run in serial. Every worker is passed the same predictor, # which it adds models to, so no merging is required. It also saves # as it goes so no saving is required at the end. print("Processing %d work items in serial." % len(work_items)) for _ in tqdm.trange(len(work_items)): item = work_items.pop(0) # want to keep freeing up memory work_predictor = train_model(**item) assert work_predictor is predictor assert not work_items results_generator = None elif args.cluster_parallelism: # Run using separate processes HPC cluster. results_generator = cluster_results_from_args( args, work_function=train_model, work_items=work_items, constant_data=GLOBAL_DATA, result_serialization_method="save_predictor") else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None print("Processing %d work items in parallel." % len(work_items)) assert not serial_run for item in work_items: item['constant_data'] = GLOBAL_DATA results_generator = worker_pool.imap_unordered( partial(call_wrapped_kwargs, train_model), work_items, chunksize=1) if results_generator: for new_predictor in tqdm.tqdm(results_generator, total=len(work_items)): save_start = time.time() (new_model_name,) = predictor.merge_in_place([new_predictor]) predictor.save( args.out_models_dir, model_names_to_write=[new_model_name], write_metadata=False) print( "Saved predictor (%d models total) with 1 new models" "in %0.2f sec to %s" % ( len(predictor.neural_networks), time.time() - save_start, args.out_models_dir)) # We want the final predictor to support all alleles with sequences, not # just those we actually used for model training. predictor.allele_to_sequence = ( GLOBAL_DATA['full_allele_encoding'].allele_to_sequence) predictor.clear_cache() predictor.save(args.out_models_dir) print("Done.") print("*" * 30) training_time = time.time() - start print("Trained affinity predictor with %d networks in %0.2f min." % ( len(predictor.neural_networks), training_time / 60.0)) print("*" * 30) if worker_pool: worker_pool.close() worker_pool.join() print("Predictor written to: %s" % args.out_models_dir) def train_model( work_item_name, work_item_num, num_work_items, architecture_num, num_architectures, fold_num, num_folds, replicate_num, num_replicates, hyperparameters, pretrain_data_filename, verbose, progress_print_interval, predictor, save_to, constant_data=GLOBAL_DATA): df = constant_data["train_data"] folds_df = constant_data["folds_df"] allele_encoding = constant_data["allele_encoding"] if predictor is None: predictor = Class1AffinityPredictor( allele_to_sequence=allele_encoding.allele_to_sequence) numpy.testing.assert_equal(len(df), len(folds_df)) train_data = df.loc[ folds_df["fold_%d" % fold_num] ].sample(frac=1.0) train_peptides = EncodableSequences(train_data.peptide.values) train_alleles = AlleleEncoding( train_data.allele.values, borrow_from=allele_encoding) progress_preamble = ( "[task %2d / %2d]: " "[%2d / %2d folds] " "[%2d / %2d architectures] " "[%4d / %4d replicates] " % ( work_item_num + 1, num_work_items, fold_num + 1, num_folds, architecture_num + 1, num_architectures, replicate_num + 1, num_replicates)) print("%s [pid %d]. Hyperparameters:" % (progress_preamble, os.getpid())) pprint.pprint(hyperparameters) train_params = dict(hyperparameters.get("train_data", {})) def get_train_param(param, default): if param in train_params: result = train_params.pop(param) if verbose: print("Train param", param, "=", result) else: result = default if verbose: print("Train param", param, "=", result, "[default]") return result def progress_callback(): import torch if torch.cuda.is_available(): mem = torch.cuda.memory_allocated() / 10**9 print("Current used GPU memory: ", mem, "gb") if get_train_param("pretrain", False): pretrain_patience = get_train_param("pretrain_patience", 10) pretrain_min_delta = get_train_param("pretrain_min_delta", 0.0) pretrain_steps_per_epoch = get_train_param( "pretrain_steps_per_epoch", 10) pretrain_max_epochs = get_train_param("pretrain_max_epochs", 1000) pretrain_min_epochs = get_train_param("pretrain_min_epochs", 0) pretrain_peptides_per_step = get_train_param( "pretrain_peptides_per_step", 1024) max_val_loss = get_train_param("pretrain_max_val_loss", None) if verbose: print("Unused train params", train_params) attempt = 0 while True: attempt += 1 print("Pre-training attempt %d" % attempt) if attempt > 10: print("Too many pre-training attempts! Stopping pretraining.") break model = Class1NeuralNetwork(**hyperparameters) assert model.network() is None generator = pretrain_data_iterator( pretrain_data_filename, allele_encoding, peptides_per_chunk=pretrain_peptides_per_step) model.fit_generator( generator, validation_peptide_encoding=train_peptides, validation_affinities=train_data.measurement_value.values, validation_allele_encoding=train_alleles, validation_inequalities=train_data.measurement_inequality.values, patience=pretrain_patience, min_delta=pretrain_min_delta, steps_per_epoch=pretrain_steps_per_epoch, epochs=pretrain_max_epochs, min_epochs=pretrain_min_epochs, verbose=verbose, progress_callback=progress_callback, progress_preamble=progress_preamble + "PRETRAIN", progress_print_interval=progress_print_interval, ) model.fit_info[-1].setdefault( "training_info", {})["pretrain_attempt"] = attempt if not max_val_loss: break final_val_loss = model.fit_info[-1]["val_loss"][-1] if final_val_loss >= max_val_loss: print("Val loss %f >= max val loss %f. Pre-training again." % ( final_val_loss, max_val_loss)) else: print("Val loss %f < max val loss %f. Done pre-training." % ( final_val_loss, max_val_loss)) break # Use a smaller learning rate for training on real data learning_rate = model.fit_info[-1]["learning_rate"] model.hyperparameters['learning_rate'] = learning_rate / 10 else: model = Class1NeuralNetwork(**hyperparameters) model.fit( peptides=train_peptides, affinities=train_data.measurement_value.values, allele_encoding=train_alleles, inequalities=( train_data.measurement_inequality.values if "measurement_inequality" in train_data.columns else None), progress_preamble=progress_preamble, progress_callback=progress_callback, progress_print_interval=progress_print_interval, verbose=verbose) # Save model-specific training info train_peptide_hash = hashlib.sha1() for peptide in sorted(train_data.peptide.values): train_peptide_hash.update(peptide.encode()) model.fit_info[-1].setdefault("training_info", {}).update({ "fold_num": fold_num, "num_folds": num_folds, "replicate_num": replicate_num, "num_replicates": num_replicates, "architecture_num": architecture_num, "num_architectures": num_architectures, "train_peptide_hash": train_peptide_hash.hexdigest(), "work_item_name": work_item_name, }) numpy.testing.assert_equal( predictor.manifest_df.shape[0], len(predictor.class1_pan_allele_models)) predictor.add_pan_allele_model(model, models_dir_for_save=save_to) numpy.testing.assert_equal( predictor.manifest_df.shape[0], len(predictor.class1_pan_allele_models)) predictor.clear_cache() # Delete the network to release memory model.clear_allele_representations() model.update_network_description() # save weights and config model._network = None # release network to free memory return predictor if __name__ == '__main__': run() ================================================ FILE: mhcflurry/train_presentation_models_command.py ================================================ """ Train Class1 presentation models. """ import argparse import os import signal import sys import time import traceback import pandas import tqdm # progress bar from .class1_processing_predictor import Class1ProcessingPredictor from .class1_affinity_predictor import Class1AffinityPredictor from .class1_presentation_predictor import Class1PresentationPredictor from .common import configure_logging tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", help="Training data CSV. Expected columns: peptide, n_flank, c_flank, hit") parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write models and manifest") parser.add_argument( "--affinity-predictor", metavar="DIR", required=True, help="Affinity predictor models dir") parser.add_argument( "--processing-predictor-with-flanks", metavar="DIR", required=True, help="Processing predictor with flanks") parser.add_argument( "--processing-predictor-without-flanks", metavar="DIR", required=True, help="Processing predictor without flanks") parser.add_argument( "--verbosity", type=int, help="Default: %(default)s", default=1) parser.add_argument( "--debug", action="store_true", default=False, help="Launch python debugger on error") parser.add_argument( "--hla-column", default="hla", help="Column in data giving space-separated MHC I alleles") parser.add_argument( "--target-column", default="hit", help="Column in data giving hit (1) vs decoy (0)") def run(argv=sys.argv[1:]): # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) if args.debug: try: return main(args) except Exception as e: print(e) import ipdb # pylint: disable=import-error ipdb.set_trace() raise else: return main(args) def main(args): print("Arguments:") print(args) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) df = pandas.read_csv(args.data) print("Loaded training data: %s" % (str(df.shape))) df = df.loc[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) df["experiment_id"] = df[args.hla_column] experiment_to_alleles = dict(( key, key.split()) for key in df.experiment_id.unique()) if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") affinity_predictor = Class1AffinityPredictor.load( args.affinity_predictor, optimization_level=0) processing_predictor_with_flanks = Class1ProcessingPredictor.load( args.processing_predictor_with_flanks) processing_predictor_without_flanks = Class1ProcessingPredictor.load( args.processing_predictor_without_flanks) print("Loaded affinity predictor", affinity_predictor) print( "Loaded processing_predictor_with_flanks", processing_predictor_with_flanks) print("Loaded processing_predictor_without_flanks", processing_predictor_without_flanks) predictor = Class1PresentationPredictor( affinity_predictor=affinity_predictor, processing_predictor_with_flanks=processing_predictor_with_flanks, processing_predictor_without_flanks=processing_predictor_without_flanks) # We want to predict using an optimized Class1AffinityPredictor but # save the presentation models using an un-optimized Class1AffinityPredictor, # since the optimized (merged) network is only needed at inference time. print("Before fit: saving affinity and processing predictors.") predictor.save( args.out_models_dir, write_affinity_predictor = True, write_processing_predictor = True, write_weights = False, write_percent_ranks = False, write_info = False, write_metdata = False) print("Done writing: ", args.out_models_dir) print("Optimizing affinity predictor.") optimized = affinity_predictor.optimize() print("Optimization performed: ", optimized) print("Fitting.") start = time.time() predictor.fit( targets=df[args.target_column].values, peptides=df.peptide.values, alleles=experiment_to_alleles, sample_names=df.experiment_id, n_flanks=df.n_flank.values, c_flanks=df.c_flank.values, verbose=args.verbosity) print("Done fitting in", time.time() - start, "seconds") print("Saving weights and metadata.") predictor.save( args.out_models_dir, write_affinity_predictor = False, write_processing_predictor = False, write_weights = True, write_percent_ranks = True, write_info = True, write_metdata = True) print("Wrote", args.out_models_dir) if __name__ == '__main__': run() ================================================ FILE: mhcflurry/train_processing_models_command.py ================================================ """ Train Class1 processing models. """ import argparse import os from os.path import join import signal import sys import time import traceback import random import pprint import hashlib import pickle import uuid from functools import partial import numpy import pandas import yaml import tqdm # progress bar from .class1_processing_predictor import Class1ProcessingPredictor from .class1_processing_neural_network import Class1ProcessingNeuralNetwork from .common import configure_logging from .local_parallelism import ( add_local_parallelism_args, worker_pool_with_gpu_assignments_from_args, call_wrapped_kwargs) from .cluster_parallelism import ( add_cluster_parallelism_args, cluster_results_from_args) tqdm.monitor_interval = 0 # see https://github.com/tqdm/tqdm/issues/481 # To avoid pickling large matrices to send to child processes when running in # parallel, we use this global variable as a place to store data. Data that is # stored here before creating the thread pool will be inherited to the child # processes upon fork() call, allowing us to share large data with the workers # via shared memory. GLOBAL_DATA = {} # Note on parallelization: # When running in parallel, avoid using the neural network backend in the main # process. Model loading and inference should happen in worker processes. parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--data", metavar="FILE.csv", help="Training data CSV. Expected columns: peptide, n_flank, c_flank, hit") parser.add_argument( "--out-models-dir", metavar="DIR", required=True, help="Directory to write models and manifest") parser.add_argument( "--hyperparameters", metavar="FILE.json", help="JSON or YAML of hyperparameters") parser.add_argument( "--held-out-samples", type=int, metavar="N", default=10, help="Number of experiments to hold out per fold") parser.add_argument( "--num-folds", type=int, default=4, metavar="N", help="Number of training folds.") parser.add_argument( "--num-replicates", type=int, metavar="N", default=1, help="Number of replicates per (architecture, fold) pair to train.") parser.add_argument( "--max-epochs", type=int, metavar="N", help="Max training epochs. If specified here it overrides any 'max_epochs' " "specified in the hyperparameters.") parser.add_argument( "--verbosity", type=int, help="Verbosity. Default: %(default)s", default=0) parser.add_argument( "--debug", action="store_true", default=False, help="Launch python debugger on error") parser.add_argument( "--continue-incomplete", action="store_true", default=False, help="Continue training models from an incomplete training run. If this is " "specified then the only required argument is --out-models-dir") parser.add_argument( "--only-initialize", action="store_true", default=False, help="Do not actually train models. The initialized run can be continued " "later with --continue-incomplete.") add_local_parallelism_args(parser) add_cluster_parallelism_args(parser) def assign_folds(df, num_folds, held_out_samples): """ Split training data into mulitple test/train pairs, which we refer to as folds. Note that a given data point may be assigned to multiple test or train sets; these folds are NOT a non-overlapping partition as used in cross validation. A fold is defined by a boolean value for each data point, indicating whether it is included in the training data for that fold. If it's not in the training data, then it's in the test data. Parameters ---------- df : pandas.DataFrame training data num_folds : int held_out_samples : int Returns ------- pandas.DataFrame index is same as df.index, columns are "fold_0", ... "fold_N" giving whether the data point is in the training data for the fold """ result_df = pandas.DataFrame(index=df.index) sample_names = pandas.Series(df.sample_id.unique()) for fold in range(num_folds): samples_to_exclude = sample_names.sample(n=held_out_samples) result_df["fold_%d" % fold] = ~df.sample_id.isin(samples_to_exclude) print("Fold", fold, "holding out samples", *samples_to_exclude) print("Training points per fold") print(result_df.sum()) print("Test points per fold") print((~result_df).sum()) return result_df def run(argv=sys.argv[1:]): # On sigusr1 print stack trace print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) args = parser.parse_args(argv) if args.debug: try: return main(args) except Exception as e: print(e) import ipdb # pylint: disable=import-error ipdb.set_trace() raise else: return main(args) def main(args): print("Arguments:") print(args) args.out_models_dir = os.path.abspath(args.out_models_dir) configure_logging(verbose=args.verbosity > 1) if not args.continue_incomplete: initialize_training(args) if not args.only_initialize: train_models(args) def initialize_training(args): required_arguments = [ "data", "out_models_dir", "hyperparameters", "num_folds", ] for arg in required_arguments: if getattr(args, arg) is None: parser.error("Missing required arg: %s" % arg) print("Initializing training.") hyperparameters_lst = yaml.unsafe_load(open(args.hyperparameters)) assert isinstance(hyperparameters_lst, list) print("Loaded hyperparameters list:") if len(hyperparameters_lst) > 7: pprint.pprint(hyperparameters_lst[:3]) print("...") pprint.pprint(hyperparameters_lst[-3:]) else: pprint.pprint(hyperparameters_lst) print("Length of hyperparameters list: %d" % (len(hyperparameters_lst))) df = pandas.read_csv(args.data) print("Loaded training data: %s" % (str(df.shape))) df = df.loc[ (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] print("Subselected to 8-15mers: %s" % (str(df.shape))) folds_df = assign_folds( df=df, num_folds=args.num_folds, held_out_samples=args.held_out_samples) if not os.path.exists(args.out_models_dir): print("Attempting to create directory: %s" % args.out_models_dir) os.mkdir(args.out_models_dir) print("Done.") predictor = Class1ProcessingPredictor( models=[], metadata_dataframes={ 'train_data': pandas.merge( df, folds_df, left_index=True, right_index=True) }) work_items = [] for (h, hyperparameters) in enumerate(hyperparameters_lst): if args.max_epochs: hyperparameters['max_epochs'] = args.max_epochs for fold in range(args.num_folds): for replicate in range(args.num_replicates): work_dict = { 'work_item_name': str(uuid.uuid4()), 'architecture_num': h, 'num_architectures': len(hyperparameters_lst), 'fold_num': fold, 'num_folds': args.num_folds, 'replicate_num': replicate, 'num_replicates': args.num_replicates, 'hyperparameters': hyperparameters, } work_items.append(work_dict) training_init_info = {} training_init_info["train_data"] = df training_init_info["folds_df"] = folds_df training_init_info["work_items"] = work_items # Save empty predictor (for metadata) predictor.save(args.out_models_dir) # Write training_init_info. with open(join(args.out_models_dir, "training_init_info.pkl"), "wb") as fd: pickle.dump(training_init_info, fd, protocol=pickle.HIGHEST_PROTOCOL) print("Done initializing training.") def train_models(args): global GLOBAL_DATA print("Beginning training.") predictor = Class1ProcessingPredictor.load(args.out_models_dir) print("Loaded predictor with %d networks" % len(predictor.models)) with open(join(args.out_models_dir, "training_init_info.pkl"), "rb") as fd: GLOBAL_DATA.update(pickle.load(fd)) print("Loaded training init info.") all_work_items = GLOBAL_DATA["work_items"] complete_work_item_names = [ network.fit_info[-1]["training_info"]["work_item_name"] for network in predictor.models ] work_items = [ item for item in all_work_items if item["work_item_name"] not in complete_work_item_names ] print("Found %d work items, of which %d are incomplete and will run now." % ( len(all_work_items), len(work_items))) serial_run = not args.cluster_parallelism and args.num_jobs == 0 # The estimated time to completion is more accurate if we randomize # the order of the work. random.shuffle(work_items) for (work_item_num, item) in enumerate(work_items): item['work_item_num'] = work_item_num item['num_work_items'] = len(work_items) item['progress_print_interval'] = 60.0 if not serial_run else 5.0 item['predictor'] = predictor if serial_run else None item['save_to'] = args.out_models_dir if serial_run else None item['verbose'] = args.verbosity start = time.time() worker_pool = None if serial_run: # Run in serial. Every worker is passed the same predictor, # which it adds models to, so no merging is required. It also saves # as it goes so no saving is required at the end. print("Processing %d work items in serial." % len(work_items)) for _ in tqdm.trange(len(work_items)): item = work_items.pop(0) # want to keep freeing up memory work_predictor = train_model(**item) assert work_predictor is predictor pprint.pprint(predictor.models[-1].fit_info[-1]['training_info']) assert not work_items results_generator = None elif args.cluster_parallelism: # Run using separate processes HPC cluster. results_generator = cluster_results_from_args( args, work_function=train_model, work_items=work_items, constant_data=GLOBAL_DATA, result_serialization_method="pickle") else: worker_pool = worker_pool_with_gpu_assignments_from_args(args) print("Worker pool", worker_pool) assert worker_pool is not None print("Processing %d work items in parallel." % len(work_items)) assert not serial_run for item in work_items: item['constant_data'] = GLOBAL_DATA results_generator = worker_pool.imap_unordered( partial(call_wrapped_kwargs, train_model), work_items, chunksize=1) if results_generator: for new_predictor in tqdm.tqdm(results_generator, total=len(work_items)): save_start = time.time() (model,) = new_predictor.models pprint.pprint(model.fit_info[-1]['training_info']) (new_model_name,) = predictor.add_models(new_predictor.models) predictor.save( args.out_models_dir, model_names_to_write=[new_model_name], write_metadata=False) print( "Saved predictor (%d models total) with 1 new models" "in %0.2f sec to %s" % ( len(predictor.models), time.time() - save_start, args.out_models_dir)) predictor.save(args.out_models_dir) print("Done saving.") print("*" * 30) training_time = time.time() - start print("Trained affinity predictor with %d networks in %0.2f min." % ( len(predictor.models), training_time / 60.0)) print("*" * 30) if worker_pool: worker_pool.close() worker_pool.join() print("Predictor written to: %s" % args.out_models_dir) def train_model( work_item_name, work_item_num, num_work_items, architecture_num, num_architectures, fold_num, num_folds, replicate_num, num_replicates, hyperparameters, verbose, progress_print_interval, predictor, save_to, constant_data=GLOBAL_DATA): from sklearn.metrics import roc_auc_score from mhcflurry.flanking_encoding import FlankingEncoding df = constant_data["train_data"] folds_df = constant_data["folds_df"] if predictor is None: predictor = Class1ProcessingPredictor(models=[]) numpy.testing.assert_equal(len(df), len(folds_df)) train_data = df.loc[ folds_df["fold_%d" % fold_num] ].sample(frac=1.0).copy() test_data = df.loc[~folds_df["fold_%d" % fold_num]].copy() print("Training on %d points (%d points held-out)." % ( len(train_data), len(test_data))) progress_preamble = ( "[task %2d / %2d]: " "[%2d / %2d folds] " "[%2d / %2d architectures] " "[%4d / %4d replicates] " % ( work_item_num + 1, num_work_items, fold_num + 1, num_folds, architecture_num + 1, num_architectures, replicate_num + 1, num_replicates)) print("%s [pid %d]. Hyperparameters:" % (progress_preamble, os.getpid())) pprint.pprint(hyperparameters) model = Class1ProcessingNeuralNetwork(**hyperparameters) model.fit( sequences=FlankingEncoding( peptides=train_data.peptide.values, n_flanks=train_data.n_flank.values, c_flanks=train_data.c_flank.values), targets=train_data.hit.values, progress_preamble=progress_preamble, progress_print_interval=progress_print_interval, verbose=verbose) # Save model-specific training info train_peptide_hash = hashlib.sha1() for peptide in sorted(train_data.peptide.values): train_peptide_hash.update(peptide.encode()) # Compute AUC on held-out data just so it can be logged. for some_df in [train_data, test_data]: some_df["prediction"] = model.predict( peptides=some_df.peptide.values, n_flanks=some_df.n_flank.values, c_flanks=some_df.c_flank.values) train_auc = roc_auc_score( train_data.hit.values, train_data.prediction.values) test_auc = roc_auc_score(test_data.hit.values, test_data.prediction.values) print("Train AUC", train_auc) print("Test AUC", test_auc) model.fit_info[-1].setdefault("training_info", {}).update({ "fold_num": fold_num, "num_folds": num_folds, "replicate_num": replicate_num, "num_replicates": num_replicates, "architecture_num": architecture_num, "num_architectures": num_architectures, "train_peptide_hash": train_peptide_hash.hexdigest(), "work_item_name": work_item_name, "train_auc": train_auc, "test_auc": test_auc, }) numpy.testing.assert_equal( predictor.manifest_df.shape[0], len(predictor.models)) predictor.add_models([model]) if save_to: predictor.save(save_to) print("Wrote", save_to) numpy.testing.assert_equal( predictor.manifest_df.shape[0], len(predictor.models)) # Delete the network to release memory model._network = None # release network to free memory return predictor if __name__ == '__main__': run() ================================================ FILE: mhcflurry/version.py ================================================ __version__ = "2.2.1" ================================================ FILE: notebooks/example1.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Simple example for generating predictions with MHCflurry.\n", "import mhcflurry" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n", "WARNING: Logging before flag parsing goes to stderr.\n", "W0605 12:25:31.131366 4512298432 deprecation.py:506] From /Users/tim/miniconda3/envs/py36/lib/python3.6/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "If using Keras pass *_constraint arguments to layers.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load a predictor\n", "predictor = mhcflurry.Class1PresentationPredictor.load()\n", "predictor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/1 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
peptidepeptide_numsample_nameaffinitybest_alleleprocessing_scorepresentation_scorepresentation_percentile
0NLVPMVATV0sample123.634000A*02:010.4568100.9902880.010220
1KLLEIPDPDKNWATL1sample11539.483711A*02:010.6050720.5381790.754209
2RANDMPEPTIDE2sample118589.200876A*02:010.0063600.00721459.896462
\n", "" ], "text/plain": [ " peptide peptide_num sample_name affinity best_allele \\\n", "0 NLVPMVATV 0 sample1 23.634000 A*02:01 \n", "1 KLLEIPDPDKNWATL 1 sample1 1539.483711 A*02:01 \n", "2 RANDMPEPTIDE 2 sample1 18589.200876 A*02:01 \n", "\n", " processing_score presentation_score presentation_percentile \n", "0 0.456810 0.990288 0.010220 \n", "1 0.605072 0.538179 0.754209 \n", "2 0.006360 0.007214 59.896462 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Predict for individiual peptides.\n", "# Try help(predictor.predict) for other options.\n", "results1 = predictor.predict([\"NLVPMVATV\", \"KLLEIPDPDKNWATL\", \"RANDMPEPTIDE\"], [\"A*02:01\"])\n", "results1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/1 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sequence_namepospeptiden_flankc_flanksample_nameaffinitybest_alleleaffinity_percentileprocessing_scorepresentation_scorepresentation_percentile
0protein114LLLVVSNLLMDSKGSSQKGSRLLsample1119.641959A02010.4281250.1039900.7909480.328758
1protein113LLLLVVSNLMDSKGSSQKGSRLLsample1165.667454A02010.5133750.0283280.6562830.540264
\n", "" ], "text/plain": [ " sequence_name pos peptide n_flank c_flank sample_name \\\n", "0 protein1 14 LLLVVSNLL MDSKGSSQKGSRLL sample1 \n", "1 protein1 13 LLLLVVSNL MDSKGSSQKGSRL L sample1 \n", "\n", " affinity best_allele affinity_percentile processing_score \\\n", "0 119.641959 A0201 0.428125 0.103990 \n", "1 165.667454 A0201 0.513375 0.028328 \n", "\n", " presentation_score presentation_percentile \n", "0 0.790948 0.328758 \n", "1 0.656283 0.540264 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Predict across protein sequences\n", "# Try help(predictor.predict_sequences) for other options.\n", "results2 = predictor.predict_sequences(\n", " sequences={\n", " 'protein1': \"MDSKGSSQKGSRLLLLLVVSNLL\",\n", " 'protein2': \"SSLPTPEDKEQAQQTHH\",\n", " },\n", " alleles={\n", " \"sample1\": [\"A0201\", \"A0301\", \"B0702\"],\n", " \"sample2\": [\"A0101\", \"C0202\"],\n", " },\n", " result=\"filtered\",\n", " comparison_quantity=\"affinity\",\n", " filter_value=500)\n", "results2" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 4 } ================================================ FILE: notebooks/mhcflurry-colab.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "source": [ "# Setup" ], "metadata": { "id": "ZBP3mFgsZTxA" } }, { "cell_type": "markdown", "source": [ "This notebook demonstrates how to generate predictions using MHCflurry." ], "metadata": { "id": "c4ukEYkrco5H" } }, { "cell_type": "code", "source": [ "# Install the package and download models\n", "!pip install -q mhcflurry\n", "!mhcflurry-downloads --quiet fetch models_class1_presentation" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uUFQLxFgZTAO", "outputId": "66ad515b-81bb-46ea-9760-58939109f73a" }, "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[K |████████████████████████████████| 140 kB 5.0 MB/s \n", "\u001b[K |████████████████████████████████| 103 kB 7.7 MB/s \n", "\u001b[K |████████████████████████████████| 61 kB 275 kB/s \n", "\u001b[K |████████████████████████████████| 636 kB 9.9 MB/s \n", "\u001b[K |████████████████████████████████| 130 kB 12.9 MB/s \n", "\u001b[?25h Building wheel for np-utils (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Building wheel for serializable (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Building wheel for typechecks (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "135MB [00:01, 73.1MB/s] \n", "Extracting: 100% 62/62 [00:15<00:00, 3.89it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "# Imports\n", "import mhcflurry\n", "from google.colab import files\n", "\n", "# Quiet warnings\n", "import warnings\n", "warnings.filterwarnings('ignore')" ], "metadata": { "id": "1sqAFdItWwd5" }, "execution_count": 2, "outputs": [] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sHCsU4dNRGBk", "outputId": "9fd7fec5-ce28-416f-b9b1-aeb4062c79a3" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Forcing tensorflow backend.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow/python/compat/v2_compat.py:107: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "non-resource variables are not supported in the long term\n", "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/mhcflurry/common.py:131: The name tf.keras.backend.set_session is deprecated. Please use tf.compat.v1.keras.backend.set_session instead.\n", "\n", "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/keras/initializers/initializers_v1.py:278: calling RandomUniform.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Call initializer instance with the dtype argument instead of passing it to the constructor\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 3 } ], "source": [ "# Load a predictor\n", "predictor = mhcflurry.Class1PresentationPredictor.load()\n", "predictor" ] }, { "cell_type": "markdown", "source": [ "# Predict for specified peptides" ], "metadata": { "id": "SZyoFee7ZlaH" } }, { "cell_type": "code", "source": [ "peptides = \"\"\"\n", "NLVPMVATV\n", "RANDMPEPTIDE\n", "SIINFEKL\n", "\"\"\".split()\n", "\n", "alleles = \"A*02:01 B*27:01 H2-Kb\".split()\n", "\n", "results1 = predictor.predict(peptides, alleles)\n", "results1" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 342 }, "id": "LaoQdnXlZLo8", "outputId": "755bd5b8-6dd8-4532-8781-395552be82e0" }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Predicting processing.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 1/1 [00:05<00:00, 5.26s/it]\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ "Predicting affinities.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "\r 0%| | 0/3 [00:00\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
peptidepeptide_numsample_nameaffinitybest_alleleprocessing_scorepresentation_scorepresentation_percentile
0NLVPMVATV0sample116.570972A*02:010.5330080.9701870.018723
1RANDMPEPTIDE1sample121780.313255B*27:010.0084920.00473262.744674
2SIINFEKL2sample119.707210H2-Kb0.2647100.9141110.099511
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", " \n", " " ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "code", "source": [ "# Download results\n", "results1.to_csv('mhcflurry-results.csv')\n", "files.download('mhcflurry-results.csv')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17 }, "id": "B2YXOk6waeli", "outputId": "c933a1b7-65c5-44da-dacc-8ab3813de681" }, "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_044dbb46-ccba-49fe-876b-f71d363c8833\", \"mhcflurry-results.csv\", 434)" ] }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "# See help for more options:\n", "help(predictor.predict)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "OIYIyhiudmis", "outputId": "d438606b-e747-4f28-9bdc-bb41733746bb" }, "execution_count": 6, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Help on method predict in module mhcflurry.class1_presentation_predictor:\n", "\n", "predict(peptides, alleles, sample_names=None, n_flanks=None, c_flanks=None, include_affinity_percentile=False, verbose=1, throw=True) method of mhcflurry.class1_presentation_predictor.Class1PresentationPredictor instance\n", " Predict presentation scores across a set of peptides.\n", " \n", " Presentation scores combine predictions for MHC I binding affinity\n", " and antigen processing.\n", " \n", " This method returns a pandas.DataFrame giving presentation scores plus\n", " the binding affinity and processing predictions and other intermediate\n", " results.\n", " \n", " Example:\n", " \n", " >>> predictor = Class1PresentationPredictor.load()\n", " >>> predictor.predict(\n", " ... peptides=[\"SIINFEKL\", \"PEPTIDE\"],\n", " ... n_flanks=[\"NNN\", \"SNS\"],\n", " ... c_flanks=[\"CCC\", \"CNC\"],\n", " ... alleles={\n", " ... \"sample1\": [\"A0201\", \"A0301\", \"B0702\"],\n", " ... \"sample2\": [\"A0101\", \"C0202\"],\n", " ... },\n", " ... verbose=0)\n", " peptide n_flank c_flank peptide_num sample_name affinity best_allele processing_score presentation_score presentation_percentile\n", " 0 SIINFEKL NNN CCC 0 sample1 11927.161 A0201 0.838 0.145 2.282\n", " 1 PEPTIDE SNS CNC 1 sample1 32507.082 A0201 0.025 0.003 100.000\n", " 2 SIINFEKL NNN CCC 0 sample2 2725.593 C0202 0.838 0.416 1.017\n", " 3 PEPTIDE SNS CNC 1 sample2 28304.338 C0202 0.025 0.003 99.287\n", " \n", " You can also specify sample_names, in which case peptide is evaluated\n", " for binding the alleles in the corresponding sample only. See\n", " `predict_affinity` for an examples.\n", " \n", " Parameters\n", " ----------\n", " peptides : list of string\n", " Peptide sequences\n", " alleles : list of string or dict of string -> list of string\n", " If you are predicting for a single sample, pass a list of strings\n", " (up to 6) indicating the genotype. If you are predicting across\n", " multiple samples, pass a dict where the keys are (arbitrary)\n", " sample names and the values are the alleles to predict for that\n", " sample. Set to an empty list or dict to perform processing\n", " prediction only.\n", " sample_names : list of string [same length as peptides]\n", " If you are passing a dict for 'alleles', you can use this\n", " argument to specify which peptides go with which samples. If it is\n", " None, then predictions will be performed for each peptide across all\n", " samples.\n", " n_flanks : list of string [same length as peptides]\n", " Upstream sequences before the peptide. Sequences of any length can\n", " be given and a suffix of the size supported by the model will be\n", " used.\n", " c_flanks : list of string [same length as peptides]\n", " Downstream sequences after the peptide. Sequences of any length can\n", " be given and a prefix of the size supported by the model will be\n", " used.\n", " include_affinity_percentile : bool\n", " Whether to include affinity percentile ranks\n", " verbose : int\n", " Set to 0 for quiet.\n", " throw : verbose\n", " Whether to throw exception (vs. just log a warning) on invalid\n", " peptides, etc.\n", " \n", " Returns\n", " -------\n", " pandas.DataFrame\n", " \n", " Presentation scores and intermediate results.\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# Predict by scanning across protein sequences" ], "metadata": { "id": "TAJlyQ-4axay" } }, { "cell_type": "code", "source": [ "# Paste your fasta here\n", "proteins_fasta = \"\"\"\n", ">tr|A0A6B9WFC7|A0A6B9WFC7_SARS2 Envelope small membrane protein\n", "MYSFVSEETGTLIVNSVLLFLAFVVFLLVTLAILTALRLCAYCCNIVNVSLVKPSFYVYS\n", "RVKNLNSSRVPDLLV\n", ">tr|A0A6B9W0L4|A0A6B9W0L4_SARS2 ORF6 protein\n", "MFHLVDFQVTIAEILLIIMRTFKVSIWNLDYIINLIIKNLSKSLTENKYSQLDEEQPMEI\n", "D\n", ">tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 Nonstructural protein NS3\n", "MDLFMRIFTIGTVTLKQGEIKDATPSDFVRATATIPIQASLPFGWLIVGVALLAVFQSAS\n", "KIITLKKRWQLALSKGVHFVCNLLLLFVTVYSHLLLVAAGLEAPFLYLYALVYFLQSINF\n", "VRIIMRLWLCWKCRSKNPLLYDANYFLCWHTNCYDYCIPYNSVTSSIVITSGDGTTSPIS\n", "EHDYQIGGYTEKWESGVKDCVVLHSYFTSDYYQLYSTQLSTDTGVEHVTFFIYNKIVDEP\n", "EEHVQIHTIDGSSGVVNPVMEPIYDEPTTTTSVPL\n", ">tr|A0A6B9VLF3|A0A6B9VLF3_SARS2 Membrane protein\n", "MADSNGTITVEELKKLLEQWNLVIGFLFLTWICLLQFAYANRNRFLYIIKLIFLWLLWPV\n", "TLACFVLAAVYRINWITGGIAIAMACLVGLMWLSYFIASFRLFARTRSMWSFNPETNILL\n", "NVPLHGTILTRPLLESELVIGAVILRGHLRIAGHHLGRCDIKDLPKEITVATSRTLSYYK\n", "LGASQRVAGDSGFAAYSRYRIGNYKLNTDHSSSSDNIALLVQ\n", "\"\"\"\n", "\n", "import mhcflurry.fasta\n", "\n", "with open(\"temp.fa\", \"w\") as fd:\n", " fd.write(proteins_fasta)\n", "\n", "proteins = mhcflurry.fasta.read_fasta_to_dataframe(\"temp.fa\").set_index(\"sequence_id\")\n", "proteins" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "IORcEbHkbBsJ", "outputId": "db4bb0bd-0602-4452-dd4e-55dbfa7cb90d" }, "execution_count": 7, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " sequence\n", "sequence_id \n", "tr|A0A6B9WFC7|A0A6B9WFC7_SARS2 MYSFVSEETGTLIVNSVLLFLAFVVFLLVTLAILTALRLCAYCCNI...\n", "tr|A0A6B9W0L4|A0A6B9W0L4_SARS2 MFHLVDFQVTIAEILLIIMRTFKVSIWNLDYIINLIIKNLSKSLTE...\n", "tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 MDLFMRIFTIGTVTLKQGEIKDATPSDFVRATATIPIQASLPFGWL...\n", "tr|A0A6B9VLF3|A0A6B9VLF3_SARS2 MADSNGTITVEELKKLLEQWNLVIGFLFLTWICLLQFAYANRNRFL..." ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sequence
sequence_id
tr|A0A6B9WFC7|A0A6B9WFC7_SARS2MYSFVSEETGTLIVNSVLLFLAFVVFLLVTLAILTALRLCAYCCNI...
tr|A0A6B9W0L4|A0A6B9W0L4_SARS2MFHLVDFQVTIAEILLIIMRTFKVSIWNLDYIINLIIKNLSKSLTE...
tr|A0A6G7S6S0|A0A6G7S6S0_SARS2MDLFMRIFTIGTVTLKQGEIKDATPSDFVRATATIPIQASLPFGWL...
tr|A0A6B9VLF3|A0A6B9VLF3_SARS2MADSNGTITVEELKKLLEQWNLVIGFLFLTWICLLQFAYANRNRFL...
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 7 } ] }, { "cell_type": "code", "source": [ "# Define alleles for each sample\n", "alleles={\n", " \"my-sample\": [\"A0201\", \"A0301\", \"B0702\", \"C0802\"],\n", "}" ], "metadata": { "id": "zwPHH09RcgCt" }, "execution_count": 8, "outputs": [] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 559 }, "id": "tYRpxn5YRGBk", "outputId": "7b07a064-fcdf-4fec-d05a-242fdda2a6ad" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Predicting processing.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 1/1 [00:13<00:00, 13.82s/it]\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ "Predicting affinities.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 4/4 [00:06<00:00, 1.62s/it]\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ " sequence_name pos peptide n_flank c_flank \\\n", "0 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 138 LLYDANYFL RSKNP CWHTN \n", "1 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 106 YLYALVYFL EAPFL QSINF \n", "2 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 71 ALSKGVHFV KRWQL CNLLL \n", "3 tr|A0A6B9WFC7|A0A6B9WFC7_SARS2 49 SLVKPSFYV NIVNV YSRVK \n", "4 tr|A0A6B9WFC7|A0A6B9WFC7_SARS2 19 FLAFVVFLL NSVLL VTLAI \n", ".. ... ... ... ... ... \n", "188 tr|A0A6B9WFC7|A0A6B9WFC7_SARS2 15 SVLLFLAFVV TLIVN FLLVT \n", "189 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 57 SASKIITL LAVFQ KKRWQ \n", "190 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 169 TSGDGTTSPI SSIVI SEHDY \n", "191 tr|A0A6B9VLF3|A0A6B9VLF3_SARS2 71 RINWITGGI LAAVY AIAMA \n", "192 tr|A0A6G7S6S0|A0A6G7S6S0_SARS2 1 DLFMRIFTI M GTVTL \n", "\n", " sample_name affinity best_allele affinity_percentile \\\n", "0 my-sample 10.659104 A0201 0.003625 \n", "1 my-sample 11.053785 A0201 0.006750 \n", "2 my-sample 11.501204 A0201 0.011500 \n", "3 my-sample 11.930823 A0201 0.013500 \n", "4 my-sample 12.318483 A0201 0.015875 \n", ".. ... ... ... ... \n", "188 my-sample 466.913027 A0201 1.297625 \n", "189 my-sample 471.300226 C0802 0.774375 \n", "190 my-sample 473.865753 C0802 0.774375 \n", "191 my-sample 475.852826 A0201 1.306500 \n", "192 my-sample 498.907589 A0201 1.329875 \n", "\n", " processing_score presentation_score presentation_percentile \n", "0 0.157175 0.921852 0.088804 \n", "1 0.014756 0.868851 0.171848 \n", "2 0.676803 0.987502 0.002065 \n", "3 0.091771 0.891807 0.135353 \n", "4 0.007210 0.852791 0.196277 \n", ".. ... ... ... \n", "188 0.010083 0.145307 2.271005 \n", "189 0.772850 0.753873 0.351359 \n", "190 0.000247 0.138992 2.345462 \n", "191 0.166255 0.232094 1.656413 \n", "192 0.972156 0.860781 0.184022 \n", "\n", "[193 rows x 12 columns]" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sequence_namepospeptiden_flankc_flanksample_nameaffinitybest_alleleaffinity_percentileprocessing_scorepresentation_scorepresentation_percentile
0tr|A0A6G7S6S0|A0A6G7S6S0_SARS2138LLYDANYFLRSKNPCWHTNmy-sample10.659104A02010.0036250.1571750.9218520.088804
1tr|A0A6G7S6S0|A0A6G7S6S0_SARS2106YLYALVYFLEAPFLQSINFmy-sample11.053785A02010.0067500.0147560.8688510.171848
2tr|A0A6G7S6S0|A0A6G7S6S0_SARS271ALSKGVHFVKRWQLCNLLLmy-sample11.501204A02010.0115000.6768030.9875020.002065
3tr|A0A6B9WFC7|A0A6B9WFC7_SARS249SLVKPSFYVNIVNVYSRVKmy-sample11.930823A02010.0135000.0917710.8918070.135353
4tr|A0A6B9WFC7|A0A6B9WFC7_SARS219FLAFVVFLLNSVLLVTLAImy-sample12.318483A02010.0158750.0072100.8527910.196277
.......................................
188tr|A0A6B9WFC7|A0A6B9WFC7_SARS215SVLLFLAFVVTLIVNFLLVTmy-sample466.913027A02011.2976250.0100830.1453072.271005
189tr|A0A6G7S6S0|A0A6G7S6S0_SARS257SASKIITLLAVFQKKRWQmy-sample471.300226C08020.7743750.7728500.7538730.351359
190tr|A0A6G7S6S0|A0A6G7S6S0_SARS2169TSGDGTTSPISSIVISEHDYmy-sample473.865753C08020.7743750.0002470.1389922.345462
191tr|A0A6B9VLF3|A0A6B9VLF3_SARS271RINWITGGILAAVYAIAMAmy-sample475.852826A02011.3065000.1662550.2320941.656413
192tr|A0A6G7S6S0|A0A6G7S6S0_SARS21DLFMRIFTIMGTVTLmy-sample498.907589A02011.3298750.9721560.8607810.184022
\n", "

193 rows × 12 columns

\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 9 } ], "source": [ "# Predict across protein sequences and return peptides with predicted affinity\n", "# less than 500 nM.\n", "results2 = predictor.predict_sequences(\n", " sequences=proteins.sequence.to_dict(),\n", " alleles=alleles,\n", " result=\"filtered\",\n", " comparison_quantity=\"affinity\",\n", " filter_value=500)\n", "results2" ] }, { "cell_type": "code", "source": [ "# Download results\n", "results2.to_csv('mhcflurry-results.csv')\n", "files.download('mhcflurry-results.csv')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17 }, "id": "CASrg0X5dgon", "outputId": "8d333984-00cc-44d2-f5f4-6308fd7348a0" }, "execution_count": 10, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_b220af07-7880-4f63-93dd-8780f762a0a9\", \"mhcflurry-results.csv\", 32592)" ] }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "# See help for more options:\n", "help(predictor.predict_sequences)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "RtbpRsdTdMRL", "outputId": "dda97aff-cdb7-4d8c-d950-df13a7aecbd6" }, "execution_count": 11, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Help on method predict_sequences in module mhcflurry.class1_presentation_predictor:\n", "\n", "predict_sequences(sequences, alleles, result='best', comparison_quantity=None, filter_value=None, peptide_lengths=(8, 9, 10, 11), use_flanks=True, include_affinity_percentile=True, verbose=1, throw=True) method of mhcflurry.class1_presentation_predictor.Class1PresentationPredictor instance\n", " Predict presentation across protein sequences.\n", " \n", " Example:\n", " \n", " >>> predictor = Class1PresentationPredictor.load()\n", " >>> predictor.predict_sequences(\n", " ... sequences={\n", " ... 'protein1': \"MDSKGSSQKGSRLLLLLVVSNLL\",\n", " ... 'protein2': \"SSLPTPEDKEQAQQTHH\",\n", " ... },\n", " ... alleles={\n", " ... \"sample1\": [\"A0201\", \"A0301\", \"B0702\"],\n", " ... \"sample2\": [\"A0101\", \"C0202\"],\n", " ... },\n", " ... result=\"filtered\",\n", " ... comparison_quantity=\"affinity\",\n", " ... filter_value=500,\n", " ... verbose=0)\n", " sequence_name pos peptide n_flank c_flank sample_name affinity best_allele affinity_percentile processing_score presentation_score presentation_percentile\n", " 0 protein1 14 LLLVVSNLL GSRLL sample1 57.180 A0201 0.398 0.233 0.754 0.351\n", " 1 protein1 13 LLLLVVSNL KGSRL L sample1 57.339 A0201 0.398 0.031 0.586 0.643\n", " 2 protein1 5 SSQKGSRLL MDSKG LLLVV sample2 110.779 C0202 0.782 0.061 0.456 0.920\n", " 3 protein1 6 SQKGSRLLL DSKGS LLVVS sample2 254.480 C0202 1.735 0.102 0.303 1.356\n", " 4 protein1 13 LLLLVVSNLL KGSRL sample1 260.390 A0201 1.012 0.158 0.345 1.215\n", " 5 protein1 12 LLLLLVVSNL QKGSR L sample1 308.150 A0201 1.094 0.015 0.206 1.802\n", " 6 protein2 0 SSLPTPEDK EQAQQ sample2 410.354 C0202 2.398 0.003 0.158 2.155\n", " 7 protein1 5 SSQKGSRL MDSKG LLLLV sample2 444.321 C0202 2.512 0.026 0.159 2.138\n", " 8 protein2 0 SSLPTPEDK EQAQQ sample1 459.296 A0301 0.971 0.003 0.144 2.292\n", " 9 protein1 4 GSSQKGSRL MDSK LLLLV sample2 469.052 C0202 2.595 0.014 0.146 2.261\n", " \n", " Parameters\n", " ----------\n", " sequences : str, list of string, or string -> string dict\n", " Protein sequences. If a dict is given, the keys are arbitrary (\n", " e.g. protein names), and the values are the amino acid sequences.\n", " alleles : list of string, list of list of string, or dict of string -> list of string\n", " MHC I alleles. Can be: (1) a string (a single allele), (2) a list of\n", " strings (a single genotype), (3) a list of list of strings\n", " (multiple genotypes, where the total number of genotypes must equal\n", " the number of sequences), or (4) a dict giving multiple genotypes,\n", " which will each be run over the sequences.\n", " result : string\n", " Specify 'best' to return the strongest peptide for each sequence,\n", " 'all' to return predictions for all peptides, or 'filtered' to\n", " return predictions where the comparison_quantity is stronger\n", " (i.e (<) for affinity, (>) for scores) than filter_value.\n", " comparison_quantity : string\n", " One of \"presentation_score\", \"processing_score\", \"affinity\", or\n", " \"affinity_percentile\". Prediction to use to rank (if result is\n", " \"best\") or filter (if result is \"filtered\") results. Default is\n", " \"presentation_score\".\n", " filter_value : float\n", " Threshold value to use, only relevant when result is \"filtered\".\n", " If comparison_quantity is \"affinity\", then all results less than\n", " (i.e. tighter than) the specified nM affinity are retained. If it's\n", " \"presentation_score\" or \"processing_score\" then results greater than\n", " the indicated filter_value are retained.\n", " peptide_lengths : list of int\n", " Peptide lengths to predict for.\n", " use_flanks : bool\n", " Whether to include flanking sequences when running the AP predictor\n", " (for better cleavage prediction).\n", " include_affinity_percentile : bool\n", " Whether to include affinity percentile ranks in output.\n", " verbose : int\n", " Set to 0 for quiet mode.\n", " throw : boolean\n", " Whether to throw exceptions (vs. log warnings) on invalid inputs.\n", " \n", " Returns\n", " -------\n", " pandas.DataFrame with columns:\n", " peptide, n_flank, c_flank, sequence_name, affinity, best_allele,\n", " processing_score, presentation_score\n", "\n" ] } ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" }, "colab": { "name": "mhcflurry-colab.ipynb", "provenance": [] } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: pylintrc ================================================ [TYPECHECK] # Without ignoring this, we get errors like: # E:249,20: Module 'numpy' has no 'nan' member (no-member) ignored-modules = numpy ================================================ FILE: readthedocs.yml ================================================ conda: file: docs/environment.yml ================================================ FILE: requirements.txt ================================================ numpy>=1.22.4 pandas>=2.0 torch>=2.0.0 appdirs scikit-learn mhcgnomes>=3.0.1 pyyaml tqdm ================================================ FILE: scripts/compare_tf_pytorch_random_outputs.py ================================================ """ Large-scale TF vs PyTorch MHCflurry comparison on random peptide/allele examples. This script is designed to run locally and keep TF/PyTorch imports isolated by running each backend in a subprocess. Primary workflow: python scripts/compare_tf_pytorch_random_outputs.py run \ --tf-repo-root /tmp/mhcflurry-master-check \ --num-examples 120000 \ --out-dir /tmp/mhcflurry-random-parity Outputs: - dataset.csv.gz - pt_predictions.csv.gz - tf_predictions.csv.gz - diff_summary.json - diff_report.txt - top_outliers.csv.gz """ from __future__ import annotations import argparse import json import re import subprocess import sys import warnings from datetime import datetime, timezone from pathlib import Path import numpy as np import pandas as pd warnings.filterwarnings( "ignore", message="Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) AA20 = "ACDEFGHIKLMNPQRSTVWY" DEFAULT_ALLELE_REGEX = r"^HLA-[ABC]\*" BASE_COLUMNS = ["row_id", "peptide", "allele", "n_flank", "c_flank"] STRING_OUTPUT_COLUMNS = ["pres_with_best_allele", "pres_without_best_allele"] # A compact default panel: common human class I alleles often used for broad # population coverage checks, plus a few representative animal alleles. IEDB_POPCOV_HUMAN_ALLELES = [ "HLA-A*01:01", "HLA-A*02:01", "HLA-A*03:01", "HLA-A*24:02", "HLA-A*26:01", "HLA-A*30:01", "HLA-A*30:02", "HLA-A*31:01", "HLA-A*33:01", "HLA-A*68:01", "HLA-B*07:02", "HLA-B*08:01", "HLA-B*15:01", "HLA-B*35:01", "HLA-B*40:01", "HLA-B*44:02", "HLA-B*44:03", "HLA-B*51:01", "HLA-B*53:01", "HLA-B*57:01", "HLA-B*58:01", "HLA-C*03:04", "HLA-C*04:01", "HLA-C*05:01", "HLA-C*06:02", "HLA-C*07:01", "HLA-C*07:02", "HLA-C*08:02", "HLA-C*12:03", "HLA-C*15:02", ] EXTRA_ANIMAL_ALLELES = [ "H2-K*b", "H2-D*b", "H2-K*d", "H2-L*d", "DLA-88*01:01", "SLA-1*04:01", ] def _json_default(value): if isinstance(value, np.generic): return value.item() if isinstance(value, np.ndarray): return value.tolist() raise TypeError("Object of type %s is not JSON serializable" % type(value).__name__) def _self_cmd(*args: str) -> list[str]: return [sys.executable, str(Path(__file__).resolve()), *args] def _run_subprocess_json(cmd: list[str]) -> dict: completed = subprocess.run(cmd, check=True, capture_output=True, text=True) stdout = completed.stdout.strip() if not stdout: raise RuntimeError("No JSON output from command: %s" % " ".join(cmd)) line = stdout.splitlines()[-1] return json.loads(line) def _run_subprocess(cmd: list[str]) -> None: subprocess.run(cmd, check=True) def _append_if_set(cmd: list[str], flag: str, value: str | None) -> None: if value: cmd.extend([flag, value]) def _repo_root_default() -> Path: return Path(__file__).resolve().parents[1] def _random_sequences(rng: np.random.Generator, lengths: np.ndarray) -> list[str]: chars = np.array(list(AA20), dtype=" pd.DataFrame: if not alleles: raise ValueError("No alleles provided after filtering/intersection.") rng = np.random.default_rng(seed) peptide_lengths = rng.integers( peptide_min_len, peptide_max_len + 1, size=num_examples ) n_flank_lengths = rng.integers(0, n_flank_max + 1, size=num_examples) c_flank_lengths = rng.integers(0, c_flank_max + 1, size=num_examples) allele_indices = rng.integers(0, len(alleles), size=num_examples) df = pd.DataFrame( { "row_id": np.arange(num_examples, dtype=np.int64), "allele": [alleles[i] for i in allele_indices.tolist()], "peptide": _random_sequences(rng, peptide_lengths), "n_flank": _random_sequences(rng, n_flank_lengths), "c_flank": _random_sequences(rng, c_flank_lengths), } ) return df def _apply_allele_panel( allele_pool: list[str], allele_panel: str, allele_regex: str | None, ) -> list[str]: selected = list(allele_pool) if allele_panel == "iedb_plus_animals": requested = IEDB_POPCOV_HUMAN_ALLELES + EXTRA_ANIMAL_ALLELES selected = [a for a in requested if a in selected] elif allele_panel == "all_hla": pattern = re.compile(DEFAULT_ALLELE_REGEX) selected = [a for a in selected if pattern.search(a)] elif allele_panel == "all": pass else: raise ValueError("Unknown allele panel: %s" % allele_panel) if allele_regex: pattern = re.compile(allele_regex) selected = [a for a in selected if pattern.search(a)] return selected def cmd_backend_metadata(args: argparse.Namespace) -> None: sys.path.insert(0, str(Path(args.repo_root).resolve())) from mhcflurry import ( # pylint: disable=import-error Class1AffinityPredictor, Class1PresentationPredictor, ) from mhcflurry.downloads import ( # pylint: disable=import-error get_default_class1_models_dir, get_default_class1_presentation_models_dir, get_default_class1_processing_models_dir, get_path, ) class1_models_dir = args.class1_models_dir or get_default_class1_models_dir() presentation_models_dir = ( args.presentation_models_dir or get_default_class1_presentation_models_dir() ) processing_with_flanks_dir = ( args.processing_with_flanks_models_dir or get_default_class1_processing_models_dir() ) processing_without_flanks_dir = ( args.processing_without_flanks_models_dir or get_path("models_class1_processing", "models.selected.no_flank") ) affinity_predictor = Class1AffinityPredictor.load(class1_models_dir) presentation_predictor = Class1PresentationPredictor.load(presentation_models_dir) with_flanks_lengths = ( presentation_predictor.processing_predictor_with_flanks.sequence_lengths if presentation_predictor.processing_predictor_with_flanks is not None else None ) without_flanks_lengths = ( presentation_predictor.processing_predictor_without_flanks.sequence_lengths if presentation_predictor.processing_predictor_without_flanks is not None else None ) out = { "repo_root": str(Path(args.repo_root).resolve()), "class1_models_dir": class1_models_dir, "presentation_models_dir": presentation_models_dir, "processing_with_flanks_models_dir": processing_with_flanks_dir, "processing_without_flanks_models_dir": processing_without_flanks_dir, "supported_alleles": sorted(affinity_predictor.supported_alleles), "alleles_with_percentile_ranks": sorted( affinity_predictor.allele_to_percent_rank_transform.keys() ), "affinity_supported_peptide_lengths": list( affinity_predictor.supported_peptide_lengths ), "with_flanks_lengths": with_flanks_lengths, "without_flanks_lengths": without_flanks_lengths, "provenance": { "affinity": affinity_predictor.provenance_string, "presentation": presentation_predictor.provenance_string, "presentation_internal_affinity": ( presentation_predictor.affinity_predictor.provenance_string ), }, } print(json.dumps(out, default=_json_default)) def cmd_predict_backend(args: argparse.Namespace) -> None: sys.path.insert(0, str(Path(args.repo_root).resolve())) # Keep TF/Keras logs from overwhelming stdout in large runs. try: import logging logging.getLogger("tensorflow").setLevel(logging.ERROR) from tf_keras.models import Model as _KerasModel # type: ignore _orig_predict = _KerasModel.predict def _quiet_predict(self, *p_args, **p_kwargs): p_kwargs.setdefault("verbose", 0) return _orig_predict(self, *p_args, **p_kwargs) _KerasModel.predict = _quiet_predict except Exception: pass from mhcflurry import ( # pylint: disable=import-error Class1AffinityPredictor, Class1PresentationPredictor, ) df = pd.read_csv(args.input_csv, keep_default_na=False) if not BASE_COLUMNS or not all(col in df.columns for col in BASE_COLUMNS): raise ValueError("Input CSV missing required columns: %s" % BASE_COLUMNS) peptides = df["peptide"].tolist() alleles = df["allele"].tolist() n_flanks = df["n_flank"].tolist() c_flanks = df["c_flank"].tolist() affinity_predictor = Class1AffinityPredictor.load(args.class1_models_dir) presentation_predictor = Class1PresentationPredictor.load( args.presentation_models_dir ) aff_df = affinity_predictor.predict_to_dataframe( peptides=peptides, alleles=alleles, throw=False, include_percentile_ranks=True, include_confidence_intervals=True, centrality_measure=args.centrality_measure, model_kwargs={"batch_size": args.batch_size}, ) sample_names = alleles alleles_map = {allele: [allele] for allele in sorted(set(alleles))} pres_with_df = presentation_predictor.predict( peptides=peptides, alleles=alleles_map, sample_names=sample_names, n_flanks=n_flanks, c_flanks=c_flanks, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") pres_without_df = presentation_predictor.predict( peptides=peptides, alleles=alleles_map, sample_names=sample_names, n_flanks=None, c_flanks=None, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") out = df[BASE_COLUMNS].copy() out["affinity_prediction"] = aff_df["prediction"].values out["affinity_prediction_low"] = aff_df.get("prediction_low", np.nan) out["affinity_prediction_high"] = aff_df.get("prediction_high", np.nan) out["affinity_prediction_percentile"] = aff_df.get("prediction_percentile", np.nan) out["pres_with_affinity"] = pres_with_df["affinity"].values out["pres_with_best_allele"] = pres_with_df["best_allele"].astype(str).values out["pres_with_affinity_percentile"] = pres_with_df["affinity_percentile"].values out["processing_with_score"] = pres_with_df["processing_score"].values out["pres_with_processing_score"] = pres_with_df["processing_score"].values out["pres_with_presentation_score"] = pres_with_df["presentation_score"].values out["pres_with_presentation_percentile"] = pres_with_df[ "presentation_percentile" ].values out["pres_without_affinity"] = pres_without_df["affinity"].values out["pres_without_best_allele"] = pres_without_df["best_allele"].astype(str).values out["pres_without_affinity_percentile"] = pres_without_df[ "affinity_percentile" ].values out["processing_without_score"] = pres_without_df["processing_score"].values out["pres_without_processing_score"] = pres_without_df["processing_score"].values out["pres_without_presentation_score"] = pres_without_df[ "presentation_score" ].values out["pres_without_presentation_percentile"] = pres_without_df[ "presentation_percentile" ].values Path(args.output_csv).parent.mkdir(parents=True, exist_ok=True) out.to_csv(args.output_csv, index=False, compression="gzip") def _numeric_stats( merged: pd.DataFrame, column: str, relative_epsilon: float, top_k: int, ) -> tuple[dict, list[dict]]: pt_col = pd.to_numeric(merged[f"{column}_pt"], errors="coerce") tf_col = pd.to_numeric(merged[f"{column}_tf"], errors="coerce") valid_mask = np.isfinite(pt_col.values) & np.isfinite(tf_col.values) valid_count = int(valid_mask.sum()) if valid_count == 0: return {"count": 0}, [] pt_values = pt_col.values[valid_mask].astype(np.float64) tf_values = tf_col.values[valid_mask].astype(np.float64) diff = pt_values - tf_values abs_diff = np.abs(diff) rel_diff = abs_diff / np.maximum(np.abs(tf_values), relative_epsilon) pearson = float(np.corrcoef(pt_values, tf_values)[0, 1]) if valid_count > 1 else np.nan stats = { "count": valid_count, "pt_mean": float(pt_values.mean()), "tf_mean": float(tf_values.mean()), "mean_diff": float(diff.mean()), "mean_abs_diff": float(abs_diff.mean()), "median_abs_diff": float(np.median(abs_diff)), "p95_abs_diff": float(np.percentile(abs_diff, 95)), "p99_abs_diff": float(np.percentile(abs_diff, 99)), "max_abs_diff": float(abs_diff.max()), "mean_rel_diff": float(rel_diff.mean()), "p95_rel_diff": float(np.percentile(rel_diff, 95)), "p99_rel_diff": float(np.percentile(rel_diff, 99)), "max_rel_diff": float(rel_diff.max()), "pearson_r": pearson, } valid_idx = np.where(valid_mask)[0] sorted_local = np.argsort(abs_diff)[::-1][:top_k] outliers = [] for rank, local_idx in enumerate(sorted_local, start=1): global_idx = valid_idx[local_idx] row = merged.iloc[global_idx] outliers.append( { "column": column, "rank": rank, "row_id": int(row["row_id"]), "peptide": row["peptide"], "allele": row["allele"], "n_flank": row["n_flank"], "c_flank": row["c_flank"], "pt_value": float(pt_values[local_idx]), "tf_value": float(tf_values[local_idx]), "signed_diff": float(diff[local_idx]), "abs_diff": float(abs_diff[local_idx]), "rel_diff": float(rel_diff[local_idx]), } ) return stats, outliers def cmd_analyze(args: argparse.Namespace) -> None: pt = pd.read_csv(args.pt_predictions_csv, keep_default_na=False) tf = pd.read_csv(args.tf_predictions_csv, keep_default_na=False) merged = pt.merge( tf, on=BASE_COLUMNS, suffixes=("_pt", "_tf"), how="inner", ) numeric_columns = [ col for col in pt.columns if col not in BASE_COLUMNS + STRING_OUTPUT_COLUMNS ] string_columns = [col for col in STRING_OUTPUT_COLUMNS if col in pt.columns] summary = { "generated_at_utc": datetime.now(timezone.utc).isoformat(), "num_rows_pt": int(len(pt)), "num_rows_tf": int(len(tf)), "num_rows_merged": int(len(merged)), "numeric_columns": {}, "string_columns": {}, } outlier_rows = [] for col in numeric_columns: stats, outliers = _numeric_stats( merged, col, relative_epsilon=args.relative_epsilon, top_k=args.top_k ) summary["numeric_columns"][col] = stats outlier_rows.extend(outliers) for col in string_columns: pt_values = merged[f"{col}_pt"].astype(str) tf_values = merged[f"{col}_tf"].astype(str) mismatches = pt_values != tf_values summary["string_columns"][col] = { "count": int(len(merged)), "mismatch_count": int(mismatches.sum()), "mismatch_rate": float(mismatches.mean()), } Path(args.summary_json).parent.mkdir(parents=True, exist_ok=True) with open(args.summary_json, "w") as out: json.dump(summary, out, indent=2, sort_keys=True) if outlier_rows: outlier_df = pd.DataFrame(outlier_rows) outlier_df.to_csv(args.top_outliers_csv, index=False, compression="gzip") else: pd.DataFrame().to_csv(args.top_outliers_csv, index=False, compression="gzip") report_lines = [] report_lines.append("TF vs PyTorch random comparison report") report_lines.append("generated_at_utc: %s" % summary["generated_at_utc"]) report_lines.append("rows_pt: %d" % summary["num_rows_pt"]) report_lines.append("rows_tf: %d" % summary["num_rows_tf"]) report_lines.append("rows_merged: %d" % summary["num_rows_merged"]) report_lines.append("") report_lines.append("Numeric columns:") for col, stats in summary["numeric_columns"].items(): if stats.get("count", 0) == 0: report_lines.append(" %s: no valid numeric pairs" % col) continue report_lines.append( ( " %s: mean_abs=%.6g p95_abs=%.6g p99_abs=%.6g max_abs=%.6g " "mean_rel=%.6g p99_rel=%.6g max_rel=%.6g r=%.8f" ) % ( col, stats["mean_abs_diff"], stats["p95_abs_diff"], stats["p99_abs_diff"], stats["max_abs_diff"], stats["mean_rel_diff"], stats["p99_rel_diff"], stats["max_rel_diff"], stats["pearson_r"], ) ) report_lines.append("") report_lines.append("String columns:") for col, stats in summary["string_columns"].items(): report_lines.append( " %s: mismatch_rate=%.6g (%d/%d)" % ( col, stats["mismatch_rate"], stats["mismatch_count"], stats["count"], ) ) Path(args.report_txt).parent.mkdir(parents=True, exist_ok=True) with open(args.report_txt, "w") as out: out.write("\n".join(report_lines) + "\n") def cmd_run(args: argparse.Namespace) -> None: out_dir = Path(args.out_dir).resolve() out_dir.mkdir(parents=True, exist_ok=True) pt_repo_root = str(Path(args.pytorch_repo_root).resolve()) tf_repo_root = str(Path(args.tf_repo_root).resolve()) pt_meta_cmd = _self_cmd("backend-metadata", "--repo-root", pt_repo_root) tf_meta_cmd = _self_cmd("backend-metadata", "--repo-root", tf_repo_root) for cmd in (pt_meta_cmd, tf_meta_cmd): _append_if_set(cmd, "--class1-models-dir", args.class1_models_dir) _append_if_set(cmd, "--presentation-models-dir", args.presentation_models_dir) _append_if_set( cmd, "--processing-with-flanks-models-dir", args.processing_with_flanks_models_dir, ) _append_if_set( cmd, "--processing-without-flanks-models-dir", args.processing_without_flanks_models_dir, ) pt_meta = _run_subprocess_json(pt_meta_cmd) tf_meta = _run_subprocess_json(tf_meta_cmd) class1_models_dir = args.class1_models_dir or pt_meta["class1_models_dir"] presentation_models_dir = ( args.presentation_models_dir or pt_meta["presentation_models_dir"] ) processing_with_flanks_models_dir = ( args.processing_with_flanks_models_dir or pt_meta["processing_with_flanks_models_dir"] ) processing_without_flanks_models_dir = ( args.processing_without_flanks_models_dir or pt_meta["processing_without_flanks_models_dir"] ) allele_pool = sorted( set(pt_meta["supported_alleles"]).intersection(tf_meta["supported_alleles"]) ) if not args.allow_missing_affinity_percentiles: pt_percentile = set(pt_meta["alleles_with_percentile_ranks"]) tf_percentile = set(tf_meta["alleles_with_percentile_ranks"]) allele_pool = [a for a in allele_pool if (a in pt_percentile and a in tf_percentile)] allele_pool = _apply_allele_panel( allele_pool=allele_pool, allele_panel=args.allele_panel, allele_regex=args.allele_regex, ) if not allele_pool: raise ValueError( "No alleles remain after applying panel '%s' and regex filter." % args.allele_panel ) if args.allele_subset_size and len(allele_pool) > args.allele_subset_size: rng = np.random.default_rng(args.seed) indices = rng.choice( len(allele_pool), size=args.allele_subset_size, replace=False ) allele_pool = sorted([allele_pool[i] for i in indices.tolist()]) print( "Using %d alleles (panel=%s)." % (len(allele_pool), args.allele_panel) ) pt_min_len, pt_max_len = pt_meta["affinity_supported_peptide_lengths"] tf_min_len, tf_max_len = tf_meta["affinity_supported_peptide_lengths"] peptide_min_len = max(int(pt_min_len), int(tf_min_len)) peptide_max_len = min(int(pt_max_len), int(tf_max_len)) pt_with = pt_meta["with_flanks_lengths"] tf_with = tf_meta["with_flanks_lengths"] n_flank_max = min(int(pt_with["n_flank"]), int(tf_with["n_flank"])) c_flank_max = min(int(pt_with["c_flank"]), int(tf_with["c_flank"])) dataset_path = out_dir / "dataset.csv.gz" pt_predictions_path = out_dir / "pt_predictions.csv.gz" tf_predictions_path = out_dir / "tf_predictions.csv.gz" summary_path = out_dir / "diff_summary.json" report_path = out_dir / "diff_report.txt" outliers_path = out_dir / "top_outliers.csv.gz" dataset = _generate_dataset( num_examples=args.num_examples, alleles=allele_pool, peptide_min_len=peptide_min_len, peptide_max_len=peptide_max_len, n_flank_max=n_flank_max, c_flank_max=c_flank_max, seed=args.seed, ) dataset.to_csv(dataset_path, index=False, compression="gzip") pt_predict_cmd = _self_cmd( "predict-backend", "--repo-root", pt_repo_root, "--input-csv", str(dataset_path), "--output-csv", str(pt_predictions_path), "--batch-size", str(args.batch_size), "--centrality-measure", args.centrality_measure, ) tf_predict_cmd = _self_cmd( "predict-backend", "--repo-root", tf_repo_root, "--input-csv", str(dataset_path), "--output-csv", str(tf_predictions_path), "--batch-size", str(args.batch_size), "--centrality-measure", args.centrality_measure, ) for cmd in (pt_predict_cmd, tf_predict_cmd): _append_if_set(cmd, "--class1-models-dir", class1_models_dir) _append_if_set(cmd, "--presentation-models-dir", presentation_models_dir) _append_if_set( cmd, "--processing-with-flanks-models-dir", processing_with_flanks_models_dir, ) _append_if_set( cmd, "--processing-without-flanks-models-dir", processing_without_flanks_models_dir, ) _run_subprocess(pt_predict_cmd) _run_subprocess(tf_predict_cmd) _run_subprocess( _self_cmd( "analyze", "--pt-predictions-csv", str(pt_predictions_path), "--tf-predictions-csv", str(tf_predictions_path), "--summary-json", str(summary_path), "--report-txt", str(report_path), "--top-outliers-csv", str(outliers_path), "--top-k", str(args.top_k), "--relative-epsilon", str(args.relative_epsilon), ) ) print("Wrote dataset:", dataset_path) print("Wrote PT predictions:", pt_predictions_path) print("Wrote TF predictions:", tf_predictions_path) print("Wrote summary:", summary_path) print("Wrote report:", report_path) print("Wrote outliers:", outliers_path) def _add_common_model_dir_args(parser: argparse.ArgumentParser) -> None: parser.add_argument("--class1-models-dir", default=None) parser.add_argument("--presentation-models-dir", default=None) parser.add_argument("--processing-with-flanks-models-dir", default=None) parser.add_argument("--processing-without-flanks-models-dir", default=None) def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest="command", required=True) run = subparsers.add_parser("run") run.add_argument("--tf-repo-root", required=True) run.add_argument("--pytorch-repo-root", default=str(_repo_root_default())) run.add_argument("--num-examples", type=int, default=120000) run.add_argument("--seed", type=int, default=1) run.add_argument( "--allele-panel", choices=["iedb_plus_animals", "all_hla", "all"], default="iedb_plus_animals", help=( "Preset allele list. 'iedb_plus_animals' uses ~30 common human alleles " "plus a few animal alleles." ), ) run.add_argument( "--allele-regex", default=None, help="Optional extra regex filter applied after allele panel selection.", ) run.add_argument( "--allele-subset-size", type=int, default=None, help="Optional random subset size after panel+regex filtering.", ) run.add_argument( "--allow-missing-affinity-percentiles", action="store_true", help=( "If set, allow random alleles with missing affinity percentile calibrations. " "Default behavior restricts to alleles with percentiles in both backends." ), ) run.add_argument("--batch-size", type=int, default=4096) run.add_argument("--centrality-measure", default="mean") run.add_argument("--out-dir", default="/tmp/mhcflurry-random-parity") run.add_argument("--top-k", type=int, default=25) run.add_argument("--relative-epsilon", type=float, default=1e-12) _add_common_model_dir_args(run) run.set_defaults(func=cmd_run) metadata = subparsers.add_parser("backend-metadata") metadata.add_argument("--repo-root", required=True) _add_common_model_dir_args(metadata) metadata.set_defaults(func=cmd_backend_metadata) predict = subparsers.add_parser("predict-backend") predict.add_argument("--repo-root", required=True) predict.add_argument("--input-csv", required=True) predict.add_argument("--output-csv", required=True) predict.add_argument("--batch-size", type=int, default=4096) predict.add_argument("--centrality-measure", default="mean") _add_common_model_dir_args(predict) predict.set_defaults(func=cmd_predict_backend) analyze = subparsers.add_parser("analyze") analyze.add_argument("--pt-predictions-csv", required=True) analyze.add_argument("--tf-predictions-csv", required=True) analyze.add_argument("--summary-json", required=True) analyze.add_argument("--report-txt", required=True) analyze.add_argument("--top-outliers-csv", required=True) analyze.add_argument("--top-k", type=int, default=25) analyze.add_argument("--relative-epsilon", type=float, default=1e-12) analyze.set_defaults(func=cmd_analyze) return parser def main() -> None: parser = build_parser() args = parser.parse_args() # Normalize empty-string optional directory args from subprocess command args. for key in [ "class1_models_dir", "presentation_models_dir", "processing_with_flanks_models_dir", "processing_without_flanks_models_dir", ]: if hasattr(args, key) and getattr(args, key) == "": setattr(args, key, None) args.func(args) if __name__ == "__main__": main() ================================================ FILE: scripts/cross_allele_parity_analysis.py ================================================ """ Cross-allele TF vs PyTorch parity analysis for MHCflurry. This script: 1. Selects a limited curated allele panel (default: common human + a few animal). 2. Generates random peptides uniformly across lengths (default: 7-15 when supported). 3. Generates random flanks for each peptide (unique N and C flanks across peptide entries). 4. Builds a full cross-product dataset: peptides x alleles. 5. Runs predictions for PyTorch branch and TF master via subprocess isolation. 6. Produces summary stats, outlier tables, and diagnostic plots. Example: python scripts/cross_allele_parity_analysis.py \ --tf-repo-root /tmp/mhcflurry-master-check \ --num-peptides 1000 \ --out-dir /tmp/mhcflurry-cross-allele-parity """ from __future__ import annotations import argparse import json import re import subprocess import sys from pathlib import Path import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import numpy as np import pandas as pd AA20 = "ACDEFGHIKLMNPQRSTVWY" BASE_COLUMNS = ["row_id", "peptide", "allele", "n_flank", "c_flank"] STRING_OUTPUT_COLUMNS = ["pres_with_best_allele", "pres_without_best_allele"] # Common human class I alleles often used for broad coverage checks. IEDB_POPCOV_HUMAN_ALLELES = [ "HLA-A*01:01", "HLA-A*02:01", "HLA-A*03:01", "HLA-A*24:02", "HLA-A*26:01", "HLA-A*30:01", "HLA-A*30:02", "HLA-A*31:01", "HLA-A*33:01", "HLA-A*68:01", "HLA-B*07:02", "HLA-B*08:01", "HLA-B*15:01", "HLA-B*35:01", "HLA-B*40:01", "HLA-B*44:02", "HLA-B*44:03", "HLA-B*51:01", "HLA-B*53:01", "HLA-B*57:01", "HLA-B*58:01", "HLA-C*03:04", "HLA-C*04:01", "HLA-C*05:01", "HLA-C*06:02", "HLA-C*07:01", "HLA-C*07:02", "HLA-C*08:02", "HLA-C*12:03", "HLA-C*15:02", ] # A few non-human alleles to ensure cross-species sanity. EXTRA_ANIMAL_ALLELES = [ "H2-K*b", "H2-D*b", "H2-K*d", "H2-L*d", "DLA-88*01:01", "SLA-1*04:01", ] def _repo_root_default() -> Path: return Path(__file__).resolve().parents[1] def _compare_script_path() -> Path: return Path(__file__).resolve().parent / "compare_tf_pytorch_random_outputs.py" def _self_cmd(*args: str) -> list[str]: return [sys.executable, str(_compare_script_path()), *args] def _run_subprocess_json(cmd: list[str]) -> dict: completed = subprocess.run(cmd, check=True, capture_output=True, text=True) stdout = completed.stdout.strip() if not stdout: raise RuntimeError("No JSON output from command: %s" % " ".join(cmd)) return json.loads(stdout.splitlines()[-1]) def _run_subprocess(cmd: list[str]) -> None: subprocess.run(cmd, check=True) def _append_if_set(cmd: list[str], flag: str, value: str | None) -> None: if value: cmd.extend([flag, value]) def _select_alleles( pt_meta: dict, tf_meta: dict, allele_panel: str, allele_regex: str | None, require_percentiles: bool, ) -> list[str]: allele_pool = sorted( set(pt_meta["supported_alleles"]).intersection(tf_meta["supported_alleles"]) ) if require_percentiles: pt_percentile = set(pt_meta["alleles_with_percentile_ranks"]) tf_percentile = set(tf_meta["alleles_with_percentile_ranks"]) allele_pool = [a for a in allele_pool if a in pt_percentile and a in tf_percentile] if allele_panel == "iedb_plus_animals": requested = IEDB_POPCOV_HUMAN_ALLELES + EXTRA_ANIMAL_ALLELES allele_pool = [a for a in requested if a in allele_pool] elif allele_panel == "all_hla": pattern = re.compile(r"^HLA-[ABC]\*") allele_pool = [a for a in allele_pool if pattern.search(a)] elif allele_panel == "all": pass else: raise ValueError("Unknown allele panel: %s" % allele_panel) if allele_regex: pattern = re.compile(allele_regex) allele_pool = [a for a in allele_pool if pattern.search(a)] if not allele_pool: raise ValueError("No alleles remain after panel/filter selection.") return allele_pool def _lengths_to_sample( min_supported: int, max_supported: int, min_requested: int, max_requested: int ) -> list[int]: start = max(min_supported, min_requested) end = min(max_supported, max_requested) if end < start: raise ValueError( "No overlap in peptide lengths. Supported=[%d,%d], requested=[%d,%d]" % (min_supported, max_supported, min_requested, max_requested) ) lengths = list(range(start, end + 1)) # If 7 is not supported but 8 is, satisfy the user's fallback request. if 7 not in lengths and 8 in lengths and min_requested <= 7 <= max_requested: return [length for length in lengths if length >= 8] return lengths def _random_sequences( rng: np.random.Generator, length: int, n: int, used: set[str], ) -> list[str]: chars = np.array(list(AA20), dtype="= n: break return out def _generate_uniform_peptides( num_peptides: int, lengths: list[int], n_flank_length: int, c_flank_length: int, seed: int, ) -> pd.DataFrame: if num_peptides <= 0: raise ValueError("num_peptides must be positive") if not lengths: raise ValueError("No lengths provided") if n_flank_length <= 0 or c_flank_length <= 0: raise ValueError( "Flank lengths must be positive (got n=%d c=%d)." % (n_flank_length, c_flank_length) ) rng = np.random.default_rng(seed) per_length = num_peptides // len(lengths) remainder = num_peptides % len(lengths) rows = [] used: set[str] = set() used_n_flanks: set[str] = set() used_c_flanks: set[str] = set() n_flanks = _random_sequences( rng=rng, length=n_flank_length, n=num_peptides, used=used_n_flanks ) c_flanks = _random_sequences( rng=rng, length=c_flank_length, n=num_peptides, used=used_c_flanks ) peptide_id = 0 for i, length in enumerate(lengths): count = per_length + (1 if i < remainder else 0) seqs = _random_sequences(rng=rng, length=length, n=count, used=used) for seq in seqs: rows.append( { "peptide_id": peptide_id, "peptide": seq, "peptide_length": length, "n_flank": n_flanks[peptide_id], "c_flank": c_flanks[peptide_id], } ) peptide_id += 1 return pd.DataFrame(rows) def _cross_join_dataset(peptides_df: pd.DataFrame, alleles: list[str]) -> pd.DataFrame: n_peptides = len(peptides_df) n_alleles = len(alleles) total = n_peptides * n_alleles peptide_vals = peptides_df["peptide"].values length_vals = peptides_df["peptide_length"].values peptide_id_vals = peptides_df["peptide_id"].values n_flank_vals = peptides_df["n_flank"].values c_flank_vals = peptides_df["c_flank"].values peptide_repeated = np.repeat(peptide_vals, n_alleles) length_repeated = np.repeat(length_vals, n_alleles) peptide_id_repeated = np.repeat(peptide_id_vals, n_alleles) n_flank_repeated = np.repeat(n_flank_vals, n_alleles) c_flank_repeated = np.repeat(c_flank_vals, n_alleles) allele_tiled = np.tile(np.array(alleles), n_peptides) out = pd.DataFrame( { "row_id": np.arange(total, dtype=np.int64), "peptide_id": peptide_id_repeated, "peptide_length": length_repeated, "peptide": peptide_repeated, "allele": allele_tiled, "n_flank": n_flank_repeated, "c_flank": c_flank_repeated, } ) return out def _pre_run_sanity_checks(peptides_df: pd.DataFrame, dataset: pd.DataFrame) -> None: for col in ["peptide", "n_flank", "c_flank"]: if not peptides_df[col].is_unique: dupes = int(peptides_df[col].duplicated().sum()) raise ValueError( "Pre-run sanity check failed: %s has %d repeated values " "across peptide entries." % (col, dupes) ) if peptides_df[["peptide", "n_flank", "c_flank"]].duplicated().any(): raise ValueError( "Pre-run sanity check failed: duplicate (peptide, n_flank, c_flank) tuples." ) if dataset[["peptide", "allele", "n_flank", "c_flank"]].duplicated().any(): raise ValueError( "Pre-run sanity check failed: duplicate (peptide, allele, n_flank, c_flank) rows." ) def _enforce_presentation_score_requirements( predictions: pd.DataFrame, label: str, min_fraction_above: float = 0.01, threshold: float = 0.2, min_max_score: float = 0.9, ) -> dict: stats = {} for col in ["pres_with_presentation_score", "pres_without_presentation_score"]: if col not in predictions.columns: continue scores = pd.to_numeric(predictions[col], errors="coerce") frac = float((scores > threshold).mean()) max_score = float(scores.max()) stats[col] = { "fraction_gt_threshold": frac, "threshold": threshold, "max_score": max_score, "min_required_fraction": min_fraction_above, "min_required_max_score": min_max_score, } if frac < min_fraction_above: raise ValueError( "%s failed presentation sanity: %s has %.6f fraction > %.3f, need >= %.3f" % (label, col, frac, threshold, min_fraction_above) ) if max_score <= min_max_score: raise ValueError( "%s failed presentation sanity: %s max %.6f, need > %.3f" % (label, col, max_score, min_max_score) ) return stats def _numeric_output_columns(df: pd.DataFrame) -> list[str]: return [c for c in df.columns if c not in BASE_COLUMNS + STRING_OUTPUT_COLUMNS] def _make_diff_frame(merged: pd.DataFrame, numeric_columns: list[str]) -> pd.DataFrame: out = merged[BASE_COLUMNS].copy() for col in numeric_columns: pt = pd.to_numeric(merged[f"{col}_pt"], errors="coerce") tf = pd.to_numeric(merged[f"{col}_tf"], errors="coerce") out[f"{col}_pt"] = pt out[f"{col}_tf"] = tf out[f"{col}_diff"] = pt - tf out[f"{col}_abs_diff"] = (pt - tf).abs() return out def _per_output_summary(diff_df: pd.DataFrame, numeric_columns: list[str]) -> pd.DataFrame: rows = [] for col in numeric_columns: abs_diff = pd.to_numeric(diff_df[f"{col}_abs_diff"], errors="coerce").dropna() if abs_diff.empty: continue rows.append( { "output": col, "count": int(abs_diff.shape[0]), "mean_abs_diff": float(abs_diff.mean()), "median_abs_diff": float(abs_diff.median()), "p95_abs_diff": float(abs_diff.quantile(0.95)), "p99_abs_diff": float(abs_diff.quantile(0.99)), "max_abs_diff": float(abs_diff.max()), } ) return pd.DataFrame(rows).sort_values("max_abs_diff", ascending=False) def _break_thresholds_for_output(output: str) -> float: if output.startswith("affinity_prediction") or output.endswith("_affinity"): return 0.1 # nM if "affinity_percentile" in output or "presentation_percentile" in output: return 0.1 # percentile points return 1e-4 # score-scale outputs def _break_analysis( merged: pd.DataFrame, diff_df: pd.DataFrame, numeric_columns: list[str], ) -> tuple[pd.DataFrame, pd.DataFrame]: break_rows = [] max_abs_per_row = np.zeros(len(diff_df), dtype=np.float64) max_output_per_row = np.array([""] * len(diff_df), dtype=object) for col in numeric_columns: abs_col = pd.to_numeric(diff_df[f"{col}_abs_diff"], errors="coerce").fillna(0.0) abs_vals = abs_col.values threshold = _break_thresholds_for_output(col) break_mask = abs_vals > threshold break_rows.append( { "output": col, "threshold_abs_diff": threshold, "break_count": int(break_mask.sum()), "break_rate": float(break_mask.mean()), } ) improve_mask = abs_vals > max_abs_per_row max_abs_per_row[improve_mask] = abs_vals[improve_mask] max_output_per_row[improve_mask] = col row_summary = merged[BASE_COLUMNS].copy() row_summary["max_abs_diff_any_output"] = max_abs_per_row row_summary["worst_output"] = max_output_per_row return pd.DataFrame(break_rows), row_summary def _plot_output_ranges(summary_df: pd.DataFrame, out_path: Path) -> None: plot_df = summary_df.sort_values("max_abs_diff", ascending=True) y = np.arange(len(plot_df)) fig_h = max(4.5, 0.3 * len(plot_df)) plt.figure(figsize=(10, fig_h)) plt.hlines(y, 0, plot_df["max_abs_diff"], color="#1f77b4", linewidth=2.0, label="max") plt.hlines( y, 0, plot_df["p99_abs_diff"], color="#ff7f0e", linewidth=2.0, alpha=0.9, label="p99", ) plt.hlines( y, 0, plot_df["p95_abs_diff"], color="#2ca02c", linewidth=2.0, alpha=0.9, label="p95", ) plt.plot(plot_df["mean_abs_diff"], y, "o", color="#d62728", label="mean", markersize=4) plt.yticks(y, plot_df["output"]) plt.xscale("log") plt.xlabel("Absolute difference (log scale)") plt.ylabel("Output") plt.title("TF vs PyTorch absolute difference ranges by output") plt.legend(loc="lower right") plt.tight_layout() plt.savefig(out_path, dpi=180) plt.close() def _plot_row_max_hist(row_summary: pd.DataFrame, out_path: Path) -> None: vals = row_summary["max_abs_diff_any_output"].values bins = np.logspace( np.log10(max(vals.min(), 1e-12)), np.log10(max(vals.max(), 1e-12)) if vals.max() > 0 else -12, 60, ) bins = np.unique(bins) if bins.shape[0] < 2: bins = np.array([1e-12, 1e-11]) plt.figure(figsize=(8, 4.5)) plt.hist(vals, bins=bins, color="#1f77b4", alpha=0.85) plt.xscale("log") plt.xlabel("Max absolute difference across outputs (per pMHC)") plt.ylabel("Count") plt.title("Per-row worst-case difference distribution") plt.tight_layout() plt.savefig(out_path, dpi=180) plt.close() def _plot_length_breakdown( diff_df: pd.DataFrame, target_output: str, out_path: Path, ) -> None: abs_col = f"{target_output}_abs_diff" if abs_col not in diff_df.columns: return grouped = ( diff_df.groupby(diff_df["peptide"].str.len())[abs_col] .agg(["mean", "median", "max"]) .reset_index() .rename(columns={"peptide": "peptide_length"}) ) grouped = grouped.sort_values("peptide_length") plt.figure(figsize=(8, 4.5)) plt.plot(grouped["peptide_length"], grouped["mean"], marker="o", label="mean") plt.plot(grouped["peptide_length"], grouped["median"], marker="o", label="median") plt.plot(grouped["peptide_length"], grouped["max"], marker="o", label="max") plt.yscale("log") plt.xlabel("Peptide length") plt.ylabel(f"{target_output} abs diff (log)") plt.title(f"Difference vs peptide length: {target_output}") plt.legend() plt.tight_layout() plt.savefig(out_path, dpi=180) plt.close() def _safe_plot_name(name: str) -> str: return re.sub(r"[^A-Za-z0-9._-]+", "_", name).strip("_") def _plot_per_output_hists( diff_df: pd.DataFrame, numeric_columns: list[str], out_dir: Path, ) -> None: out_dir.mkdir(parents=True, exist_ok=True) for output in numeric_columns: abs_col = f"{output}_abs_diff" if abs_col not in diff_df.columns: continue vals = pd.to_numeric(diff_df[abs_col], errors="coerce").dropna().values.astype(float) if vals.size == 0: continue positive = vals[vals > 0] if positive.size > 0: epsilon = positive.min() / 10.0 else: epsilon = 1e-18 plot_vals = np.where(vals > 0, vals, epsilon) lo = float(plot_vals.min()) hi = float(plot_vals.max()) if not np.isfinite(lo) or not np.isfinite(hi): continue if hi > lo: bins = np.logspace(np.log10(lo), np.log10(hi), 60) bins = np.unique(bins) if bins.shape[0] < 2: bins = np.array([lo, hi + lo * 1e-6], dtype=float) else: bins = np.array([lo * 0.9, hi * 1.1], dtype=float) bins = np.where(bins <= 0, epsilon, bins) plt.figure(figsize=(8, 4.5)) plt.hist(plot_vals, bins=bins, color="#1f77b4", alpha=0.85) plt.xscale("log") plt.xlabel(f"{output} absolute difference") plt.ylabel("Count") plt.title( f"{output} abs diff histogram (zero_count={(vals == 0).sum()}, max={vals.max():.3g})" ) plt.tight_layout() plot_name = f"{_safe_plot_name(output)}.png" plt.savefig(out_dir / plot_name, dpi=180) plt.close() def _write_break_report( out_path: Path, allele_count: int, peptide_count: int, pmhc_count: int, lengths: list[int], break_df: pd.DataFrame, row_summary: pd.DataFrame, top_rows: pd.DataFrame, ) -> None: lines = [] lines.append("Cross-allele TF vs PyTorch break analysis") lines.append(f"alleles: {allele_count}") lines.append(f"peptides: {peptide_count}") lines.append(f"pMHC rows: {pmhc_count}") lines.append(f"peptide lengths sampled: {lengths}") lines.append("") lines.append("Thresholded break counts by output:") for _, row in break_df.sort_values("break_rate", ascending=False).iterrows(): lines.append( " {output}: threshold={thr:.3g}, break_count={cnt}, break_rate={rate:.6g}".format( output=row["output"], thr=row["threshold_abs_diff"], cnt=int(row["break_count"]), rate=float(row["break_rate"]), ) ) lines.append("") lines.append( "Per-row max abs diff summary: mean={:.6g}, p95={:.6g}, p99={:.6g}, max={:.6g}".format( float(row_summary["max_abs_diff_any_output"].mean()), float(row_summary["max_abs_diff_any_output"].quantile(0.95)), float(row_summary["max_abs_diff_any_output"].quantile(0.99)), float(row_summary["max_abs_diff_any_output"].max()), ) ) lines.append("") lines.append("Top worst rows:") for _, row in top_rows.iterrows(): lines.append( " row_id={row_id} peptide={peptide} allele={allele} " "worst_output={worst_output} max_abs_diff={max_abs_diff_any_output:.6g}".format( **row.to_dict() ) ) out_path.write_text("\n".join(lines) + "\n") def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser() parser.add_argument("--tf-repo-root", required=True) parser.add_argument("--pytorch-repo-root", default=str(_repo_root_default())) parser.add_argument("--num-peptides", type=int, default=1000) parser.add_argument("--seed", type=int, default=1) parser.add_argument("--min-length", type=int, default=7) parser.add_argument("--max-length", type=int, default=15) parser.add_argument( "--allele-panel", choices=["iedb_plus_animals", "all_hla", "all"], default="iedb_plus_animals", ) parser.add_argument("--allele-regex", default=None) parser.add_argument( "--allow-missing-affinity-percentiles", action="store_true", help="Allow alleles that lack calibrated affinity percentiles.", ) parser.add_argument("--batch-size", type=int, default=4096) parser.add_argument("--centrality-measure", default="mean") parser.add_argument("--top-k", type=int, default=50) parser.add_argument("--out-dir", default="/tmp/mhcflurry-cross-allele-parity") parser.add_argument("--class1-models-dir", default=None) parser.add_argument("--presentation-models-dir", default=None) parser.add_argument("--processing-with-flanks-models-dir", default=None) parser.add_argument("--processing-without-flanks-models-dir", default=None) return parser def main() -> None: args = build_parser().parse_args() out_dir = Path(args.out_dir).resolve() out_dir.mkdir(parents=True, exist_ok=True) plots_dir = out_dir / "plots" plots_dir.mkdir(parents=True, exist_ok=True) pt_repo_root = str(Path(args.pytorch_repo_root).resolve()) tf_repo_root = str(Path(args.tf_repo_root).resolve()) pt_meta_cmd = _self_cmd("backend-metadata", "--repo-root", pt_repo_root) tf_meta_cmd = _self_cmd("backend-metadata", "--repo-root", tf_repo_root) for cmd in (pt_meta_cmd, tf_meta_cmd): _append_if_set(cmd, "--class1-models-dir", args.class1_models_dir) _append_if_set(cmd, "--presentation-models-dir", args.presentation_models_dir) _append_if_set( cmd, "--processing-with-flanks-models-dir", args.processing_with_flanks_models_dir, ) _append_if_set( cmd, "--processing-without-flanks-models-dir", args.processing_without_flanks_models_dir, ) pt_meta = _run_subprocess_json(pt_meta_cmd) tf_meta = _run_subprocess_json(tf_meta_cmd) class1_models_dir = args.class1_models_dir or pt_meta["class1_models_dir"] presentation_models_dir = args.presentation_models_dir or pt_meta["presentation_models_dir"] processing_with_flanks_models_dir = ( args.processing_with_flanks_models_dir or pt_meta["processing_with_flanks_models_dir"] ) processing_without_flanks_models_dir = ( args.processing_without_flanks_models_dir or pt_meta["processing_without_flanks_models_dir"] ) alleles = _select_alleles( pt_meta=pt_meta, tf_meta=tf_meta, allele_panel=args.allele_panel, allele_regex=args.allele_regex, require_percentiles=(not args.allow_missing_affinity_percentiles), ) pt_min_len, pt_max_len = pt_meta["affinity_supported_peptide_lengths"] tf_min_len, tf_max_len = tf_meta["affinity_supported_peptide_lengths"] lengths = _lengths_to_sample( min_supported=max(int(pt_min_len), int(tf_min_len)), max_supported=min(int(pt_max_len), int(tf_max_len)), min_requested=args.min_length, max_requested=args.max_length, ) pt_with = pt_meta["with_flanks_lengths"] tf_with = tf_meta["with_flanks_lengths"] if pt_with is None or tf_with is None: raise ValueError("With-flanks processing models are required for this experiment.") n_flank_length = min(int(pt_with["n_flank"]), int(tf_with["n_flank"])) c_flank_length = min(int(pt_with["c_flank"]), int(tf_with["c_flank"])) peptides_df = _generate_uniform_peptides( num_peptides=args.num_peptides, lengths=lengths, n_flank_length=n_flank_length, c_flank_length=c_flank_length, seed=args.seed, ) dataset = _cross_join_dataset(peptides_df=peptides_df, alleles=alleles) _pre_run_sanity_checks(peptides_df=peptides_df, dataset=dataset) dataset_path = out_dir / "dataset.csv.gz" peptides_path = out_dir / "peptides.csv.gz" alleles_path = out_dir / "alleles.txt" dataset.to_csv(dataset_path, index=False, compression="gzip") peptides_df.to_csv(peptides_path, index=False, compression="gzip") alleles_path.write_text("\n".join(alleles) + "\n") pt_predictions_path = out_dir / "pt_predictions.csv.gz" tf_predictions_path = out_dir / "tf_predictions.csv.gz" summary_path = out_dir / "diff_summary.json" report_path = out_dir / "diff_report.txt" outliers_path = out_dir / "top_outliers.csv.gz" pt_predict_cmd = _self_cmd( "predict-backend", "--repo-root", pt_repo_root, "--input-csv", str(dataset_path), "--output-csv", str(pt_predictions_path), "--batch-size", str(args.batch_size), "--centrality-measure", args.centrality_measure, ) tf_predict_cmd = _self_cmd( "predict-backend", "--repo-root", tf_repo_root, "--input-csv", str(dataset_path), "--output-csv", str(tf_predictions_path), "--batch-size", str(args.batch_size), "--centrality-measure", args.centrality_measure, ) for cmd in (pt_predict_cmd, tf_predict_cmd): _append_if_set(cmd, "--class1-models-dir", class1_models_dir) _append_if_set(cmd, "--presentation-models-dir", presentation_models_dir) _append_if_set( cmd, "--processing-with-flanks-models-dir", processing_with_flanks_models_dir, ) _append_if_set( cmd, "--processing-without-flanks-models-dir", processing_without_flanks_models_dir, ) _run_subprocess(pt_predict_cmd) _run_subprocess(tf_predict_cmd) _run_subprocess( _self_cmd( "analyze", "--pt-predictions-csv", str(pt_predictions_path), "--tf-predictions-csv", str(tf_predictions_path), "--summary-json", str(summary_path), "--report-txt", str(report_path), "--top-outliers-csv", str(outliers_path), "--top-k", str(args.top_k), ) ) pt = pd.read_csv(pt_predictions_path, keep_default_na=False) tf = pd.read_csv(tf_predictions_path, keep_default_na=False) pt_presentation_stats = _enforce_presentation_score_requirements( predictions=pt, label="PyTorch", ) tf_presentation_stats = _enforce_presentation_score_requirements( predictions=tf, label="TensorFlow", ) merged = pt.merge(tf, on=BASE_COLUMNS, suffixes=("_pt", "_tf"), how="inner") numeric_columns = _numeric_output_columns(pt) diff_df = _make_diff_frame(merged, numeric_columns=numeric_columns) output_summary_df = _per_output_summary(diff_df, numeric_columns=numeric_columns) break_df, row_summary = _break_analysis( merged=merged, diff_df=diff_df, numeric_columns=numeric_columns ) output_summary_path = out_dir / "output_diff_summary.csv" break_summary_path = out_dir / "break_summary.csv" row_summary_path = out_dir / "row_worst_diff.csv.gz" top_rows_path = out_dir / "top_rows_by_any_output.csv.gz" output_summary_df.to_csv(output_summary_path, index=False) break_df.to_csv(break_summary_path, index=False) row_summary.to_csv(row_summary_path, index=False, compression="gzip") top_rows = row_summary.sort_values("max_abs_diff_any_output", ascending=False).head(args.top_k) top_rows.to_csv(top_rows_path, index=False, compression="gzip") _plot_output_ranges(output_summary_df, plots_dir / "output_abs_diff_ranges.png") _plot_row_max_hist(row_summary, plots_dir / "row_max_abs_diff_hist.png") if "pres_with_presentation_score" in numeric_columns: _plot_length_breakdown( diff_df, target_output="pres_with_presentation_score", out_path=plots_dir / "length_breakdown_pres_with_presentation_score.png", ) _plot_per_output_hists( diff_df=diff_df, numeric_columns=numeric_columns, out_dir=plots_dir / "per_output_abs_diff_hist", ) _write_break_report( out_path=out_dir / "break_analysis.txt", allele_count=len(alleles), peptide_count=len(peptides_df), pmhc_count=len(dataset), lengths=lengths, break_df=break_df, row_summary=row_summary, top_rows=top_rows, ) metadata = { "allele_count": len(alleles), "peptide_count": int(len(peptides_df)), "pmhc_count": int(len(dataset)), "lengths": lengths, "n_flank_length": n_flank_length, "c_flank_length": c_flank_length, "allele_panel": args.allele_panel, "pytorch_repo_root": pt_repo_root, "tf_repo_root": tf_repo_root, "presentation_sanity": { "pytorch": pt_presentation_stats, "tensorflow": tf_presentation_stats, }, } with open(out_dir / "run_metadata.json", "w") as out: json.dump(metadata, out, indent=2, sort_keys=True) print("Alleles:", len(alleles)) print("Peptides:", len(peptides_df)) print("pMHC rows:", len(dataset)) print("Flank lengths:", {"n_flank": n_flank_length, "c_flank": c_flank_length}) print("Presentation sanity (PyTorch):", pt_presentation_stats) print("Presentation sanity (TensorFlow):", tf_presentation_stats) print("Dataset:", dataset_path) print("PT predictions:", pt_predictions_path) print("TF predictions:", tf_predictions_path) print("Diff summary:", summary_path) print("Output diff summary:", output_summary_path) print("Break summary:", break_summary_path) print("Break analysis:", out_dir / "break_analysis.txt") print("Plots dir:", plots_dir) if __name__ == "__main__": main() ================================================ FILE: scripts/extract_high_presentation_fixture.py ================================================ """ Extract high-presentation TF rows for release regression fixtures. Given a TF predictions table from `cross_allele_parity_analysis.py` or `compare_tf_pytorch_random_outputs.py`, this script: 1. Finds peptide+flank contexts where any allele has presentation score > threshold. 2. Keeps all allele rows for those contexts (including low-scoring alleles). 3. Writes a compact fixture CSV and metadata JSON for unit tests. Example: python scripts/extract_high_presentation_fixture.py \ --tf-predictions-csv /tmp/mhcflurry-cross-allele-1000-randflanks/tf_predictions.csv.gz \ --out-csv test/data/master_released_class1_presentation_highscore_rows.csv.gz \ --out-metadata-json test/data/master_released_class1_presentation_highscore_rows_metadata.json """ from __future__ import annotations import argparse import json from pathlib import Path import pandas as pd CONTEXT_COLUMNS = ["peptide", "n_flank", "c_flank"] SCORE_COLUMNS = [ "pres_with_presentation_score", "pres_without_presentation_score", ] def _collect_model_metadata() -> dict: metadata = {} try: from mhcflurry import Class1PresentationPredictor # pylint: disable=import-error from mhcflurry.downloads import ( # pylint: disable=import-error configure, get_current_release, ) configure() predictor = Class1PresentationPredictor.load() metadata.update( { "release": get_current_release(), "presentation_provenance": predictor.provenance_string, "presentation_internal_affinity_provenance": ( predictor.affinity_predictor.provenance_string ), } ) except Exception as exc: # pragma: no cover - metadata capture is best-effort metadata["model_metadata_error"] = str(exc) return metadata def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser() parser.add_argument("--tf-predictions-csv", required=True) parser.add_argument("--out-csv", required=True) parser.add_argument("--out-metadata-json", required=True) parser.add_argument("--high-score-threshold", type=float, default=0.9) parser.add_argument("--low-score-threshold", type=float, default=0.2) parser.add_argument( "--allow-contexts-without-low-alleles", action="store_true", help=( "Do not enforce that each selected peptide+flank context has at least one " "allele below --low-score-threshold." ), ) return parser def main() -> None: args = build_parser().parse_args() tf_predictions_path = Path(args.tf_predictions_csv).resolve() out_csv = Path(args.out_csv).resolve() out_metadata = Path(args.out_metadata_json).resolve() out_csv.parent.mkdir(parents=True, exist_ok=True) out_metadata.parent.mkdir(parents=True, exist_ok=True) df = pd.read_csv(tf_predictions_path, keep_default_na=False) missing = [c for c in CONTEXT_COLUMNS + SCORE_COLUMNS + ["allele"] if c not in df.columns] if missing: raise ValueError("TF predictions missing required columns: %s" % missing) context_max = df.groupby(CONTEXT_COLUMNS, observed=True)[SCORE_COLUMNS].max() selected_context_mask = ( (context_max["pres_with_presentation_score"] > args.high_score_threshold) | (context_max["pres_without_presentation_score"] > args.high_score_threshold) ) selected_contexts = context_max[selected_context_mask].reset_index() if selected_contexts.empty: raise ValueError( "No contexts found above high score threshold %.3f" % args.high_score_threshold ) selected = df.merge(selected_contexts[CONTEXT_COLUMNS], on=CONTEXT_COLUMNS, how="inner") selected = selected.sort_values(CONTEXT_COLUMNS + ["allele"]).reset_index(drop=True) expected_allele_count = int(df["allele"].nunique()) alleles_per_context = selected.groupby(CONTEXT_COLUMNS, observed=True)["allele"].nunique() if not (alleles_per_context == expected_allele_count).all(): bad = alleles_per_context[alleles_per_context != expected_allele_count] raise ValueError( "Expected %d alleles per selected context; got mismatches for %d contexts." % (expected_allele_count, int(bad.shape[0])) ) low_score_stats = {} for score_col in SCORE_COLUMNS: context_min = selected.groupby(CONTEXT_COLUMNS, observed=True)[score_col].min() contexts_with_low = int((context_min < args.low_score_threshold).sum()) low_score_stats[score_col] = { "contexts_with_low_allele": contexts_with_low, "context_count": int(context_min.shape[0]), "low_score_threshold": args.low_score_threshold, } if ( contexts_with_low < int(context_min.shape[0]) and not args.allow_contexts_without_low_alleles ): raise ValueError( "Selected contexts do not all include low-scoring alleles for %s " "(%d/%d below %.3f)." % ( score_col, contexts_with_low, int(context_min.shape[0]), args.low_score_threshold, ) ) selected.to_csv(out_csv, index=False, compression="gzip") metadata = { "source_tf_predictions_csv": str(tf_predictions_path), "row_count": int(selected.shape[0]), "context_count": int(selected_contexts.shape[0]), "allele_count": expected_allele_count, "high_score_threshold": float(args.high_score_threshold), "low_score_threshold": float(args.low_score_threshold), "score_columns": SCORE_COLUMNS, "low_score_stats": low_score_stats, } metadata.update(_collect_model_metadata()) with open(out_metadata, "w") as out: json.dump(metadata, out, indent=2, sort_keys=True) print("Wrote fixture rows:", selected.shape[0]) print("Selected contexts:", selected_contexts.shape[0]) print("Alleles per context:", expected_allele_count) print("Fixture CSV:", out_csv) print("Fixture metadata:", out_metadata) if __name__ == "__main__": main() ================================================ FILE: scripts/generate_fixture_error_report.py ================================================ """ Generate an HTML parity/error report against cached master-release fixtures. The report compares the current branch's released affinity and presentation predictors against fixture data stored under ``test/data``. It writes a self-contained HTML file with inline SVG plots plus CSV/JSON summaries. Example: ./.venv/bin/python scripts/generate_fixture_error_report.py \ --out-dir /tmp/mhcflurry-fixture-error-report """ from __future__ import annotations import argparse import html import json import math import warnings from dataclasses import dataclass from datetime import datetime from pathlib import Path from typing import Iterable import numpy as np import pandas as pd from mhcflurry import Class1AffinityPredictor, Class1PresentationPredictor from mhcflurry.downloads import ( configure, get_current_release, get_default_class1_models_dir, get_default_class1_presentation_models_dir, get_path, ) from mhcflurry.testing_utils import cleanup, startup DATA_DIR = Path(__file__).resolve().parents[1] / "test" / "data" AFFINITY_FIXTURE_PATH = DATA_DIR / "master_released_class1_affinity_predictions.json" PRESENTATION_FIXTURE_PATH = ( DATA_DIR / "master_released_class1_presentation_highscore_rows.csv.gz" ) PRESENTATION_METADATA_PATH = ( DATA_DIR / "master_released_class1_presentation_highscore_rows_metadata.json" ) BASE_COLUMNS = ["row_id", "peptide", "allele", "n_flank", "c_flank"] SVG_NS = "http://www.w3.org/2000/svg" @dataclass class MetricReport: key: str title: str section: str unit: str df: pd.DataFrame reference_label: str current_label: str log_scale: bool = False use_relative_histogram: bool = False @property def summary(self) -> dict: error = self.df["error"].to_numpy(dtype=np.float64) abs_error = self.df["abs_error"].to_numpy(dtype=np.float64) result = { "count": int(len(self.df)), "mean_error": float(error.mean()) if len(error) else float("nan"), "mean_abs_error": float(abs_error.mean()) if len(abs_error) else float("nan"), "rmse": float(np.sqrt(np.mean(np.square(error)))) if len(error) else float("nan"), "max_abs_error": float(abs_error.max()) if len(abs_error) else float("nan"), } if "abs_pct_error" in self.df.columns: abs_pct = self.df["abs_pct_error"].to_numpy(dtype=np.float64) result["mean_abs_pct_error"] = float(abs_pct.mean()) if len(abs_pct) else float("nan") result["max_abs_pct_error"] = float(abs_pct.max()) if len(abs_pct) else float("nan") return result def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser() parser.add_argument( "--out-dir", default="/tmp/mhcflurry-fixture-error-report", help="Directory to receive the HTML report, CSVs, and summary JSON.", ) return parser def _format_number(value: float, digits: int = 6) -> str: if value is None or (isinstance(value, float) and not math.isfinite(value)): return "nan" abs_value = abs(value) if abs_value == 0.0: return "0" if abs_value >= 1e4 or abs_value < 1e-4: return f"{value:.3e}" return f"{value:.{digits}f}" def _format_percent(value: float) -> str: if value is None or (isinstance(value, float) and not math.isfinite(value)): return "nan" return f"{value:.3e}%" def _as_float_array(values: Iterable[float]) -> np.ndarray: return np.asarray(list(values), dtype=np.float64) def _clip_positive(values: np.ndarray) -> np.ndarray: positive = values[values > 0] floor = float(positive.min()) if positive.size else 1e-12 return np.clip(values, floor, None) def _make_error_frame( base_df: pd.DataFrame, reference_column: str, current_column: str, extra_columns: list[str] | None = None, ) -> pd.DataFrame: extra_columns = extra_columns or [] keep_columns = [c for c in BASE_COLUMNS if c in base_df.columns] + extra_columns result = base_df[keep_columns].copy() result["reference"] = base_df[reference_column].to_numpy(dtype=np.float64) result["current"] = base_df[current_column].to_numpy(dtype=np.float64) result["error"] = result["current"] - result["reference"] result["abs_error"] = result["error"].abs() positive_ref = np.clip(np.abs(result["reference"]), 1e-12, None) result["pct_error"] = 100.0 * result["error"] / positive_ref result["abs_pct_error"] = result["pct_error"].abs() return result.sort_values("abs_error", ascending=False).reset_index(drop=True) def _load_affinity_fixture() -> dict: with AFFINITY_FIXTURE_PATH.open("r") as handle: return json.load(handle) def _load_presentation_fixture() -> tuple[pd.DataFrame, dict]: fixture_df = pd.read_csv(PRESENTATION_FIXTURE_PATH, keep_default_na=False) with PRESENTATION_METADATA_PATH.open("r") as handle: metadata = json.load(handle) return fixture_df, metadata def _predict_current_outputs() -> tuple[dict, pd.DataFrame, dict]: configure() default_affinity = Class1AffinityPredictor.load(get_default_class1_models_dir()) allele_specific = Class1AffinityPredictor.load(get_path("models_class1", "models")) pan = Class1AffinityPredictor.load(get_path("models_class1_pan", "models.combined")) presentation_predictor = Class1PresentationPredictor.load( get_default_class1_presentation_models_dir() ) affinity_fixture = _load_affinity_fixture() fixture_df, presentation_metadata = _load_presentation_fixture() spec_fx = affinity_fixture["allele_specific"] pan_fx = affinity_fixture["pan_allele"] spec_current = allele_specific.predict( peptides=spec_fx["peptides"], alleles=spec_fx["alleles"], ) pan_current = pan.predict( peptides=pan_fx["peptides"], alleles=pan_fx["alleles"], ) spec_df = pd.DataFrame( { "peptide": spec_fx["peptides"], "allele": spec_fx["alleles"], "reference": np.asarray(spec_fx["predictions"], dtype=np.float64), "current": np.asarray(spec_current, dtype=np.float64), } ) spec_df["error"] = spec_df["current"] - spec_df["reference"] spec_df["abs_error"] = spec_df["error"].abs() spec_df["pct_error"] = 100.0 * spec_df["error"] / np.clip( spec_df["reference"].abs(), 1e-12, None ) spec_df["abs_pct_error"] = spec_df["pct_error"].abs() spec_df = spec_df.sort_values("abs_error", ascending=False).reset_index(drop=True) pan_df = pd.DataFrame( { "peptide": pan_fx["peptides"], "allele": pan_fx["alleles"], "reference": np.asarray(pan_fx["predictions"], dtype=np.float64), "current": np.asarray(pan_current, dtype=np.float64), } ) pan_df["error"] = pan_df["current"] - pan_df["reference"] pan_df["abs_error"] = pan_df["error"].abs() pan_df["pct_error"] = 100.0 * pan_df["error"] / np.clip( pan_df["reference"].abs(), 1e-12, None ) pan_df["abs_pct_error"] = pan_df["pct_error"].abs() pan_df = pan_df.sort_values("abs_error", ascending=False).reset_index(drop=True) peptides = fixture_df["peptide"].tolist() alleles = fixture_df["allele"].tolist() n_flanks = fixture_df["n_flank"].tolist() c_flanks = fixture_df["c_flank"].tolist() with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=r".*Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) affinity_df = default_affinity.predict_to_dataframe( peptides=peptides, alleles=alleles, throw=False, include_percentile_ranks=True, include_confidence_intervals=True, centrality_measure="mean", model_kwargs={"batch_size": 4096}, ) sample_names = alleles allele_map = {allele: [allele] for allele in sorted(set(alleles))} with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=r".*Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) pres_with_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=n_flanks, c_flanks=c_flanks, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") pres_without_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=None, c_flanks=None, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") predicted = fixture_df[BASE_COLUMNS].copy() predicted["affinity_prediction_current"] = affinity_df["prediction"].to_numpy( dtype=np.float64 ) predicted["processing_with_score_current"] = pres_with_df["processing_score"].to_numpy( dtype=np.float64 ) predicted[ "pres_with_presentation_score_current" ] = pres_with_df["presentation_score"].to_numpy(dtype=np.float64) predicted["processing_without_score_current"] = pres_without_df[ "processing_score" ].to_numpy(dtype=np.float64) predicted[ "pres_without_presentation_score_current" ] = pres_without_df["presentation_score"].to_numpy(dtype=np.float64) current_metadata = { "release": get_current_release(), "presentation_provenance": presentation_predictor.provenance_string, "presentation_internal_affinity_provenance": ( presentation_predictor.affinity_predictor.provenance_string ), } combined_metadata = { "affinity_fixture_release": affinity_fixture.get("release"), "presentation_fixture": presentation_metadata, "current": current_metadata, } return { "released_affinity_allele_specific": spec_df, "released_affinity_pan_allele": pan_df, "presentation_fixture_predictions": predicted, }, fixture_df, combined_metadata def _compute_metric_reports( current_outputs: dict, fixture_df: pd.DataFrame, ) -> list[MetricReport]: predicted = current_outputs["presentation_fixture_predictions"] combined = fixture_df[BASE_COLUMNS].copy() for column in [ "affinity_prediction", "processing_with_score", "pres_with_presentation_score", "processing_without_score", "pres_without_presentation_score", ]: combined[column] = fixture_df[column] for column in predicted.columns: if column.endswith("_current"): combined[column] = predicted[column] return [ MetricReport( key="released_affinity_allele_specific", title="Released affinity parity: allele-specific models", section="Affinity", unit="nM", df=current_outputs["released_affinity_allele_specific"], reference_label="master fixture affinity", current_label="current branch affinity", log_scale=True, use_relative_histogram=True, ), MetricReport( key="released_affinity_pan_allele", title="Released affinity parity: pan-allele models", section="Affinity", unit="nM", df=current_outputs["released_affinity_pan_allele"], reference_label="master fixture affinity", current_label="current branch affinity", log_scale=True, use_relative_histogram=True, ), MetricReport( key="presentation_fixture_affinity", title="Presentation fixture affinity", section="Affinity", unit="nM", df=_make_error_frame( combined, "affinity_prediction", "affinity_prediction_current", ), reference_label="master fixture affinity", current_label="current branch affinity", log_scale=True, use_relative_histogram=True, ), MetricReport( key="processing_with_score", title="Processing score with flanks", section="Processing", unit="score", df=_make_error_frame( combined, "processing_with_score", "processing_with_score_current", ), reference_label="master fixture processing score", current_label="current branch processing score", ), MetricReport( key="processing_without_score", title="Processing score without flanks", section="Processing", unit="score", df=_make_error_frame( combined, "processing_without_score", "processing_without_score_current", ), reference_label="master fixture processing score", current_label="current branch processing score", ), MetricReport( key="presentation_with_score", title="Presentation score with flanks", section="Presentation", unit="score", df=_make_error_frame( combined, "pres_with_presentation_score", "pres_with_presentation_score_current", ), reference_label="master fixture presentation score", current_label="current branch presentation score", ), MetricReport( key="presentation_without_score", title="Presentation score without flanks", section="Presentation", unit="score", df=_make_error_frame( combined, "pres_without_presentation_score", "pres_without_presentation_score_current", ), reference_label="master fixture presentation score", current_label="current branch presentation score", ), ] def _axis_range(values: np.ndarray) -> tuple[float, float]: data_min = float(np.min(values)) data_max = float(np.max(values)) if data_min == data_max: pad = 1.0 if data_min == 0.0 else abs(data_min) * 0.05 return data_min - pad, data_max + pad pad = (data_max - data_min) * 0.05 return data_min - pad, data_max + pad def _tick_values(start: float, stop: float, count: int = 5) -> list[float]: if count < 2: return [start] return [start + (stop - start) * i / (count - 1) for i in range(count)] def _format_tick(value: float, log_scale: bool = False) -> str: if log_scale: return _format_number(10.0 ** value, digits=3) return _format_number(value, digits=3) def _render_scatter_svg( df: pd.DataFrame, title: str, log_scale: bool, x_label: str, y_label: str, ) -> str: width = 520 height = 360 margin_left = 70 margin_right = 24 margin_top = 36 margin_bottom = 58 plot_width = width - margin_left - margin_right plot_height = height - margin_top - margin_bottom x = df["reference"].to_numpy(dtype=np.float64) y = df["current"].to_numpy(dtype=np.float64) if log_scale: x = np.log10(_clip_positive(x)) y = np.log10(_clip_positive(y)) combined = np.concatenate([x, y]) x_min, x_max = _axis_range(combined) y_min, y_max = x_min, x_max def scale_x(value: float) -> float: return margin_left + (value - x_min) / (x_max - x_min) * plot_width def scale_y(value: float) -> float: return margin_top + plot_height - (value - y_min) / (y_max - y_min) * plot_height parts = [ f'', f'', f'{html.escape(title)}', ] for tick in _tick_values(x_min, x_max): x_pos = scale_x(tick) y_pos = scale_y(tick) parts.append( f'' ) parts.append( f'' ) tick_label = html.escape(_format_tick(tick, log_scale=log_scale)) parts.append( f'{tick_label}' ) parts.append( f'{tick_label}' ) parts.append( f'' ) parts.append( f'' ) for x_val, y_val in zip(x, y): parts.append( f'' ) parts.append( f'{html.escape(x_label)}' ) parts.append( f'{html.escape(y_label)}' ) parts.append("") return "".join(parts) def _render_histogram_svg( values: np.ndarray, title: str, x_label: str, color: str, ) -> str: width = 520 height = 280 margin_left = 70 margin_right = 24 margin_top = 36 margin_bottom = 58 plot_width = width - margin_left - margin_right plot_height = height - margin_top - margin_bottom finite_values = values[np.isfinite(values)] if finite_values.size == 0: finite_values = np.array([0.0], dtype=np.float64) bound = float(np.max(np.abs(finite_values))) if bound == 0.0: bound = 1e-12 bins = min(24, max(8, int(math.sqrt(finite_values.size)) * 2)) hist, edges = np.histogram(finite_values, bins=bins, range=(-bound, bound)) y_max = max(int(hist.max()), 1) def scale_x(value: float) -> float: return margin_left + (value + bound) / (2.0 * bound) * plot_width def scale_y(value: float) -> float: return margin_top + plot_height - value / y_max * plot_height bar_width = plot_width / bins parts = [ f'', f'', f'{html.escape(title)}', ] for tick in _tick_values(-bound, bound): x_pos = scale_x(tick) parts.append( f'' ) parts.append( f'{html.escape(_format_number(tick, digits=3))}' ) for tick in _tick_values(0.0, float(y_max), count=5): y_pos = scale_y(tick) parts.append( f'' ) parts.append( f'{int(round(tick))}' ) parts.append( f'' ) for i, count in enumerate(hist): x_pos = margin_left + i * bar_width + 1.5 y_pos = scale_y(float(count)) bar_height = margin_top + plot_height - y_pos parts.append( f'' ) zero_x = scale_x(0.0) parts.append( f'' ) parts.append( f'{html.escape(x_label)}' ) parts.append( f'count' ) parts.append("") return "".join(parts) def _render_summary_table(reports: list[MetricReport]) -> str: rows = [] for report in reports: summary = report.summary mean_abs_pct = summary.get("mean_abs_pct_error") max_abs_pct = summary.get("max_abs_pct_error") rows.append( "" f"{html.escape(report.section)}" f"{html.escape(report.title)}" f"{summary['count']}" f"{html.escape(_format_number(summary['mean_abs_error']))}" f"{html.escape(_format_number(summary['max_abs_error']))}" f"{html.escape(_format_number(summary['rmse']))}" f"{html.escape(_format_percent(mean_abs_pct)) if mean_abs_pct is not None else '-'}" f"{html.escape(_format_percent(max_abs_pct)) if max_abs_pct is not None else '-'}" "" ) return ( "" "" "" "" "" + "".join(rows) + "
SectionMetricNMean abs errorMax abs errorRMSEMean abs pct errorMax abs pct error
" ) def _render_top_error_table(report: MetricReport, limit: int = 10) -> str: columns = [c for c in ["row_id", "peptide", "allele", "n_flank", "c_flank"] if c in report.df] columns += ["reference", "current", "error", "abs_error"] if "abs_pct_error" in report.df.columns: columns.append("abs_pct_error") subset = report.df[columns].head(limit) header = "".join(f"{html.escape(col)}" for col in subset.columns) body_rows = [] for _, row in subset.iterrows(): cells = [] for col in subset.columns: value = row[col] if isinstance(value, (float, np.floating)): if col == "abs_pct_error": formatted = _format_percent(float(value)) else: formatted = _format_number(float(value)) else: formatted = str(value) cells.append(f"{html.escape(formatted)}") body_rows.append("" + "".join(cells) + "") return ( "" f"{header}" "" + "".join(body_rows) + "
" ) def _render_metric_section(report: MetricReport) -> str: hist_values = ( report.df["pct_error"].to_numpy(dtype=np.float64) if report.use_relative_histogram else report.df["error"].to_numpy(dtype=np.float64) ) hist_label = "percent error (%)" if report.use_relative_histogram else "signed error" scatter_svg = _render_scatter_svg( report.df, title=report.title, log_scale=report.log_scale, x_label=report.reference_label + (" (log10)" if report.log_scale else ""), y_label=report.current_label + (" (log10)" if report.log_scale else ""), ) hist_svg = _render_histogram_svg( hist_values, title=report.title + " error distribution", x_label=hist_label, color="#c2410c" if report.use_relative_histogram else "#2563eb", ) summary = report.summary metric_blurb = ( f"N={summary['count']}, mean abs error={_format_number(summary['mean_abs_error'])} {report.unit}, " f"max abs error={_format_number(summary['max_abs_error'])} {report.unit}, " f"RMSE={_format_number(summary['rmse'])} {report.unit}." ) if report.use_relative_histogram: metric_blurb += ( " Mean abs pct error=" + _format_percent(summary["mean_abs_pct_error"]) + ", max abs pct error=" + _format_percent(summary["max_abs_pct_error"]) + "." ) return ( "
" f"

{html.escape(report.title)}

" f"

{html.escape(metric_blurb)}

" "
" f"
{scatter_svg}
" f"
{hist_svg}
" "
" "
" "

Largest absolute errors

" f"{_render_top_error_table(report)}" "
" "
" ) def _write_outputs( out_dir: Path, reports: list[MetricReport], metadata: dict, ) -> None: out_dir.mkdir(parents=True, exist_ok=True) csv_dir = out_dir / "csv" csv_dir.mkdir(parents=True, exist_ok=True) summary_json = { "generated_at": datetime.now().isoformat(), "metadata": metadata, "metrics": {report.key: report.summary for report in reports}, } for report in reports: report.df.to_csv(csv_dir / f"{report.key}.csv", index=False) with (out_dir / "summary.json").open("w") as handle: json.dump(summary_json, handle, indent=2, sort_keys=True) sections = [] grouped_reports = { "Affinity": [r for r in reports if r.section == "Affinity"], "Processing": [r for r in reports if r.section == "Processing"], "Presentation": [r for r in reports if r.section == "Presentation"], } for section_name, section_reports in grouped_reports.items(): sections.append( f"

{html.escape(section_name)}

" + "".join(_render_metric_section(report) for report in section_reports) + "
" ) notes = [] affinity_fixture_release = metadata.get("affinity_fixture_release") current_release = metadata["current"]["release"] if affinity_fixture_release and affinity_fixture_release != current_release: notes.append( "Affinity fixture release " + str(affinity_fixture_release) + " does not match current downloads release " + str(current_release) + "." ) presentation_fixture = metadata.get("presentation_fixture", {}) if ( presentation_fixture.get("release") and presentation_fixture.get("release") != current_release ): notes.append( "Presentation fixture release " + str(presentation_fixture.get("release")) + " does not match current downloads release " + str(current_release) + "." ) if ( presentation_fixture.get("presentation_provenance") and presentation_fixture.get("presentation_provenance") != metadata["current"]["presentation_provenance"] ): notes.append("Presentation predictor provenance differs from fixture metadata.") if ( presentation_fixture.get("presentation_internal_affinity_provenance") and presentation_fixture.get("presentation_internal_affinity_provenance") != metadata["current"]["presentation_internal_affinity_provenance"] ): notes.append("Internal affinity provenance differs from fixture metadata.") note_html = ( "
" + "".join(f"

{html.escape(note)}

" for note in notes) + "
" if notes else "

Fixture metadata matches the current downloaded release and predictor provenance.

" ) html_text = f""" MHCflurry fixture error report

MHCflurry Fixture Error Report

This report compares cached master-branch fixtures in test/data against predictions from the current branch's downloaded released models. Affinity uses the released-model JSON fixture; processing and presentation use the curated high-score presentation CSV fixture.

Generated {html.escape(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))}. Current release: {html.escape(str(current_release))}. Output dir: {html.escape(str(out_dir))}.

{note_html}

Summary

{_render_summary_table(reports)}
{''.join(sections)}
""" (out_dir / "index.html").write_text(html_text) def main() -> None: args = build_parser().parse_args() out_dir = Path(args.out_dir).resolve() startup() try: current_outputs, fixture_df, metadata = _predict_current_outputs() reports = _compute_metric_reports(current_outputs, fixture_df) _write_outputs(out_dir, reports, metadata) print("Wrote HTML report:", out_dir / "index.html") print("Wrote summary JSON:", out_dir / "summary.json") print("Wrote CSV directory:", out_dir / "csv") finally: cleanup() if __name__ == "__main__": main() ================================================ FILE: scripts/modal_train_mhcflurry.py ================================================ """ Run MHCflurry training jobs on Modal. This script is intentionally generic: pass any supported training command template and run multiple workers in parallel. Example: modal run scripts/modal_train_mhcflurry.py \ --command-template "mhcflurry-class1-train-processing-models --data /artifacts/data/train.csv --models-dir /artifacts/runs/{run_name} --verbosity 1" \ --workers 4 The command template supports: {run_name} -> unique run id per worker {worker} -> worker index (0-based) """ from __future__ import annotations import datetime import uuid import modal REPO_URL = "https://github.com/openvax/mhcflurry.git" REPO_REF = "master" REPO_DIR = "/workspace/mhcflurry" ARTIFACTS_DIR = "/artifacts" VOLUME_NAME = "mhcflurry-training" ALLOWED_TRAINING_COMMANDS = { "mhcflurry-class1-train-allele-specific-models", "mhcflurry-class1-train-pan-allele-models", "mhcflurry-class1-train-processing-models", "mhcflurry-class1-train-presentation-models", } def _install_repo(): """Build helper used at image build time.""" # Import is intentionally local to keep image build behavior explicit. import subprocess subprocess.run( [ "bash", "-lc", ( "set -euxo pipefail; " f"git clone --depth 1 --branch {REPO_REF} {REPO_URL} {REPO_DIR}; " f"cd {REPO_DIR}; " "python -m pip install --upgrade pip; " "python -m pip install -e ." ), ], check=True, ) image = ( modal.Image.debian_slim(python_version="3.12") .apt_install("git") .run_function(_install_repo) .env( { # Keep torch memory allocator behavior predictable across jobs. "PYTORCH_CUDA_ALLOC_CONF": "expandable_segments:True", # Allow override of default downloads location if desired. "MHCFLURRY_DOWNLOADS_DIR": f"{ARTIFACTS_DIR}/downloads", } ) ) app = modal.App("mhcflurry-train", image=image) volume = modal.Volume.from_name(VOLUME_NAME, create_if_missing=True) @app.function( gpu="A100", timeout=12 * 60 * 60, cpu=8, memory=32768, volumes={ARTIFACTS_DIR: volume}, ) def run_training_job(job: dict) -> dict: import os import shlex import subprocess import time run_name = job["run_name"] command = job["command"] run_dir = os.path.join(ARTIFACTS_DIR, "runs", run_name) os.makedirs(run_dir, exist_ok=True) argv = shlex.split(command) if not argv: raise ValueError("Empty command") if argv[0] not in ALLOWED_TRAINING_COMMANDS: raise ValueError( "Unsupported command '%s'. Allowed: %s" % (argv[0], sorted(ALLOWED_TRAINING_COMMANDS)) ) stdout_path = os.path.join(run_dir, "stdout.log") stderr_path = os.path.join(run_dir, "stderr.log") start = time.time() with open(stdout_path, "w") as out_f, open(stderr_path, "w") as err_f: proc = subprocess.run( argv, cwd=REPO_DIR, stdout=out_f, stderr=err_f, text=True, check=False, ) elapsed = time.time() - start return { "run_name": run_name, "command": command, "exit_code": proc.returncode, "elapsed_seconds": elapsed, "stdout_path": stdout_path, "stderr_path": stderr_path, } @app.local_entrypoint() def main(command_template: str, workers: int = 1): timestamp = datetime.datetime.utcnow().strftime("%Y%m%d-%H%M%S") jobs = [] for worker in range(workers): run_name = f"{timestamp}-w{worker:03d}-{uuid.uuid4().hex[:8]}" command = command_template.format(run_name=run_name, worker=worker) jobs.append({"run_name": run_name, "command": command}) results = list(run_training_job.map(jobs)) results = sorted(results, key=lambda d: d["run_name"]) for result in results: print( "%s exit=%s elapsed=%.1fs stdout=%s stderr=%s" % ( result["run_name"], result["exit_code"], result["elapsed_seconds"], result["stdout_path"], result["stderr_path"], ) ) ================================================ FILE: scripts/plot_fixture_diffs.py ================================================ #!/usr/bin/env python """ Compare current PyTorch predictions against the TF fixture and generate per-output figures showing absolute and percentile differences. Usage: python scripts/plot_fixture_diffs.py [--out-dir /tmp/fixture_diffs] """ import argparse import json import os import sys import warnings import numpy as np import pandas as pd import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt from mhcflurry import Class1AffinityPredictor, Class1PresentationPredictor from mhcflurry.downloads import ( configure, get_default_class1_models_dir, get_default_class1_presentation_models_dir, ) FIXTURE_CSV = os.path.join( os.path.dirname(__file__), os.pardir, "test", "data", "master_released_class1_presentation_highscore_rows.csv.gz", ) FIXTURE_METADATA = os.path.join( os.path.dirname(__file__), os.pardir, "test", "data", "master_released_class1_presentation_highscore_rows_metadata.json", ) BASE_COLUMNS = ["row_id", "peptide", "allele", "n_flank", "c_flank"] STRING_COLUMNS = ["pres_with_best_allele", "pres_without_best_allele"] def load_fixture(): df = pd.read_csv(FIXTURE_CSV, keep_default_na=False) with open(FIXTURE_METADATA) as f: metadata = json.load(f) return df, metadata def generate_predictions(fixture_df): configure() affinity_predictor = Class1AffinityPredictor.load( get_default_class1_models_dir()) presentation_predictor = Class1PresentationPredictor.load( get_default_class1_presentation_models_dir()) peptides = fixture_df["peptide"].tolist() alleles = fixture_df["allele"].tolist() n_flanks = fixture_df["n_flank"].tolist() c_flanks = fixture_df["c_flank"].tolist() with warnings.catch_warnings(): warnings.simplefilter("ignore") aff_df = affinity_predictor.predict_to_dataframe( peptides=peptides, alleles=alleles, throw=False, include_percentile_ranks=True, include_confidence_intervals=True, centrality_measure="mean", model_kwargs={"batch_size": 4096}, ) sample_names = alleles allele_map = {allele: [allele] for allele in sorted(set(alleles))} with warnings.catch_warnings(): warnings.simplefilter("ignore") pres_with_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=n_flanks, c_flanks=c_flanks, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") pres_without_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=None, c_flanks=None, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") predicted = fixture_df[BASE_COLUMNS].copy() predicted["affinity_prediction"] = aff_df["prediction"].values predicted["affinity_prediction_low"] = aff_df.get( "prediction_low", np.nan) predicted["affinity_prediction_high"] = aff_df.get( "prediction_high", np.nan) predicted["affinity_prediction_percentile"] = aff_df.get( "prediction_percentile", np.nan) predicted["pres_with_affinity"] = pres_with_df["affinity"].values predicted["pres_with_best_allele"] = ( pres_with_df["best_allele"].astype(str).values) predicted["pres_with_affinity_percentile"] = ( pres_with_df["affinity_percentile"].values) predicted["processing_with_score"] = ( pres_with_df["processing_score"].values) predicted["pres_with_processing_score"] = ( pres_with_df["processing_score"].values) predicted["pres_with_presentation_score"] = ( pres_with_df["presentation_score"].values) predicted["pres_with_presentation_percentile"] = ( pres_with_df["presentation_percentile"].values) predicted["pres_without_affinity"] = pres_without_df["affinity"].values predicted["pres_without_best_allele"] = ( pres_without_df["best_allele"].astype(str).values) predicted["pres_without_affinity_percentile"] = ( pres_without_df["affinity_percentile"].values) predicted["processing_without_score"] = ( pres_without_df["processing_score"].values) predicted["pres_without_processing_score"] = ( pres_without_df["processing_score"].values) predicted["pres_without_presentation_score"] = ( pres_without_df["presentation_score"].values) predicted["pres_without_presentation_percentile"] = ( pres_without_df["presentation_percentile"].values) return predicted def plot_output(col, tf_vals, pt_vals, out_dir): diff = pt_vals - tf_vals abs_diff = np.abs(diff) pct_diff = np.where( tf_vals != 0, 100.0 * abs_diff / np.abs(tf_vals), np.where(abs_diff == 0, 0.0, np.inf), ) pct_diff_finite = pct_diff[np.isfinite(pct_diff)] fig, axes = plt.subplots(2, 2, figsize=(14, 10)) fig.suptitle(col, fontsize=14, fontweight="bold") # Top-left: scatter TF vs PyTorch ax = axes[0, 0] ax.scatter(tf_vals, pt_vals, alpha=0.5, s=15, edgecolors="none") lims = [ min(tf_vals.min(), pt_vals.min()), max(tf_vals.max(), pt_vals.max()), ] ax.plot(lims, lims, "r--", linewidth=0.8, label="y = x") ax.set_xlabel("TF (fixture)") ax.set_ylabel("PyTorch (current)") ax.set_title("TF vs PyTorch") ax.legend(fontsize=8) # Top-right: histogram of absolute differences ax = axes[0, 1] ax.hist(diff, bins=50, edgecolor="black", linewidth=0.3) ax.axvline(0, color="red", linestyle="--", linewidth=0.8) ax.set_xlabel("Difference (PyTorch − TF)") ax.set_ylabel("Count") ax.set_title( "Absolute diff: mean=%.2e, max=%.2e" % ( np.mean(abs_diff), np.max(abs_diff))) # Bottom-left: absolute difference by allele (boxplot) ax = axes[1, 0] # Build a dataframe for the boxplot tmp = pd.DataFrame({"allele": alleles_global, "abs_diff": abs_diff}) allele_order = ( tmp.groupby("allele")["abs_diff"].median() .sort_values(ascending=False).index.tolist()) box_data = [ tmp.loc[tmp.allele == a, "abs_diff"].values for a in allele_order] if len(allele_order) <= 40: bp = ax.boxplot(box_data, vert=True, patch_artist=True) ax.set_xticks(range(1, len(allele_order) + 1)) ax.set_xticklabels( [a.replace("HLA-", "") for a in allele_order], rotation=90, fontsize=6) for patch in bp["boxes"]: patch.set_facecolor("steelblue") patch.set_alpha(0.7) else: ax.bar(range(len(allele_order)), [np.median(d) for d in box_data], color="steelblue") ax.set_xticks(range(len(allele_order))) ax.set_xticklabels(allele_order, rotation=90, fontsize=5) ax.set_ylabel("|Difference|") ax.set_title("Absolute diff by allele") # Bottom-right: histogram of percent differences ax = axes[1, 1] if len(pct_diff_finite) > 0: clip_val = np.percentile(pct_diff_finite, 99) ax.hist( np.clip(pct_diff_finite, 0, clip_val), bins=50, edgecolor="black", linewidth=0.3) ax.set_xlabel("Percent difference (%)") ax.set_ylabel("Count") median_pct = np.median(pct_diff_finite) ax.set_title( "Pct diff: median=%.4f%%, 99th=%.4f%%" % ( median_pct, clip_val)) else: ax.text(0.5, 0.5, "No finite percent diffs", ha="center", va="center", transform=ax.transAxes) ax.set_title("Percent differences") fig.tight_layout(rect=[0, 0, 1, 0.95]) fname = os.path.join(out_dir, "%s.png" % col) fig.savefig(fname, dpi=150) plt.close(fig) return { "column": col, "mean_abs_diff": float(np.mean(abs_diff)), "max_abs_diff": float(np.max(abs_diff)), "median_pct_diff": float( np.median(pct_diff_finite)) if len(pct_diff_finite) else None, "p99_pct_diff": float( np.percentile(pct_diff_finite, 99)) if len( pct_diff_finite) else None, } def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "--out-dir", default="/tmp/fixture_diffs", help="Output directory for figures (default: /tmp/fixture_diffs)") args = parser.parse_args() os.makedirs(args.out_dir, exist_ok=True) print("Loading fixture...") fixture_df, metadata = load_fixture() print(" %d rows, %d alleles" % ( len(fixture_df), fixture_df.allele.nunique())) print("Generating PyTorch predictions...") predicted_df = generate_predictions(fixture_df) numeric_columns = [ c for c in fixture_df.columns if c not in BASE_COLUMNS + STRING_COLUMNS ] global alleles_global alleles_global = fixture_df["allele"].values print("Plotting %d numeric outputs..." % len(numeric_columns)) summary_rows = [] for col in sorted(numeric_columns): tf_vals = fixture_df[col].to_numpy(dtype=np.float64) pt_vals = predicted_df[col].to_numpy(dtype=np.float64) valid = np.isfinite(tf_vals) & np.isfinite(pt_vals) if valid.sum() == 0: print(" %s: no valid values, skipping" % col) continue stats = plot_output( col, tf_vals[valid], pt_vals[valid], args.out_dir) summary_rows.append(stats) print(" %s: mean_abs=%.2e, max_abs=%.2e" % ( col, stats["mean_abs_diff"], stats["max_abs_diff"])) # String columns: report match rate for col in STRING_COLUMNS: match = ( predicted_df[col].astype(str).values == fixture_df[col].astype(str).values) print(" %s: %d/%d match (%.1f%%)" % ( col, match.sum(), len(match), 100 * match.mean())) summary_df = pd.DataFrame(summary_rows) summary_path = os.path.join(args.out_dir, "summary.csv") summary_df.to_csv(summary_path, index=False) print("\nSummary written to %s" % summary_path) print("Figures written to %s" % args.out_dir) if __name__ == "__main__": main() ================================================ FILE: scripts/validate_allele_sequences.py ================================================ #!/usr/bin/env python """ Validate that allele name -> pseudosequence mappings are consistent. Checks: 1. The raw allele_sequences.csv from the downloads is loaded identically by both the current code and a from-scratch parse. 2. The renormalization step (mhcgnomes) in Class1AffinityPredictor.load() produces a deterministic mapping with no collisions or lost alleles. 3. Every allele in the downloaded models' allele_sequences.csv maps to the same pseudosequence as the standalone allele_sequences download. 4. Every allele used in the fixture CSV resolves to a sequence. Usage: python scripts/validate_allele_sequences.py """ import os import sys import pandas as pd from mhcflurry import Class1AffinityPredictor from mhcflurry.common import normalize_allele_name from mhcflurry.downloads import configure, get_path, get_default_class1_models_dir def load_raw_csv(path): """Load allele_sequences.csv exactly as on disk (no renormalization).""" return pd.read_csv(path, index_col=0).iloc[:, 0].to_dict() def renormalize(raw_mapping): """ Apply the same renormalization that Class1AffinityPredictor.load() does. Returns (renormalized_dict, skipped_list, collision_list). """ renormalized = {} skipped = [] collisions = [] for name, sequence in raw_mapping.items(): normalized = normalize_allele_name(name, raise_on_error=False) if normalized is None: skipped.append(name) continue if normalized in renormalized and name != normalized: collisions.append((name, normalized)) continue renormalized[normalized] = sequence return renormalized, skipped, collisions def main(): configure() errors = [] # --- 1. Load the standalone allele_sequences download --- print("=" * 70) print("1. Loading standalone allele_sequences download") print("=" * 70) standalone_csv = get_path("allele_sequences", "allele_sequences.csv") standalone_raw = load_raw_csv(standalone_csv) print(" Raw entries: %d" % len(standalone_raw)) standalone_norm, standalone_skipped, standalone_collisions = renormalize( standalone_raw) print(" After renormalization: %d entries" % len(standalone_norm)) print(" Skipped (unparseable): %d" % len(standalone_skipped)) print(" Collisions (duplicate after renorm): %d" % len( standalone_collisions)) if standalone_skipped: print(" Skipped names (first 20): %s" % standalone_skipped[:20]) # --- 2. Load from the predictor (goes through the same renorm logic) --- print() print("=" * 70) print("2. Loading allele_to_sequence from Class1AffinityPredictor.load()") print("=" * 70) models_dir = get_default_class1_models_dir() predictor = Class1AffinityPredictor.load(models_dir) predictor_seq = predictor.allele_to_sequence print(" Entries: %d" % len(predictor_seq)) # --- 3. Load the raw CSV from the models directory --- print() print("=" * 70) print("3. Loading raw CSV from models directory") print("=" * 70) models_csv = os.path.join(models_dir, "allele_sequences.csv") models_raw = load_raw_csv(models_csv) print(" Raw entries: %d" % len(models_raw)) models_norm, models_skipped, models_collisions = renormalize(models_raw) print(" After renormalization: %d entries" % len(models_norm)) print(" Skipped: %d" % len(models_skipped)) print(" Collisions: %d" % len(models_collisions)) # --- 4. Compare predictor mapping vs models dir renormalized --- print() print("=" * 70) print("4. Comparing predictor.allele_to_sequence vs models-dir renormalized") print("=" * 70) pred_keys = set(predictor_seq.keys()) model_keys = set(models_norm.keys()) only_pred = pred_keys - model_keys only_model = model_keys - pred_keys common = pred_keys & model_keys print(" In predictor only: %d" % len(only_pred)) print(" In models-dir renorm only: %d" % len(only_model)) print(" In common: %d" % len(common)) mismatched = [] for k in sorted(common): if predictor_seq[k] != models_norm[k]: mismatched.append(k) if mismatched: print(" MISMATCH in %d alleles:" % len(mismatched)) for k in mismatched[:20]: print(" %s:" % k) print(" predictor: %s" % predictor_seq[k]) print(" models: %s" % models_norm[k]) errors.append( "Predictor vs models-dir mismatch: %d alleles" % len(mismatched)) else: print(" All %d common alleles have identical sequences." % len(common)) # --- 5. Compare models-dir vs standalone download (informational) --- # The models ship with their own allele_sequences.csv which may use a # different pseudosequence definition than the standalone download. # Differences here are expected and not an error. print() print("=" * 70) print("5. Comparing models-dir vs standalone allele_sequences download") print(" (informational — different pseudosequence versions are expected)") print("=" * 70) model_keys_set = set(models_norm.keys()) standalone_keys_set = set(standalone_norm.keys()) only_models = model_keys_set - standalone_keys_set only_standalone = standalone_keys_set - model_keys_set common2 = model_keys_set & standalone_keys_set print(" In models only: %d" % len(only_models)) print(" In standalone only: %d" % len(only_standalone)) print(" In common: %d" % len(common2)) mismatched2 = [] for k in sorted(common2): if models_norm[k] != standalone_norm[k]: mismatched2.append(k) if mismatched2: same_len = all( len(models_norm[k]) == len(standalone_norm[k]) for k in mismatched2) print(" Different sequences: %d / %d (same length: %s)" % ( len(mismatched2), len(common2), same_len)) print(" (This is expected if pseudosequence positions differ.)") else: print(" All %d common alleles have identical sequences." % len( common2)) # --- 6. Validate fixture alleles --- print() print("=" * 70) print("6. Validating fixture alleles resolve to sequences") print("=" * 70) fixture_csv = os.path.join( os.path.dirname(__file__), os.pardir, "test", "data", "master_released_class1_presentation_highscore_rows.csv.gz", ) if os.path.exists(fixture_csv): fixture_df = pd.read_csv(fixture_csv, keep_default_na=False) fixture_alleles = fixture_df["allele"].unique() print(" Fixture alleles: %d" % len(fixture_alleles)) missing = [] for allele in sorted(fixture_alleles): normalized = normalize_allele_name(allele, raise_on_error=False) if normalized is None: missing.append((allele, "failed to normalize")) elif normalized not in predictor_seq: missing.append((allele, "normalized to '%s' but not in predictor" % normalized)) if missing: print(" MISSING %d fixture alleles:" % len(missing)) for allele, reason in missing: print(" %s: %s" % (allele, reason)) errors.append("Missing fixture alleles: %d" % len(missing)) else: print(" All %d fixture alleles resolve correctly." % len( fixture_alleles)) else: print(" Fixture CSV not found, skipping.") # --- 7. Verify normalize_allele_name is deterministic --- print() print("=" * 70) print("7. Verifying normalize_allele_name determinism (sample of 1000)") print("=" * 70) sample_alleles = sorted(predictor_seq.keys())[:1000] nondeterministic = [] for allele in sample_alleles: n1 = normalize_allele_name(allele, raise_on_error=False) n2 = normalize_allele_name(allele, raise_on_error=False) if n1 != n2: nondeterministic.append((allele, n1, n2)) if nondeterministic: print(" NON-DETERMINISTIC: %d alleles" % len(nondeterministic)) errors.append("Non-deterministic normalization: %d" % len( nondeterministic)) else: print(" All 1000 sampled alleles normalize deterministically.") # --- 8. Check idempotency: normalize(normalize(x)) == normalize(x) --- print() print("=" * 70) print("8. Checking normalize idempotency (sample of 1000)") print("=" * 70) non_idempotent = [] for allele in sample_alleles: n1 = normalize_allele_name(allele, raise_on_error=False) if n1 is None: continue n2 = normalize_allele_name(n1, raise_on_error=False) if n1 != n2: non_idempotent.append((allele, n1, n2)) if non_idempotent: print(" NON-IDEMPOTENT: %d alleles" % len(non_idempotent)) for allele, n1, n2 in non_idempotent[:10]: print(" %s -> %s -> %s" % (allele, n1, n2)) errors.append("Non-idempotent normalization: %d" % len( non_idempotent)) else: print(" All sampled alleles normalize idempotently.") # --- Summary --- print() print("=" * 70) if errors: print("ERRORS FOUND:") for e in errors: print(" - %s" % e) sys.exit(1) else: print("ALL CHECKS PASSED") sys.exit(0) if __name__ == "__main__": main() ================================================ FILE: selected-peptides.csv ================================================ ,gene,rnav8_len,k,start_1based,end_1based,peptide,is_mut,is_ref,is_linker,is_leader,is_mitd,is_chimeric,is_CTA,mhcflurry_peptide,mhcflurry_peptide_num,mhcflurry_sample_name,mhcflurry_affinity,mhcflurry_best_allele,mhcflurry_processing_score,mhcflurry_presentation_score,mhcflurry_presentation_percentile,netmhcpan_best_allele_by_pr,netmhcpan_pr,netmhcpan_aff 18,ABI3BP,25,9,1,9,IPPKTSRTL,False,True,False,False,False,False,False,IPPKTSRTL,18,sample1,76.63097212525604,C*01:02,0.4595130290836096,0.8500543950692536,0.1993750000000034,HLA-C*01:02,0.158,445.76 25,ABI3BP,25,9,8,16,TLEQPMATL,True,False,False,False,False,False,False,TLEQPMATL,25,sample1,59.405680603234636,C*01:02,0.0902106249704957,0.6627795863965235,0.5019293478260352,HLA-C*01:02,0.864,3313.63 33,ABI3BP,25,9,16,24,LAPSETPFV,False,True,False,False,False,False,False,LAPSETPFV,33,sample1,87.78069923706266,C*01:02,0.06101071718148887,0.548132005488575,0.7210054347824979,HLA-C*01:02,0.124,346.21 41,ABI3BP,25,10,7,16,RTLEQPMATL,True,False,False,False,False,False,False,RTLEQPMATL,41,sample1,342.70824393676776,C*01:02,0.6008451171219349,0.6857038580738146,0.46138586956517713,HLA-C*01:02,1.876,7023.27 82,BMP1,25,8,17,24,YRSRLCWY,False,True,False,False,False,False,False,YRSRLCWY,82,sample1,2061.1929952131527,C*07:01,0.009316287454566918,0.04497807155051911,5.671874999999957,HLA-C*07:01,0.499,1556.12 84,BMP1,25,9,1,9,VTPGEKIIL,False,True,False,False,False,False,False,VTPGEKIIL,84,sample1,32.455146232051455,C*01:02,0.07126966048963368,0.7677951702843354,0.3283152173912782,HLA-C*01:02,0.107,283.16 89,BMP1,25,9,6,14,KIILNFTTL,True,False,False,False,False,False,False,KIILNFTTL,89,sample1,62.82330105310425,C*01:02,0.24402968399226665,0.762349438982255,0.3385597826086837,HLA-C*01:02,0.437,1648.2 108,BMP1,25,10,8,17,ILNFTTLDLY,True,False,False,False,False,False,False,ILNFTTLDLY,108,sample1,397.25588353695406,A*01:01,0.0590585444442695,0.2175041276152879,1.731739130434704,HLA-A*01:01,0.139,185.87 138,CDC40,25,8,7,14,LSPNGKSL,True,False,False,False,False,False,False,LSPNGKSL,138,sample1,37.06839713891176,C*01:02,0.3020476885139942,0.867992830469506,0.17184782608696025,HLA-C*01:02,0.106,281.61 155,CDC40,25,9,6,14,TLSPNGKSL,True,False,False,False,False,False,False,TLSPNGKSL,155,sample1,30.381092671526748,C*01:02,0.118210882646963,0.8062982348254204,0.2683967391303952,HLA-C*01:02,0.31,1129.8 223,MAP2,46,8,26,33,VVPFTKAL,True,False,False,False,False,False,False,VVPFTKAL,223,sample1,106.3602561235778,C*01:02,0.17740425933152437,0.6031125399380882,0.6095380434781958,HLA-C*01:02,0.102,267.69 224,MAP2,46,8,27,34,VPFTKALM,True,False,False,False,False,False,False,VPFTKALM,224,sample1,152.8754085041204,B*08:01,0.42134576104581356,0.7169026364612648,0.4095652173913038,HLA-B*08:01,2.026,1969.94 255,MAP2,46,9,19,27,VRIYQGRVV,True,False,False,False,False,False,False,VRIYQGRVV,255,sample1,142.73052529543338,C*07:01,0.4826787058264017,0.7708029911722674,0.32350543478260363,HLA-C*07:01,0.18,558.28 257,MAP2,46,9,21,29,IYQGRVVPF,True,False,False,False,False,False,False,IYQGRVVPF,257,sample1,137.68788910889734,C*07:01,0.7557790763676167,0.9015044767998036,0.11961956521740547,HLA-C*07:01,0.856,2492.27 260,MAP2,46,9,24,32,GRVVPFTKA,True,False,False,False,False,False,False,GRVVPFTKA,260,sample1,131.33533925153966,B*27:05,0.46765692345798016,0.7756550111986702,0.3167663043477944,HLA-B*27:05,2.503,1572.45 261,MAP2,46,9,25,33,RVVPFTKAL,True,False,False,False,False,False,False,RVVPFTKAL,261,sample1,53.399215987370674,C*01:02,0.5948334485292435,0.9285526860313993,0.07940217391303861,HLA-C*01:02,0.272,955.25 262,MAP2,46,9,26,34,VVPFTKALM,True,False,False,False,False,False,False,VVPFTKALM,262,sample1,70.3866518862408,C*01:02,0.08792760979849845,0.6231343104279621,0.5722554347825621,HLA-C*01:02,0.087,206.1 263,MAP2,46,9,27,35,VPFTKALMI,True,False,False,False,False,False,False,VPFTKALMI,263,sample1,89.80587587212494,B*08:01,0.7832967713475227,0.9385730624865474,0.0643206521739188,HLA-B*08:01,1.4,1323.8 268,MAP2,46,9,32,40,ALMIKFEEI,True,False,False,False,False,False,False,ALMIKFEEI,268,sample1,158.95257022421424,B*08:01,0.661398708820343,0.8507660148330426,0.1993750000000034,HLA-B*08:01,0.262,181.28 294,MAP2,46,10,20,29,RIYQGRVVPF,True,False,False,False,False,False,False,RIYQGRVVPF,294,sample1,407.29741110701156,C*01:02,0.7349352389574051,0.7477825234902032,0.36095108695650424,HLA-B*08:01,0.999,879.81 355,PIP5K1A,28,8,8,15,APVATPAL,True,False,False,False,False,False,False,APVATPAL,355,sample1,1177.232444282441,C*01:02,0.305454570800066,0.18790045504598077,1.9201630434781833,HLA-C*01:02,0.439,1656.38 362,PIP5K1A,28,8,15,22,LLTSHRSL,True,False,False,False,False,False,False,LLTSHRSL,362,sample1,1231.6157879369582,B*08:01,0.0777759711490944,0.09004104244184576,3.1588586956520857,HLA-B*08:01,0.377,275.73 375,PIP5K1A,28,9,7,15,AAPVATPAL,True,False,False,False,False,False,False,AAPVATPAL,375,sample1,22.01541646935366,C*01:02,0.7341283150017262,0.9805101777868475,0.007255434782621251,HLA-C*01:02,0.007,11.59 394,PIP5K1A,28,10,6,15,RAAPVATPAL,True,False,False,False,False,False,False,RAAPVATPAL,394,sample1,49.96962487883811,C*01:02,0.24621670693159103,0.8014998310015791,0.27603260869564394,HLA-C*01:02,0.069,151.89 395,PIP5K1A,28,10,7,16,AAPVATPALL,True,False,False,False,False,False,False,AAPVATPALL,395,sample1,33.21428884149478,C*01:02,0.397992642596364,0.9112854698647911,0.10394021739132597,HLA-C*01:02,0.068,149.04 412,PIP5K1A,28,11,5,15,RRAAPVATPAL,True,False,False,False,False,False,False,RRAAPVATPAL,412,sample1,59.01946907449498,C*07:01,0.1422674390487373,0.7039596136958644,0.4310869565217246,HLA-C*01:02,0.212,689.74 454,SMC5,25,9,11,19,RQKRIGNTR,True,False,False,False,False,False,False,RQKRIGNTR,454,sample1,121.07188531463042,B*27:05,0.15974517143331468,0.5572798494670976,0.7013858695651152,HLA-B*27:05,1.4,599.19 456,SMC5,25,9,13,21,KRIGNTRKM,True,False,False,False,False,False,False,KRIGNTRKM,456,sample1,36.80007240208899,C*07:01,0.06430770861334167,0.7406268657670435,0.37358695652172,HLA-C*07:01,0.066,195.03 516,SPG11,25,9,7,15,LIDDQDVSI,True,False,False,False,False,False,False,LIDDQDVSI,516,sample1,125.86779456002365,C*01:02,0.3316497001796961,0.6901060990474238,0.4548369565217172,HLA-A*01:01,2.355,7932.71 526,SPG11,25,9,17,25,LLSLRILSF,False,True,False,False,False,False,False,LLSLRILSF,526,sample1,77.4165613453536,B*08:01,0.4522215351462364,0.8454462000328207,0.20706521739127481,HLA-B*08:01,0.09,58.22 532,SPG11,25,10,6,15,KLIDDQDVSI,True,False,False,False,False,False,False,KLIDDQDVSI,532,sample1,239.8657978219368,C*01:02,0.7258778959512711,0.8276511400361685,0.23519021739130608,HLA-C*01:02,9.911,22746.92 542,SPG11,25,10,16,25,SLLSLRILSF,False,True,False,False,False,False,False,SLLSLRILSF,542,sample1,627.5234729046349,B*27:05,0.31914879381656647,0.309140415987372,1.3343749999999233,HLA-B*08:01,0.333,237.23 660,TECPR1,83,9,27,35,EVPGPSWSL,True,False,False,False,False,False,False,EVPGPSWSL,660,sample1,59.34389753447961,C*01:02,0.46677792351692915,0.8817450760131815,0.1514402173913254,HLA-C*01:02,0.268,935.86 678,TECPR1,83,9,45,53,SRWESAWSG,True,False,False,False,False,False,False,SRWESAWSG,678,sample1,340.03976756247806,B*27:05,0.1498977376613766,0.3083579983400033,1.3343749999999233,HLA-B*27:05,0.443,136.67 703,TECPR1,83,9,70,78,TIPAAPVGL,True,False,False,False,False,False,False,TIPAAPVGL,703,sample1,26.28428712804486,C*01:02,0.3070325553417206,0.9033408626298494,0.11682065217391369,HLA-C*01:02,0.041,83.92 706,TECPR1,83,9,73,81,AAPVGLRWL,True,False,False,False,False,False,False,AAPVGLRWL,706,sample1,38.28177943121105,C*01:02,0.15587826329283416,0.7916457568902094,0.2912499999999625,HLA-C*01:02,0.081,193.21 734,TECPR1,83,10,26,35,KEVPGPSWSL,True,False,False,False,False,False,False,KEVPGPSWSL,734,sample1,2248.742127250853,B*27:05,0.4546149540692568,0.17298381313137473,2.027690217391225,HLA-C*01:02,0.373,1381.6 753,TECPR1,83,10,45,54,SRWESAWSGL,True,False,False,False,False,False,False,SRWESAWSGL,753,sample1,63.243425369373774,C*07:01,0.19101055013015866,0.7254265272158179,0.3973641304347808,HLA-B*27:05,0.01,11.57 777,TECPR1,83,10,69,78,LTIPAAPVGL,True,False,False,False,False,False,False,LTIPAAPVGL,777,sample1,111.42488810790788,C*01:02,0.2800327483564615,0.6762032728784696,0.4788586956521357,HLA-C*01:02,0.367,1356.26 868,VPS72,25,8,13,20,RALLPLEL,True,False,False,False,False,False,False,RALLPLEL,868,sample1,170.84081118912832,C*01:02,0.38518839702010155,0.6666992275701744,0.49510869565216353,HLA-C*07:01,4.065,9095.19 885,VPS72,25,9,12,20,ERALLPLEL,True,False,False,False,False,False,False,ERALLPLEL,885,sample1,47.50778208829167,C*07:01,0.2833710527047515,0.8286693910953119,0.23345108695652073,HLA-C*07:01,0.188,590.32 933,WWC1,24,8,12,19,MGHLQHEL,True,False,False,False,False,False,False,MGHLQHEL,933,sample1,115.99551643229341,C*01:02,0.3307158090174198,0.7061279167746464,0.42766304347823336,HLA-B*08:01,0.717,594.01 951,WWC1,24,9,13,21,GHLQHELQF,True,False,False,False,False,False,False,GHLQHELQF,951,sample1,113.42506890264815,C*07:01,0.259261479601264,0.6560192228648354,0.5143749999999585,HLA-C*07:01,4.486,9796.8 1002,MAGEA10p1,25,9,1,9,SSPSVVASL,False,True,False,False,False,False,True,SSPSVVASL,1002,sample1,21.110055920581388,C*01:02,0.16465385956689715,0.8748015269207916,0.16249999999999432,HLA-C*01:02,0.008,12.33 1019,MAGEA10p1,25,10,1,10,SSPSVVASLP,False,True,False,False,False,False,True,SSPSVVASLP,1019,sample1,13090.572570329334,C*01:02,0.008235680041252635,0.007728873015256679,31.643179347826077,HLA-C*01:02,0.494,1899.73 1035,MAGEA10p1,25,11,1,11,SSPSVVASLPL,False,True,False,False,False,False,True,SSPSVVASLPL,1035,sample1,418.57842279669956,C*01:02,0.02461180041427724,0.18955046992904015,1.905543478260796,HLA-C*01:02,0.121,334.2 1051,MAGEA10p2,25,8,2,9,VTDLVQFL,False,True,False,False,False,False,True,VTDLVQFL,1051,sample1,218.4621970498831,A*01:01,0.7729858718812466,0.8613483409926228,0.1821467391304452,HLA-A*01:01,0.941,2721.01 1057,MAGEA10p2,25,8,8,15,FLLFKYQM,False,True,False,False,False,False,True,FLLFKYQM,1057,sample1,410.1786929319161,B*08:01,0.13465335359796882,0.2603978337209331,1.5202989130434048,HLA-B*08:01,0.128,87.63 1068,MAGEA10p2,25,9,1,9,KVTDLVQFL,False,True,False,False,False,False,True,KVTDLVQFL,1068,sample1,81.34874039241913,C*01:02,0.8616118803620338,0.9568792538563173,0.038315217391314604,HLA-C*07:01,0.45,1412.77 1069,MAGEA10p2,25,9,2,10,VTDLVQFLL,False,True,False,False,False,False,True,VTDLVQFLL,1069,sample1,108.78437810075624,A*01:01,0.4036145284771919,0.7679767844030344,0.3283152173912782,HLA-A*01:01,0.126,168.04 1080,MAGEA10p2,25,9,13,21,YQMKEPITK,False,True,False,False,False,False,True,YQMKEPITK,1080,sample1,86.88238876593987,B*27:05,0.5966939721256495,0.8907509152335247,0.13692934782609711,HLA-B*27:05,2.747,1821.31 1084,MAGEA10p2,25,9,17,25,EPITKAEIL,False,True,False,False,False,False,True,EPITKAEIL,1084,sample1,88.03372181871534,B*08:01,0.29368303483352065,0.7337152898998892,0.38508152173912436,HLA-B*08:01,1.689,1621.96 1086,MAGEA10p2,25,10,2,11,VTDLVQFLLF,False,True,False,False,False,False,True,VTDLVQFLLF,1086,sample1,105.83716241662344,A*01:01,0.5764349922537804,0.8623637058673023,0.1807065217391255,HLA-A*01:01,0.08,91.16 1205,MAGEC1p1,25,9,6,14,MPTAGMPSL,False,True,False,False,False,False,True,MPTAGMPSL,1205,sample1,77.11967414544304,B*08:01,0.8355902284383774,0.9551892991765902,0.03964673913044692,HLA-C*01:02,2.124,7816.58 1221,MAGEC1p1,25,10,5,14,DMPTAGMPSL,False,True,False,False,False,False,True,DMPTAGMPSL,1221,sample1,119.73642462637594,C*01:02,0.30586328147910535,0.6808950908421842,0.4698369565216751,HLA-C*01:02,0.584,2261.99 1282,MAGEC1p2,25,9,17,25,SSPEGKDSL,False,True,False,False,False,False,True,SSPEGKDSL,1282,sample1,26.62843195242034,C*01:02,0.23959087580442429,0.8790703829859254,0.15467391304348155,HLA-C*01:02,0.036,74.21 1314,MAGEC1p3,25,8,1,8,FAQSPLQI,False,True,False,False,False,False,True,FAQSPLQI,1314,sample1,162.1616093286923,C*01:02,0.4001904344186187,0.6893362454365073,0.4563315217391022,HLA-C*01:02,4.517,14042.74 1324,MAGEC1p3,25,8,11,18,SPSSSSTL,False,True,False,False,False,False,True,SPSSSSTL,1324,sample1,2396.182609115678,C*01:02,0.10404993500560522,0.05382663961091608,4.807092391304323,HLA-C*01:02,0.264,916.83 1341,MAGEC1p3,25,9,10,18,VSPSSSSTL,False,True,False,False,False,False,True,VSPSSSSTL,1341,sample1,26.7171004845041,C*01:02,0.2750385506078601,0.8914700477888546,0.13535326086957866,HLA-C*01:02,0.007,9.22 1344,MAGEC1p3,25,9,13,21,SSSSTLLSL,False,True,False,False,False,False,True,SSSSTLLSL,1344,sample1,43.6080517726507,C*01:02,0.05253881262615323,0.6990356519876642,0.4397010869565037,HLA-C*01:02,0.352,1290.55 1357,MAGEC1p3,25,10,9,18,PVSPSSSSTL,False,True,False,False,False,False,True,PVSPSSSSTL,1357,sample1,270.5527050478048,C*01:02,0.005632098502246663,0.25045437521980246,1.5659510869564457,HLA-C*01:02,0.189,581.05 1358,MAGEC1p3,25,10,10,19,VSPSSSSTLL,False,True,False,False,False,False,True,VSPSSSSTLL,1358,sample1,46.67597607663383,C*01:02,0.06457851023878902,0.6940808873475162,0.4474999999999767,HLA-C*01:02,0.052,107.3 1372,MAGEC1p3,25,11,8,18,IPVSPSSSSTL,False,True,False,False,False,False,True,IPVSPSSSSTL,1372,sample1,224.04407533977502,B*08:01,0.14942678052466363,0.4003023274794277,1.0576086956520356,HLA-C*01:02,0.102,266.27 1395,PAGE2,25,8,16,23,TFDLTKVL,False,True,False,False,False,False,True,TFDLTKVL,1395,sample1,192.2698234992499,C*01:02,0.4834165219217539,0.7162742705527396,0.4113315217391147,HLA-C*01:02,6.084,17134.66 1406,PAGE2,25,9,9,17,VREGIMPTF,False,True,False,False,False,False,True,VREGIMPTF,1406,sample1,52.82333005903476,C*07:01,0.09807718684896827,0.6937290619275586,0.4474999999999767,HLA-C*07:01,0.277,878.36 1427,PAGE2,25,10,13,22,IMPTFDLTKV,False,True,False,False,False,False,True,IMPTFDLTKV,1427,sample1,482.5819436701458,C*01:02,0.3368768533691764,0.3807632213974432,1.1085597826085376,HLA-C*01:02,0.407,1532.39 1443,PAGE2,25,11,13,23,IMPTFDLTKVL,False,True,False,False,False,False,True,IMPTFDLTKVL,1443,sample1,1917.037898539047,C*01:02,0.15068084315862507,0.07691883261218202,3.5626902173912214,HLA-C*01:02,0.196,620.72 1465,PAGE5,24,9,3,11,VREGTLPTF,False,True,False,False,False,False,True,VREGTLPTF,1465,sample1,52.2543355162559,C*07:01,0.05408053379505873,0.6620549703835366,0.5038043478260334,HLA-C*07:01,0.411,1309.76 1485,PAGE5,24,10,7,16,TLPTFDPTKV,False,True,False,False,False,False,True,TLPTFDPTKV,1485,sample1,220.1699502138865,C*01:02,0.4927303232252598,0.6958028106023945,0.44383152173911355,HLA-C*01:02,1.026,3936.55 1500,PAGE5,24,11,7,17,TLPTFDPTKVL,False,True,False,False,False,False,True,TLPTFDPTKVL,1500,sample1,213.15764776188504,C*01:02,0.19725923147052526,0.45348878030270307,0.9252717391303236,HLA-C*01:02,0.22,721.1 1530,XAGE1Ap1,25,9,5,13,QLKVGILHL,False,True,False,False,False,False,True,QLKVGILHL,1530,sample1,77.25077298009815,B*08:01,0.17316756071522832,0.671301090626941,0.4883152173912748,HLA-B*08:01,0.792,665.99 1541,XAGE1Ap1,25,9,16,24,RQKKIRIQL,False,True,False,False,False,False,True,RQKKIRIQL,1541,sample1,49.26971587709329,C*07:01,0.6224369034171104,0.9393752719126912,0.06312499999999943,HLA-B*08:01,1.2,1118.37 1558,XAGE1Ap1,25,10,16,25,RQKKIRIQLR,False,True,False,False,False,False,True,RQKKIRIQLR,1558,sample1,211.91169822956056,B*27:05,0.6150255762040615,0.7853669958109232,0.3009239130434338,HLA-B*27:05,1.751,863.35 1592,XAGE1Ap2,25,9,1,9,ISQTPGINL,False,True,False,False,False,False,True,ISQTPGINL,1592,sample1,48.26454439433474,C*01:02,0.26859587989747524,0.8188534498605134,0.24815217391304145,HLA-C*01:02,0.613,2378.74 1594,XAGE1Ap2,25,9,3,11,QTPGINLDL,False,True,False,False,False,False,True,QTPGINLDL,1594,sample1,72.94023535305432,C*01:02,0.19312988221645355,0.698565580401679,0.4409239130434628,HLA-C*01:02,0.201,648.84 ================================================ FILE: setup.py ================================================ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import logging import re from setuptools import setup readme_dir = os.path.dirname(__file__) readme_filename = os.path.join(readme_dir, "README.md") try: with open(readme_filename, "r") as f: readme = f.read() except: logging.warning("Failed to load %s" % readme_filename) readme = "" with open("mhcflurry/version.py", "r") as f: version = re.search( r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE ).group(1) if __name__ == "__main__": required_packages = [ "pandas>=2.0", "appdirs", "scikit-learn", "mhcgnomes>=3.0.1", "numpy>=1.22.4", "pyyaml", "tqdm", "torch>=2.0.0", ] setup( name="mhcflurry", version=version, description="MHC Binding Predictor", author="Tim O'Donnell and Alex Rubinsteyn", author_email="timodonnell@gmail.com", url="https://github.com/openvax/mhcflurry", license="Apache-2.0", entry_points={ "console_scripts": [ "mhcflurry-downloads = mhcflurry.downloads_command:run", "mhcflurry-predict = mhcflurry.predict_command:run", "mhcflurry-predict-scan = mhcflurry.predict_scan_command:run", "mhcflurry-class1-train-allele-specific-models = " "mhcflurry.train_allele_specific_models_command:run", "mhcflurry-class1-train-pan-allele-models = " "mhcflurry.train_pan_allele_models_command:run", "mhcflurry-class1-train-processing-models = " "mhcflurry.train_processing_models_command:run", "mhcflurry-class1-select-allele-specific-models = " "mhcflurry.select_allele_specific_models_command:run", "mhcflurry-class1-select-pan-allele-models = " "mhcflurry.select_pan_allele_models_command:run", "mhcflurry-class1-select-processing-models = " "mhcflurry.select_processing_models_command:run", "mhcflurry-calibrate-percentile-ranks = " "mhcflurry.calibrate_percentile_ranks_command:run", "mhcflurry-class1-train-presentation-models = " "mhcflurry.train_presentation_models_command:run", "_mhcflurry-cluster-worker-entry-point = " "mhcflurry.cluster_parallelism:worker_entry_point", ] }, python_requires=">=3.10", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Operating System :: OS Independent", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Bio-Informatics", ], package_data={ "mhcflurry": ["downloads.yml"], }, install_requires=required_packages, long_description=readme, long_description_content_type="text/markdown", packages=[ "mhcflurry", ], ) ================================================ FILE: setup_local_env.sh ================================================ #!/bin/bash set -e VENV_DIR=".venv" # Create virtual environment if it doesn't exist if [ ! -d "$VENV_DIR" ]; then echo "Creating virtual environment..." python -m venv "$VENV_DIR" else echo "Virtual environment already exists." fi # Activate and install echo "Activating virtual environment and installing mhcflurry..." source "$VENV_DIR/bin/activate" pip install -e . echo "" echo "Done! To use this environment, run:" echo " source .venv/bin/activate" ================================================ FILE: test/__init__.py ================================================ ''' Utility functions for tests. ''' import os import time def data_path(name): ''' Return the absolute path to a file in the test/data directory. The name specified should be relative to test/data. ''' return os.path.join(os.path.dirname(__file__), "data", name) def initialize(): ''' Initialize logging and PyTorch, numpy, and python random seeds. ''' import logging logging.getLogger("matplotlib").disabled = True import numpy import random import torch seed = int(os.environ.get("MHCFLURRY_TEST_SEED", 1)) if seed == 0: # Enable nondeterminism seed = int(time.time()) print("Using random seed", seed) # Set seeds for reproducibility numpy.random.seed(seed) random.seed(seed) torch.manual_seed(seed) if torch.cuda.is_available(): torch.cuda.manual_seed_all(seed) # Enable deterministic operations where possible torch.use_deterministic_algorithms(False) # Some ops don't have deterministic impl ================================================ FILE: test/conftest.py ================================================ """ Pytest configuration and session-wide initialization. """ from . import initialize # Ensure deterministic test setup without per-file initialize() calls. initialize() def pytest_configure(config): # Register custom marks used across tests. config.addinivalue_line("markers", "slow: marks tests as slow") # PyTorch warns that padding='same' with even kernels may allocate a # temporary padded copy. This is expected for our processing defaults. config.addinivalue_line( "filterwarnings", ( "ignore:Using padding='same' with even kernel lengths and odd " "dilation may require a zero-padded copy of the input be created.*:" "UserWarning:torch\\.nn\\.modules\\.conv" ), ) ================================================ FILE: test/data/data_10mer.csv ================================================ peptide,mhc,meas AAAAAAAAAA,HLA-A0201,400 ================================================ FILE: test/data/data_8mer.csv ================================================ peptide,mhc,meas AAAAAAAA,HLA-A0201,400 ================================================ FILE: test/data/data_9mer.csv ================================================ peptide,mhc,meas AAAAAAAAA,HLA-A0201,400 ================================================ FILE: test/data/example.fasta ================================================ >QHN73810.1 surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] prefix MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVfrssVLHSTQDLFLPFFSNVTWFHAIHV SGTNGTKRFDNPVLPFNDGVYFASTEKSNIIRGWIFGTTLDSKTQSLLIVNNATNVVIKVCEFQFCNDPF LGVYYHKNNKSWMESEFRVYSSANNCTFEYVSQPFLMDLEGKQGNFKNLREFVFKNIDGYFKIYSKHTPI >protein1 MDSKGSSQKGSRLLLLLVVSNLLLCQGVVSTPVCPNGPGNCQV EMFNEFDKRYAQGKGFITMALNSCHTSSLPTPEDKEQAQQTHH >protein2 VTEVRGMKGAPDAILSRAIEIEEENKRLLEGMEMIFGQVIPGA ARYSAFYNLLHCLRRDSSKIDTYLKLLNCRIIYNNNC ================================================ FILE: test/data/hpv_predictions.csv ================================================ allele,peptide,Length,Affinity (uM),Binding Capacity,Status,Security,affinity,netmhcpan3,netmhcpan4,netmhc,MHCflurry 1.2.0,MHCflurry (train MS),MHCflurry (no MS) HLA-A*02:01,LMGTLGIVCPI,11,0.29,strong,novel,CONFIDENTIAL,290.0,261.8,214.5,248.47,167.22380960425482,74.84751152620106,301.93403988869073 HLA-A*02:01,RTLEDLLMGTL,11,1.95,strong,novel,CONFIDENTIAL,1950.0,3836.9,2582.2,3257.01,2830.2157958268767,2188.9538132772736,2132.3345643653206 HLA-A*02:01,MGTLGIVCPI,10,2.01,strong,novel,CONFIDENTIAL,2010.0,322.0,296.3,393.31,7561.020273281272,7718.081462632219,4225.447860121435 HLA-A*02:01,YMLDLQPETTD,11,2.83,strong,novel,CONFIDENTIAL,2830.0,11400.9,9155.6,4351.54,6287.6952523646105,9355.44304469742,5658.571030354306 HLA-A*02:01,FQDPQERPI,9,3.36,strong,novel,CONFIDENTIAL,3360.0,2044.2,2257.7,1166.07,735.5087046488492,1298.7161222243133,1665.7433194119546 HLA-A*02:01,TTIHEIILECV,11,3.57,strong,novel,CONFIDENTIAL,3570.0,8613.5,4527.0,3024.93,2554.8469340269025,1810.7353167190304,1699.1128317557593 HLA-A*02:01,KLPDLCTELQT,11,3.9,strong,novel,CONFIDENTIAL,3900.0,11935.0,6485.2,6742.69,1493.95057048418,2041.3286363075747,3488.3542353067187 HLA-A*02:01,TIHEIILECV,10,6.61,intermediate,novel,CONFIDENTIAL,6610.0,451.8,408.9,259.31,1428.0179037333828,698.7850153544011,1037.8827485898053 HLA-A*02:01,TIHEIRLECV,10,8.62,intermediate,novel,CONFIDENTIAL,8620.0,2086.4,1587.4,1719.29,2623.970703334057,1942.8046329664567,2620.8693158569736 HLA-A*02:01,YMLDLQPE,8,9.69,intermediate,novel,CONFIDENTIAL,9690.0,7303.5,8102.5,5042.35,782.0608447431365,981.9365057280755,2292.0327441099435 HLA-A*02:01,ELQTTIHEI,9,10.61,intermediate,novel,CONFIDENTIAL,10610.0,2957.5,2929.5,1769.68,2295.581304708852,1796.3302915309757,2763.6730228020515 HLA-A*02:01,EDLLMGTLGIV,11,12.07,intermediate,novel,CONFIDENTIAL,12070.0,1599.5,1510.9,971.14,14678.11653386876,18844.65527176244,11576.74126684321 HLA-A*02:01,TTIHEIRLECV,11,14.01,intermediate,novel,CONFIDENTIAL,14010.0,17971.1,12699.0,10173.59,5309.987246377647,3922.455924078571,6448.9484310722155 HLA-A*02:01,FQDPQERPIKL,11,14.03,intermediate,novel,CONFIDENTIAL,14030.0,11214.0,6086.6,8579.48,2232.255948165024,2319.270770821285,5867.236637410394 HLA-A*02:01,KLPQLCTELQT,11,27.145,weak,novel,CONFIDENTIAL,27145.0,16616.3,8531.1,10551.05,4005.921189159136,5135.113451729935,7277.304901511617 HLA-A*02:01,RYYCYSVYGT,10,28.2,weak,novel,CONFIDENTIAL,28200.0,13147.0,15049.1,18721.52,9613.502999977934,9152.728921945634,9621.349989269409 HLA-A*02:01,YRYYCYSV,8,29.43,weak,novel,CONFIDENTIAL,29430.0,22112.3,19446.0,9128.42,906.80060226134,659.7409889715294,2156.7317840689675 HLA-A*02:01,YRYYCYSL,8,32.78,weak,novel,CONFIDENTIAL,32780.0,23243.3,20212.7,14919.58,2964.261133692841,2320.4297748900585,6774.905546806434 HLA-A*02:01,TTIHDIILECV,11,35.72063432,weak,novel,CONFIDENTIAL,35720.63432,7569.3,3945.1,3483.89,1682.8116357450924,999.0395725488116,859.2392689717731 HLA-A*02:01,LLMGTLGIVCP,11,47.53,weak,novel,CONFIDENTIAL,47530.0,3969.1,2993.6,3239.61,4453.276686751863,5139.813945807773,3630.920394105956 HLA-A*02:01,ILECVYCKQQL,11,48.75666667,weak,novel,CONFIDENTIAL,48756.66667,5305.8,4136.1,8507.65,4865.669632619836,7471.308350302104,6224.036410094804 HLA-A*02:01,IRTLEDLLMGT,11,54.56,weak,novel,CONFIDENTIAL,54560.0,9448.4,5149.0,8339.86,15749.863216740647,17063.417773345544,12394.628341531134 HLA-A*02:01,MLDLQPET,8,59.36,weak,novel,CONFIDENTIAL,59360.0,9487.8,11631.9,4072.64,4314.772648482042,4568.488501987155,7890.133873821171 HLA-A*02:01,KISEYRYYCYS,11,65.6,weak,novel,CONFIDENTIAL,65600.0,21152.4,18205.2,25066.62,7743.224282745778,8249.90329061251,7770.289216385544 HLA-A*02:01,SEYRYYCYSV,10,76.64,weak,novel,CONFIDENTIAL,76640.0,6925.8,7485.7,6255.27,1083.5856435034402,1243.166012373093,2682.1753853576192 HLA-A*02:01,SEYRYYCYSL,10,78.22,weak,novel,CONFIDENTIAL,78220.0,12376.5,14030.9,11628.92,3409.681674777167,3911.731710904121,7951.765029734319 HLA-A*02:01,TIHEIILEC,9,82.01,weak,novel,CONFIDENTIAL,82010.0,3635.3,3470.3,3629.49,7046.813797831271,6971.597573231845,8045.3140793790035 HLA-A*02:01,DLLMGTLGIVC,11,83.34,weak,novel,CONFIDENTIAL,83340.0,5638.5,10687.9,2747.2,8054.668925826633,11427.961477186245,2380.608862941643 HLA-A*01:01,CTELQTTIH,9,1.4,strong,novel,CONFIDENTIAL,1400.0,1036.7,2136.9,6705.74,1528.1812706714318,1429.5692489150265,2060.9423819981425 HLA-A*01:01,DLQPETTDLY,10,1.77,strong,novel,CONFIDENTIAL,1770.0,2245.9,1323.5,3675.65,193.50561967984606,201.231897331688,290.17355954864087 HLA-A*01:01,AVCDKCLKFY,10,2.7,strong,novel,CONFIDENTIAL,2700.0,1140.4,1547.3,3210.16,6849.596682068725,8034.716592367712,5342.243682887992 HLA-A*01:01,LKFYSKISEY,10,7.7,intermediate,novel,CONFIDENTIAL,7700.0,14948.7,15773.3,17014.02,12422.761301072042,12400.829967565891,10658.091389039851 HLA-A*01:01,GTTLEQQY,8,16.2,weak,novel,CONFIDENTIAL,16200.0,15250.7,14780.6,11701.75,1059.4330640275084,1520.6973609096137,5918.9567991423155 HLA-A*01:01,KISEYRHYCY,10,18.4,weak,novel,CONFIDENTIAL,18400.0,1377.0,1230.1,330.74,1453.3474707081182,1482.838019653631,1479.8110134773426 HLA-A*01:01,DTPTLHEY,8,32.0,weak,novel,CONFIDENTIAL,32000.0,7096.4,8641.0,6601.07,1203.6621607075274,1486.3283925246994,5269.391140890927 HLA-A*03:01,LIRCINCQK,9,4.67,strong,novel,CONFIDENTIAL,4670.0,162.3,145.8,375.07,204.0478698313392,435.8311949480205,350.2389716370093 HLA-A*03:01,GIVCPICSQK,10,6.49,intermediate,novel,CONFIDENTIAL,6490.0,156.6,157.8,343.48,215.34416992422456,230.1221633521149,151.1602721982741 HLA-A*03:01,AVCDKCLKFY,10,9.29,intermediate,novel,CONFIDENTIAL,9290.0,990.5,1364.5,932.09,2047.2596287287881,2735.4138567447353,2745.2271592296443 HLA-A*03:01,SLYGTTLEQQY,11,10.06,intermediate,novel,CONFIDENTIAL,10060.0,162.5,131.8,233.79,1272.2137029730231,1360.821450087417,1225.4807167540018 HLA-A*03:01,KFYSKISEYR,10,11.72,intermediate,novel,CONFIDENTIAL,11720.0,924.2,1046.0,319.36,535.3088903701828,659.2740478699708,599.8433012394488 HLA-A*03:01,GTTLEQQYNK,10,17.33,weak,novel,CONFIDENTIAL,17330.0,1092.1,804.8,1292.32,1025.619711037487,1096.7490729173253,1019.6007981576853 HLA-A*03:01,KQRFHNIRGR,10,21.01,weak,novel,CONFIDENTIAL,21010.0,1768.7,1270.2,1602.6,932.8032378723947,854.2980408145897,1234.1362547195588 HLA-A*03:01,CVYCKQQLLR,10,30.56,weak,novel,CONFIDENTIAL,30560.0,377.7,319.8,112.79,56.32241532369268,52.70881959032983,52.85686131251664 HLA-A*03:01,AVCDKCLK,8,34.39,weak,novel,CONFIDENTIAL,34390.0,5533.2,7695.2,6961.08,219.5139365424112,772.7494025534432,1790.5815297337801 HLA-A*03:01,RHYCYSLY,8,58.09,weak,novel,CONFIDENTIAL,58090.0,10536.2,12510.7,10604.15,5011.41873021642,4586.303522172484,5479.046498205236 HLA-A*11:01,FAFRDLCIVYR,11,2.67,strong,novel,CONFIDENTIAL,2670.0,1597.0,1170.5,6087.15,198.5418558836729,767.7842293451082,759.5269541462752 HLA-A*11:01,AVCDKCLKFY,10,4.8,strong,novel,CONFIDENTIAL,4800.0,533.8,419.6,219.88,488.06798984272723,1069.0895760249005,1703.2245972516055 HLA-A*11:01,LIRCINCQK,9,5.21,intermediate,novel,CONFIDENTIAL,5210.0,287.3,338.0,1089.12,398.9452823944749,1091.5759819174523,1239.654411219963 HLA-A*11:01,TLEQQYNK,8,6.03,intermediate,novel,CONFIDENTIAL,6030.0,5308.2,7464.8,3131.9,376.55410528228134,2962.719959672343,4638.566296504541 HLA-A*11:01,LGIVCPICSQK,11,6.32,intermediate,novel,CONFIDENTIAL,6320.0,1398.0,1627.3,1807.2,1571.9827102006725,3357.029177949049,1283.0588085190461 HLA-A*11:01,ILECVYCK,8,8.34,intermediate,novel,CONFIDENTIAL,8340.0,2359.2,4510.3,4750.58,162.8377973720471,1098.030205507943,1498.1961045921537 HLA-A*11:01,AVCDKCLKFYS,11,11.51,intermediate,novel,CONFIDENTIAL,11510.0,11471.3,12747.5,9182.5,760.7260316491818,2889.8862445569057,2580.9365830201405 HLA-A*11:01,RCMSCCRSSR,10,12.19,intermediate,novel,CONFIDENTIAL,12190.0,1721.1,1956.4,1927.66,10366.764450311626,17378.519334733573,16695.884904110924 HLA-A*11:01,YAVCDKCLK,9,12.64,intermediate,novel,CONFIDENTIAL,12640.0,979.9,834.3,1462.48,305.35638363147206,1246.2218943284665,1720.2926725701159 HLA-A*11:01,DLLIRCINCQK,11,14.75,intermediate,novel,CONFIDENTIAL,14750.0,3140.1,5360.6,4278.29,3141.671074869477,6922.462818808072,7522.20865864938 HLA-A*11:01,YNIVTFCCK,9,15.83,weak,novel,CONFIDENTIAL,15830.0,961.0,780.0,2722.16,1366.3231568518531,1823.5975197172027,1245.35475751254 HLA-A*11:01,PYAVCDKCLK,10,15.99,weak,novel,CONFIDENTIAL,15990.0,7038.1,7230.3,8296.39,6694.072757669444,7382.799710571277,6964.978182003566 HLA-A*11:01,NIVTFCCK,8,17.88,weak,novel,CONFIDENTIAL,17880.0,5011.1,7719.3,8169.19,177.44387922524263,1271.0049548564928,1324.9382491538568 HLA-A*11:01,EVYDFAFR,8,27.75,weak,novel,CONFIDENTIAL,27750.0,4961.4,6460.5,9341.53,146.23879735518875,1179.4278141381164,803.5471316545512 HLA-A*11:01,AHYNIVTFCCK,11,28.95,weak,novel,CONFIDENTIAL,28950.0,5908.5,3047.8,4515.23,1799.4665054888096,4097.776212326945,2556.585920952502 HLA-A*11:01,NPYAVCDKCLK,11,31.11,weak,novel,CONFIDENTIAL,31110.0,18020.2,12853.2,19279.42,5561.112420245893,8852.317456986519,8280.409444184594 HLA-A*11:01,CVYCKQQLLR,10,36.49,weak,novel,CONFIDENTIAL,36490.0,348.8,356.5,506.27,54.98115951529731,125.60064701018942,161.45982239468202 HLA-A*11:01,YAVCDKCLKFY,11,40.88,weak,novel,CONFIDENTIAL,40880.0,7708.6,10967.8,2634.65,7952.677805963036,12250.765710981861,16787.055726162154 HLA-A*11:01,YGTTLEQQYNK,11,43.48,weak,novel,CONFIDENTIAL,43480.0,956.5,539.9,962.76,4318.5973365009995,7398.7202017867285,7566.772095061476 HLA-A*11:01,AFRDLCIVYR,10,47.68,weak,novel,CONFIDENTIAL,47680.0,3801.2,2782.3,6053.46,2622.759087481481,4940.091758791927,3030.899009631936 HLA-A*11:01,AVCDKCLKF,9,48.82,weak,novel,CONFIDENTIAL,48820.0,12744.2,10508.3,9085.16,3531.4624077727067,6345.713974481844,6720.213609332939 HLA-A*11:01,KISEYRHYCY,10,48.83,weak,novel,CONFIDENTIAL,48830.0,553.5,715.8,263.87,96.67683826219296,125.95280812849022,97.50901080742322 HLA-A*11:01,VCDKCLKFYSK,11,58.43,weak,novel,CONFIDENTIAL,58430.0,20498.8,16472.8,16577.36,2927.256576617747,5664.311988434344,4358.709052700608 HLA-A*11:01,WTGRCMSCCR,10,82.74,weak,novel,CONFIDENTIAL,82740.0,4430.8,5391.6,15228.16,3411.959775768269,5846.378194697021,5182.588436200903 HLA-A*24:02,VYDFAFRDLCI,11,0.256666667,strong,novel,CONFIDENTIAL,256.6666667,2621.4,2073.9,2480.67,648.37494940904,1484.3033637780072,5029.309818093023 HLA-A*24:02,PYAVCDKCLKF,11,0.28,strong,novel,CONFIDENTIAL,280.0,3417.5,1843.7,1976.58,83.28087797328301,243.88324986590942,3576.553843681802 HLA-A*24:02,VYGTTLEQQY,10,0.68,strong,novel,CONFIDENTIAL,680.0,8525.7,8380.9,6614.94,1629.7666773485894,3107.701590567886,4106.562015411532 HLA-A*24:02,TFCCKCDSTL,10,0.7533333329999999,strong,novel,CONFIDENTIAL,753.3333332999997,5243.0,8383.4,9077.1,3332.1846862068824,5905.839785214386,4944.675457011142 HLA-A*24:02,QYNKPLCDLLI,11,0.7666666670000001,strong,novel,CONFIDENTIAL,766.6666667000003,1659.7,1162.3,2768.8,134.74745049246454,402.8452453716209,542.4886114927364 HLA-A*24:02,KLPQLCTEL,9,0.83,strong,novel,CONFIDENTIAL,830.0,6113.0,6747.1,11100.88,1551.3652961517096,3712.5243927747533,5494.156914058253 HLA-A*24:02,VYRDGNPYAV,10,1.06,strong,novel,CONFIDENTIAL,1060.0,1933.7,2111.0,3259.54,402.34460018719125,1015.4575794850017,1397.3121809349875 HLA-A*24:02,YAVCDKCLKF,10,1.093333333,strong,novel,CONFIDENTIAL,1093.333333,7763.1,7692.7,12914.62,4306.466832601471,6667.05677309083,9985.12989112205 HLA-A*24:02,DRAHYNIVTF,10,1.316666667,strong,novel,CONFIDENTIAL,1316.666667,11145.0,12097.2,6105.89,2428.8140888228404,4939.367664513643,7255.9444215451795 HLA-A*24:02,LQTTIHEII,9,1.65,strong,novel,CONFIDENTIAL,1650.0,12345.4,11328.9,7819.96,5914.300147570152,7860.195300661325,2281.5229434808784 HLA-A*24:02,EYRHYCYSLY,10,1.983333333,strong,novel,CONFIDENTIAL,1983.3333329999998,7319.8,7218.3,6231.43,703.2658386654582,1515.9408499157364,1477.5881767756796 HLA-A*24:02,AHYNIVTF,8,2.2766666669999998,strong,novel,CONFIDENTIAL,2276.666667,7995.6,10388.4,12213.63,535.0480605196514,830.1737520796222,2491.9112158124303 HLA-A*24:02,VYCKQQLL,8,2.4533333330000002,strong,novel,CONFIDENTIAL,2453.333333,2262.2,3318.8,1910.18,52.27313383518106,88.41831947379872,575.635438043838 HLA-A*24:02,DFAFRDLCI,9,3.353333333,strong,novel,CONFIDENTIAL,3353.333333,6895.2,8358.8,5299.67,2321.9605565176307,4833.893616635816,2774.791392983021 HLA-A*24:02,YSLYGTTL,8,3.356666667,strong,novel,CONFIDENTIAL,3356.666667,9147.3,10801.2,5320.23,7199.2723693321095,9213.709378071613,13122.858103833583 HLA-A*24:02,FYSKISEY,8,3.36,strong,novel,CONFIDENTIAL,3360.0,12309.7,12705.1,17137.81,2205.404661591299,3581.325026470185,6557.405367260899 HLA-A*24:02,VYDFAFRDLC,10,4.303333333,strong,novel,CONFIDENTIAL,4303.333333,6027.3,5872.8,7810.15,3261.5361858609203,4541.968966974872,5575.954542513338 HLA-A*24:02,EVYDFAFRDL,10,4.7466666669999995,strong,novel,CONFIDENTIAL,4746.666667,7778.9,7300.7,10889.37,10584.928627802516,14998.341370715189,16265.726335821162 HLA-A*24:02,FYSKISEYRH,10,4.76,strong,novel,CONFIDENTIAL,4760.0,17447.3,19539.6,4653.72,2557.610445090333,4367.497745288996,5044.566675718917 HLA-A*24:02,HYNIVTFCC,9,6.06,intermediate,novel,CONFIDENTIAL,6060.0,5297.5,7451.3,3700.51,883.2590003262035,1556.9247929275973,1614.7965128506924 HLA-A*24:02,CYSLYGTTLE,10,6.8666666670000005,intermediate,novel,CONFIDENTIAL,6866.666667,3660.3,5860.6,1124.93,1459.6902336809735,2496.7356419659945,3525.4328802793743 HLA-A*24:02,LYGTTLEQQY,10,7.08,intermediate,novel,CONFIDENTIAL,7080.0,9536.2,11002.8,10662.6,1941.517006322411,3576.9833205995587,4657.422623464599 HLA-A*24:02,KCLKFYSKI,9,7.503333333,intermediate,novel,CONFIDENTIAL,7503.333333,14133.4,17530.9,2341.86,699.1338794910405,1171.0981253622886,1770.7628128622314 HLA-A*24:02,LECVYCKQQL,10,8.133333333,intermediate,novel,CONFIDENTIAL,8133.333333,38821.8,37065.8,37771.0,10864.99221187379,11788.509292507915,19923.786170055457 HLA-A*24:02,EYRYYCYSV,9,8.64,intermediate,novel,CONFIDENTIAL,8640.0,972.8,1102.6,2521.31,443.0731091832768,775.765326629387,2495.118062975035 HLA-A*24:02,FYSKISEYRHY,11,10.6,intermediate,novel,CONFIDENTIAL,10600.0,11705.4,8762.6,14075.75,2915.085842405545,5116.743170286183,10544.696205113243 HLA-A*24:02,PYAVCDKCLK,10,10.92666667,intermediate,novel,CONFIDENTIAL,10926.66667,25168.5,27683.3,26543.21,6885.730236669599,9592.873322236668,13304.621298708753 HLA-A*24:02,YDFAFRDLCI,10,11.01333333,intermediate,novel,CONFIDENTIAL,11013.33333,2877.7,4657.9,2956.78,12352.424311027677,16119.501861361616,17724.81775456142 HLA-A*24:02,SEYRHYCYSL,10,11.97666667,intermediate,novel,CONFIDENTIAL,11976.66667,480.4,743.8,825.17,4777.401079101041,8473.810658312603,12884.606885147292 HLA-A*24:02,HYNIVTFC,8,16.50666667,weak,novel,CONFIDENTIAL,16506.66667,22350.0,21160.9,23030.23,4943.438196616697,5891.456284818602,17692.391313008437 HLA-A*24:02,VYCKQQLLRR,10,22.28,weak,novel,CONFIDENTIAL,22280.0,25203.4,28044.8,13917.2,3204.1311394463733,5560.819014680763,6042.764371359264 HLA-A*24:02,REVYDFAF,8,23.27,weak,novel,CONFIDENTIAL,23270.0,18654.2,23029.5,23691.66,1850.0543105860065,2478.076299821525,6735.1965030939145 HLA-A*24:02,KKQRFHNIR,9,28.63666667,weak,novel,CONFIDENTIAL,28636.66667,36419.0,38575.1,35997.06,18840.464726183844,21098.373761501232,19027.297846877213 HLA-A*24:02,KFYSKISEYRH,11,31.99666667,weak,novel,CONFIDENTIAL,31996.66667,32363.3,34292.3,19160.27,8006.412012230704,11191.558204349676,13840.797318332548 HLA-A*24:02,CYSVYGTTLE,10,32.71,weak,novel,CONFIDENTIAL,32710.0,4245.8,6458.2,1649.91,1569.781391307999,2487.4000289810565,4869.80660107878 HLA-A*24:02,YCYSLYGTTLE,11,36.66333333,weak,novel,CONFIDENTIAL,36663.33333,7610.9,9765.9,2313.58,16139.756539090044,18650.695843017987,23113.19583519468 HLA-A*24:02,YSVYGTTL,8,37.87,weak,novel,CONFIDENTIAL,37870.0,11241.5,11347.0,7091.69,8065.2962258007765,10251.465162052817,14753.287936076544 HLA-A*24:02,VYCKQQLLR,9,46.39666667,weak,novel,CONFIDENTIAL,46396.66667,17707.0,20124.1,6744.89,1776.1100492444934,3229.353309718729,4718.3223038401975 HLA-A*24:02,KKQRFHNI,8,46.83666667,weak,novel,CONFIDENTIAL,46836.66667,30641.7,29623.0,24111.62,3941.4027541538735,5280.337684102296,10622.243090510694 HLA-A*24:02,DKKQRFHNI,8,55.94666667,weak,novel,CONFIDENTIAL,55946.66667000001,39079.2,38729.5,25336.02,8260.198769933226,10568.709366954625,11615.771585035689 HLA-A*24:02,HLDKKQRFHNI,11,60.8,weak,novel,CONFIDENTIAL,60800.0,35515.4,30329.4,35114.98,10190.34608252548,12609.65475151052,22871.03164018196 HLA-A*24:02,VQSTHVDI,8,84.61333333,weak,novel,CONFIDENTIAL,84613.33333,33737.3,33855.8,29711.28,7667.765794228896,8752.810114048165,21345.212270250264 HLA-A*24:02,DLYCYEQF,8,29.23,weak,novel,CONFIDENTIAL,29230.0,23229.4,20680.1,24389.75,2811.256108620112,4375.938952621141,11821.029639805005 HLA-B*07:02,LIRCINCQKPL,11,0.16,strong,novel,CONFIDENTIAL,160.0,3064.8,4560.3,10601.75,1945.3949554892865,1759.2480536978715,13235.818200827416 HLA-B*07:02,RPRKLPQLC,9,0.29,strong,novel,CONFIDENTIAL,290.0,99.6,70.6,286.03,57.26882685127524,59.91249013361661,172.89450329842686 HLA-B*07:02,RGRWTGRCM,9,0.33,strong,novel,CONFIDENTIAL,330.0,544.1,737.1,167.14,88.23814698866963,80.05266353876195,72.67379631603724 HLA-B*07:02,RPRKLPQLCT,10,0.53,strong,novel,CONFIDENTIAL,530.0,496.2,414.4,170.01,62.07504609258122,67.46746511764775,178.43235602677032 HLA-B*07:02,RPRKLPQLCTE,11,0.81,strong,novel,CONFIDENTIAL,810.0,5681.8,4260.3,3632.24,304.6591113264488,285.9482746084626,3531.0372933871067 HLA-B*07:02,RTRRETQL,8,1.1,strong,novel,CONFIDENTIAL,1100.0,3895.8,2410.3,4306.76,302.2911569113051,202.7473844585019,718.8179070458214 HLA-B*07:02,TPTLHEYM,8,1.35,strong,novel,CONFIDENTIAL,1350.0,6604.3,5514.7,6866.75,1465.150113174896,1121.1330423351164,2429.2378272886103 HLA-B*07:02,TPTLHEYML,9,2.27,strong,novel,CONFIDENTIAL,2270.0,505.2,481.8,521.93,118.06538967914535,140.81757469280657,92.07467249450524 HLA-B*07:02,RAHYNIVTF,9,2.33,strong,novel,CONFIDENTIAL,2330.0,1801.2,1073.9,2595.16,1032.0194526410553,1071.074685897953,861.016487718305 HLA-B*07:02,DPQERPRKL,9,2.93,strong,novel,CONFIDENTIAL,2930.0,6430.7,8586.4,6673.02,4447.920925284252,5032.4869670550315,12010.097114484184 HLA-B*07:02,SSRTRRETQL,10,4.06,strong,novel,CONFIDENTIAL,4060.0,2089.8,2816.0,2016.89,2538.6524520076005,2004.4016130475518,4567.458624166775 HLA-B*07:02,CPEEKQRHL,9,4.23,strong,novel,CONFIDENTIAL,4230.0,893.3,1528.5,2463.79,1394.2744805759644,2149.807140578608,872.0581690760785 HLA-B*07:02,IVYRDGNPYAV,11,12.94,intermediate,novel,CONFIDENTIAL,12940.0,26980.1,26763.8,29570.16,7479.563593333048,6102.175369168072,9605.759184515084 HLA-B*07:02,LEQQYNKPL,9,15.1,weak,novel,CONFIDENTIAL,15100.0,13788.5,14910.4,16353.78,6259.887601536141,8331.416242786941,15960.857492638128 HLA-B*07:02,EPDRAHYNIV,10,19.27,weak,novel,CONFIDENTIAL,19270.0,2351.6,2782.2,1084.14,6278.3163427984155,7045.2443973048275,3790.5555744968437 HLA-B*07:02,KPLCDLLIRCI,11,21.1,weak,novel,CONFIDENTIAL,21100.0,6869.7,7330.3,12509.87,801.2379327776382,643.0833456130414,2284.5703449437165 HLA-B*07:02,KPLCDLLI,8,21.62,weak,novel,CONFIDENTIAL,21620.0,6518.4,5417.9,8852.66,1815.3360300680606,1719.2729086743375,8584.752287226422 HLA-B*07:02,NIRGRWTGRCM,11,49.58,weak,novel,CONFIDENTIAL,49580.0,12004.9,10710.7,12157.85,1904.0345404286825,2252.3556481610667,6420.5002847491005 HLA-B*07:02,LLRREVYDFAF,11,53.51,weak,novel,CONFIDENTIAL,53510.0,22487.3,25001.3,26384.57,2863.3737518256316,2094.5426998534267,6319.718643066938 HLA-B*15:01,CLKFYSKISEY,11,0.29,strong,?,CONFIDENTIAL,290.0,978.1,1148.9,3333.73,100.12875865670289,89.79060745300224,482.6428077286937 HLA-B*15:01,LKFYSKISEY,10,2.44,strong,?,CONFIDENTIAL,2440.0,328.6,360.4,670.13,464.4010900707389,365.56287514368285,226.36814205834855 HLA-B*15:01,SEYRHYCYSLY,11,2.5,strong,?,CONFIDENTIAL,2500.0,1944.7,2054.2,11010.92,1401.9870967130635,2102.273337412692,3603.7637607179827 HLA-B*15:01,AVCDKCLKFY,10,2.96,strong,?,CONFIDENTIAL,2960.0,3065.1,2645.1,1317.37,178.86701409141514,170.1696154317968,235.54338201813513 HLA-B*15:01,RHYCYSLY,8,3.96,strong,?,CONFIDENTIAL,3960.0,6469.3,4021.1,9120.32,6001.048237865377,6277.851617263311,8776.537436401066 HLA-B*15:01,GQAEPDRAHY,10,3.97,strong,?,CONFIDENTIAL,3970.0,38.7,26.9,18.62,17.40913832461758,22.93177948959837,18.25441985354535 HLA-B*15:01,KISEYRHYCY,10,4.18,strong,?,CONFIDENTIAL,4180.0,722.1,673.9,532.56,188.0057025142708,285.77394447106343,265.58478819185194 HLA-B*15:01,LQPETTDLY,9,4.87,strong,?,CONFIDENTIAL,4870.0,233.2,307.5,114.64,86.10233924690445,138.71362381007455,93.16515819544595 HLA-B*15:01,AFRDLCIVY,9,5.23,intermediate,?,CONFIDENTIAL,5230.0,1030.7,1057.2,460.29,424.3561939924511,612.2269976892022,976.4649149914122 HLA-B*15:01,FAFRDLCIVY,10,5.27,intermediate,?,CONFIDENTIAL,5270.0,30.0,54.0,72.32,85.35493740907567,113.36915764673607,144.0842521338272 HLA-B*15:01,YRHYCYSLY,9,5.62,intermediate,?,CONFIDENTIAL,5620.0,2226.8,2396.0,4253.87,2232.1043002386045,4070.7985953310827,4481.40899937409 HLA-B*15:01,LQPETTDLYCY,11,6.08,intermediate,?,CONFIDENTIAL,6080.0,2534.8,2382.0,1904.75,106.96510326211235,116.31407824150664,57.36903618129154 HLA-B*15:01,KQQLLRREVY,10,6.23,intermediate,?,CONFIDENTIAL,6230.0,178.4,74.7,76.01,30.491063196285573,44.73951549010499,68.18582442576489 HLA-B*15:01,CIVYRDGNPY,10,6.58,intermediate,?,CONFIDENTIAL,6580.0,125.9,114.3,110.45,40.53014006414743,45.807707973742865,31.46490517047732 HLA-B*15:01,IVYRDGNPY,9,6.63,intermediate,?,CONFIDENTIAL,6630.0,46.1,31.9,61.09,52.87880709132674,84.07449075465877,47.86039440508893 HLA-B*15:01,LLMGTLGIV,9,7.1,intermediate,?,CONFIDENTIAL,7100.0,860.8,937.1,2322.78,534.5426071153162,849.7323988294139,462.22498009594113 HLA-B*15:01,SLYGTTLEQQY,11,7.19,intermediate,?,CONFIDENTIAL,7190.0,338.0,230.4,1740.59,117.23636408487276,234.18830949346,105.37219050298744 HLA-B*15:01,QQYNKPLCDL,10,8.52,intermediate,?,CONFIDENTIAL,8520.0,1829.3,1621.3,1345.65,600.4679447031629,899.1971301644063,850.2194364474872 HLA-B*15:01,KLPQLCTEL,9,8.8,intermediate,?,CONFIDENTIAL,8800.0,3978.6,4085.5,5949.82,3835.943090749321,7120.605089018278,7847.671348501214 HLA-B*15:01,QQLLRREVY,9,8.9,intermediate,?,CONFIDENTIAL,8900.0,300.0,207.4,193.81,230.91940954822832,219.41800195333204,282.60995304812405 HLA-B*15:01,LCIVYRDGNPY,11,10.49,intermediate,?,CONFIDENTIAL,10490.0,494.5,301.2,982.82,339.8685867172298,227.20500067595367,682.6748668050218 HLA-B*15:01,LLRREVYDFAF,11,11.34,intermediate,?,CONFIDENTIAL,11340.0,381.6,399.3,1704.66,67.71174660960358,212.11992230183037,839.4445432934434 HLA-B*15:01,LLRREVYDF,9,13.73,intermediate,?,CONFIDENTIAL,13730.0,87.9,94.0,281.84,73.4518778217546,114.8259665577371,62.3035983246114 HLA-B*15:01,VYRDGNPY,8,14.08,intermediate,?,CONFIDENTIAL,14080.0,3951.2,3244.9,2753.92,813.0948639229259,1064.1938077744298,1394.6899762223227 HLA-B*15:01,RAHYNIVTF,9,15.85,weak,?,CONFIDENTIAL,15850.0,64.7,62.2,82.18,59.67455706810693,86.34963096148407,35.39766823681614 HLA-B*15:01,GQAEPDRAH,9,17.31,weak,?,CONFIDENTIAL,17310.0,1672.1,886.6,1526.88,627.7935489433132,1156.7461202151535,940.5329764058071 HLA-B*15:01,TLHEYMLDL,9,19.1,weak,?,CONFIDENTIAL,19100.0,3961.2,4781.2,5412.44,3188.32234786814,4370.989395819677,6157.718865619735 HLA-B*15:01,YAVCDKCLKFY,11,19.77,weak,?,CONFIDENTIAL,19770.0,2994.2,3383.8,11119.27,1313.5652926667344,1123.1035569308099,2332.3519035580634 HLA-B*15:01,LQTTIHDII,9,20.8,weak,?,CONFIDENTIAL,20800.0,3201.7,3183.3,6475.15,3508.220617041432,5252.916723398049,3558.7993737839442 HLA-B*15:01,QQLLRREVYDF,11,20.84,weak,?,CONFIDENTIAL,20840.0,4777.8,3005.2,6524.1,1395.5709140240094,1647.8974388280567,3234.8884455717102 HLA-B*15:01,KQRFHNIRGRW,11,21.33,weak,?,CONFIDENTIAL,21330.0,10844.6,6519.9,12284.4,3209.069828170334,5037.071796544306,7191.905607823522 HLA-B*15:01,AGQAEPDRAHY,11,21.56,weak,?,CONFIDENTIAL,21560.0,1404.6,1362.3,1407.49,523.3780922619607,1174.1391466687742,2108.223246766194 HLA-B*15:01,YSKISEYRHY,10,21.64,weak,?,CONFIDENTIAL,21640.0,174.5,235.9,48.14,49.734400543630066,38.94847000263059,41.31760975565961 HLA-B*15:01,QLLRREVY,8,28.48,weak,?,CONFIDENTIAL,28480.0,7374.1,4959.3,4022.01,334.1041331076923,497.43111535595193,996.4526394200656 HLA-B*15:01,KQRHLDKKQRF,11,29.77,weak,?,CONFIDENTIAL,29770.0,4349.9,1481.7,3954.91,264.1992655778023,799.4991513146069,3186.967792936229 HLA-B*15:01,YAVCDKCLKF,10,29.92,weak,?,CONFIDENTIAL,29920.0,341.8,721.3,1324.03,589.5003656676157,322.8184699303833,170.59555698221587 HLA-B*15:01,HDIILECVY,9,32.57,weak,?,CONFIDENTIAL,32570.0,2732.9,4656.1,1976.11,1364.6114315053885,1536.2820888670612,1348.9721708118166 HLA-B*15:01,TIHDIILECVY,11,37.79,weak,?,CONFIDENTIAL,37790.0,1072.7,1127.3,2106.16,595.6118816499967,979.8290459326907,3282.111249651654 HLA-B*15:01,IVYRDGNPYA,10,40.0,weak,?,CONFIDENTIAL,40000.0,871.8,544.8,935.11,5431.139564386863,5685.053856764514,5664.246317872208 HLA-B*15:01,SEYRHYCY,8,41.84,weak,?,CONFIDENTIAL,41840.0,6850.1,7695.0,8495.33,1628.083811935315,1895.3144773195527,2815.4525280584785 HLA-B*15:01,LLMGTLGI,8,43.75,weak,?,CONFIDENTIAL,43750.0,6292.9,6789.1,14125.18,465.4261794512378,605.1702826248901,1208.890677643299 HLA-B*15:01,RGRWTGRCM,9,45.1,weak,?,CONFIDENTIAL,45100.0,4008.0,3340.2,2544.8,1820.363713752112,3486.2518669557435,4006.836697906264 HLA-B*15:01,AVCDKCLKF,9,51.89,weak,?,CONFIDENTIAL,51890.0,1434.1,1425.9,2322.91,762.744945580612,819.5206751963057,640.1132456383094 HLA-B*15:01,SKISEYRHY,9,56.55,weak,?,CONFIDENTIAL,56550.0,1435.6,1678.9,2651.99,3236.554371663517,4229.655776556141,2363.137677540985 HLA-B*15:01,KISEYRHY,8,57.15,weak,?,CONFIDENTIAL,57150.0,4275.6,3402.6,3430.92,212.9623859156265,389.45988157147883,426.76252622744016 HLA-B*15:01,CQKPLCPEE,9,67.81,weak,?,CONFIDENTIAL,67810.0,16285.1,13486.3,11536.18,7714.102386831012,11886.001598087749,7346.684977628699 HLA-B*15:01,LRREVYDFAF,10,69.3,weak,?,CONFIDENTIAL,69300.0,5789.7,4932.3,6139.74,1691.4770197820444,3493.9972978175706,3106.905203122733 HLA-B*15:01,QLLRREVYDF,10,77.7,weak,?,CONFIDENTIAL,77700.0,1215.3,1582.7,2564.26,330.5604649673025,416.60424757969736,437.37861422193896 HLA-B*15:01,FYSKISEY,8,94.5,weak,?,CONFIDENTIAL,94500.0,2369.7,2379.5,7637.92,2414.7564272356617,3321.432577617953,4414.84818994649 HLA-A*02:01,LLMGTLGI,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,184.0,328.6,212.27,40.10507816195131,36.68413487712265,150.4233501819733 HLA-A*02:01,LMGTLGIV,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,1875.4,3868.3,1105.59,1731.2786926325007,1034.1209486251953,3385.6201356725123 HLA-A*02:01,EYMLDLQPETT,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,6152.0,5367.0,1548.09,19607.41628195521,22932.299772195034,21660.167247021807 HLA-A*02:01,LRLCVQSTHV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1971.4,2131.1,1815.24,6258.1693122330225,8850.5216424582,11139.886334756673 HLA-A*02:01,KISEYRYYC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,675.0,1585.7,2349.63,1616.7235765366324,1361.5868928858724,1663.4471790977288 HLA-A*02:01,YSLYGTTLEQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4849.4,6125.2,2507.49,4946.262186569977,7276.920108129971,5348.447744367745 HLA-A*02:01,DLLMGTLGI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,1327.9,1727.9,2529.15,1247.362388651159,736.5847222237112,721.9583442636213 HLA-A*02:01,PLCDLLIRCI,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4404.1,6552.8,2553.9,6227.56022017545,5538.638762408619,9368.909416015516 HLA-A*02:01,FAFRDLCIVY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,6485.2,8256.3,3191.53,6896.565730348924,8109.559671334478,7189.8532424441355 HLA-A*02:01,IVYRDGNPYAV,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,2531.3,518.2,3287.59,291.0171642495432,384.71909049438193,563.1260951324526 HLA-A*02:01,YCYSVYGTTL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,9502.8,8457.4,3314.52,4414.623268810618,4277.971516972154,4779.208919603183 HLA-A*02:01,QLLRREVYDFA,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,5854.7,2327.3,3518.78,799.2711256419948,503.36698776390966,765.5631997379436 HLA-A*02:01,MLDLQPETTDL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,4519.0,2556.8,3950.38,2691.260928057141,2899.896483807252,3845.047174100261 HLA-A*02:01,IILECVYCK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,17699.0,14731.4,4245.82,3546.5930165011573,4096.682345418097,5340.488501547996 HLA-A*02:01,YRDGNPYAV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7286.9,4990.8,4312.26,697.3534782821471,793.9928564089412,702.6178592295229 HLA-A*02:01,IILECVYC,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,13575.9,16281.2,5793.17,2605.483298879635,3189.755504599269,4549.1810265154745 HLA-A*02:01,TLRLCVQSTHV,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,9657.4,5423.7,6275.13,4642.816820403671,6367.344637406844,10467.335317603565 HLA-A*02:01,YDFAFRDLCIV,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,9827.2,5663.8,6605.64,8537.612365776004,9076.15995019165,8472.794847172467 HLA-A*02:01,YDFAFRDLCI,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,9356.6,8596.9,7051.13,5783.470457750719,8886.639869166393,6900.1844605167835 HLA-A*02:01,LLIRCINCQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,17771.5,18562.4,7167.67,6194.734449463747,6730.359385664998,9156.309395339307 HLA-A*02:01,TLEQQYNKPL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8846.4,9944.9,7526.68,8247.187903778167,7724.006369247068,7934.689593833418 HLA-A*02:01,LMGTLGIVC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,6752.4,7936.9,7548.2,5956.836085965389,7680.189836417857,6188.5104047798995 HLA-A*02:01,SEYRHYCYSV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,7213.2,7818.5,7961.17,2208.7935464187963,2195.755402862796,3869.8187165363624 HLA-A*02:01,SLYGTTLEQQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,13853.8,14694.2,8398.45,4484.348332784442,5169.1361410017635,6238.559002635688 HLA-A*02:01,TIHDIILECVY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,16111.2,13565.7,8436.97,18480.247525559542,17254.18407367307,16052.805885011456 HLA-A*02:01,DLCTELQTTI,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,13562.4,11451.5,8439.62,10315.064570869743,7829.124137416472,8372.603499441011 HLA-A*02:01,LLIRCINC,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,14592.1,18081.7,9263.13,5840.7933342989,7219.689803403051,8153.439741505592 HLA-A*02:01,KPLCDLLIRCI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,21675.5,24361.3,9568.74,11669.912353975344,12963.024986499122,6933.274830652026 HLA-A*02:01,KQQLLRREV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,12405.4,12030.3,10473.71,11151.684959687818,13378.011377737554,9381.644580361364 HLA-A*02:01,QLLRREVYDF,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,13898.1,12025.3,11086.96,11557.492136930747,8072.482127910267,9421.217765296751 HLA-A*02:01,RLECVYCKQQL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,7444.6,6179.7,11254.96,6057.102203953418,7857.069310594371,6712.316098963371 HLA-A*02:01,LLIRCINCQK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,16704.8,17019.5,11948.67,8211.356112912066,8409.215012137936,7444.559187973554 HLA-A*02:01,KCLKFYSKI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,17601.4,16904.7,12145.36,5452.758713298393,5650.7759692530835,5573.756294555697 HLA-A*02:01,ILECVYCK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,28087.3,23841.6,13210.86,12045.85456890354,13370.493728100842,21677.317790126628 HLA-A*02:01,LLRREVYDFAF,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,15235.6,13611.5,13943.72,10421.877091861914,9958.824701602422,8713.581563985184 HLA-A*02:01,HLDKKQRFHNI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,17238.0,13408.9,13960.33,2299.22418049324,1599.8286874944306,3929.7162390308467 HLA-A*02:01,ELQTTIHEIIL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,17333.4,13077.5,14052.78,10684.042104244922,9762.87125737261,12016.088103237638 HLA-A*02:01,YNKPLCDLLI,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,22341.3,20470.9,14169.12,10628.921221182429,11308.44710150331,6290.237739071789 HLA-A*02:01,SEYRHYCYSL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,13026.1,15061.2,14259.85,5811.169006151247,5824.826979669005,10007.41998819825 HLA-A*02:01,SLYGTTLEQQY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,18915.2,13566.9,14538.09,9040.57917762621,9154.051955183671,7841.014786675651 HLA-A*02:01,QQYNKPLCDLL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,13660.3,7395.5,14733.66,7881.58844606867,10235.307999333174,9186.411917724126 HLA-A*02:01,YAVCDKCLKF,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,18867.1,18812.7,15271.88,14274.15507299491,16838.86644164798,14951.32987603311 HLA-A*02:01,VYRDGNPYAV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,18526.3,19492.7,15454.89,4585.286102298362,7438.690507727205,5895.185063371625 HLA-A*02:01,RTLEDLLM,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,19711.8,18336.2,15875.55,2484.2089733460502,2163.61486135186,6388.379531010197 HLA-A*02:01,ISEYRHYCYSV,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,22763.2,17417.3,16198.28,2894.512011167368,2426.831196366345,5418.379048304882 HLA-A*02:01,CMSCCRSSRT,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,12198.2,13951.6,16991.94,10535.60112853321,10118.68679835581,14725.56271574406 HLA-A*02:01,DLYCYEQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,17409.5,16955.4,17632.1,8137.1463906061745,7442.693714332056,18847.28762692309 HLA-A*02:01,TTLEQQYNKPL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,16075.4,9390.2,17677.19,10436.028647722613,7351.251124982511,9772.915561571059 HLA-A*02:01,YSLYGTTL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,20908.9,19223.6,17993.27,2281.09855045255,1766.0101648825876,6784.524748974714 HLA-A*02:01,LECVYCKQQLL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,18246.4,11673.4,19398.9,15988.749501063316,17994.289200286003,22286.800243045924 HLA-A*02:01,FQDPQERPRKL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,23015.3,17750.8,20790.04,6434.987943781,7658.949352552701,7701.4660952873155 HLA-A*02:01,DLLIRCINCQK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,33080.9,32321.3,20836.43,15381.046882179076,16312.850147876072,12752.31784017157 HLA-A*02:01,YCYSVYGT,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,30982.1,30513.7,20902.36,6802.646468665559,5963.458511143889,11849.150764435824 HLA-A*02:01,HVDIRTLEDLL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,26313.3,20053.4,21135.7,11756.82545898115,9757.506531027086,8429.851731645947 HLA-A*02:01,QQLLRREVYDF,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,30678.9,27432.3,22055.0,19048.964668808807,18004.958876280023,20164.68452413133 HLA-A*02:01,QYNKPLCDLLI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,35465.9,31893.7,23709.1,12473.319358348526,16566.3994972223,15278.271757940349 HLA-A*02:01,GIVCPICSQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,24846.0,29028.1,24415.38,16340.00360103559,17338.576062648906,18546.03609115097 HLA-A*02:01,YSKISEYRHYC,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,19293.2,16011.7,24619.36,20768.38521022667,21379.50661678288,19188.252615464804 HLA-A*02:01,LQPETTDLY,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,24655.3,24832.0,25371.14,15306.476435863176,19334.568885193483,15652.590707128582 HLA-A*02:01,KISEYRHYCYS,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,22367.7,20249.9,25555.72,9021.712561571116,10503.08016267608,14106.538410439864 HLA-A*02:01,QLNDSSEEE,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,27846.4,29819.8,28772.62,14869.244790561152,16809.168241559193,12204.426798386134 HLA-A*02:01,CVYCKQQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,22673.2,21594.1,28998.27,13189.078881145795,14659.685439640254,21627.67462792852 HLA-A*02:01,QQLLRREVYD,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,38188.5,37815.6,30968.04,22971.137238845695,25162.71603898916,20481.405031208604 HLA-A*02:01,VQSTHVDI,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,34280.8,31479.2,31123.22,14870.238291291284,14288.133752706222,23077.704869215453 HLA-A*02:01,LCVQSTHVDIR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,37863.9,36133.6,34584.06,21318.04847828535,23000.069879246737,25881.846850535672 HLA-A*02:01,PQLCTELQTTI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,14066.9,13293.0,8717.3,13500.485965757342,15988.82079411965,13075.008237186474 HLA-A*02:01,IILECVYCKQQ,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,33495.1,30770.0,18479.01,12839.402238388291,16496.963366211512,13032.423575407904 HLA-A*02:01,STHVDIRTL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,21370.0,21277.7,13064.73,13081.25664250346,11367.70054316108,14121.00018631782 HLA-A*02:01,GIVCPICS,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,34852.3,34494.7,31844.36,16979.390982186476,17001.090435871018,22019.158545689672 HLA-A*03:01,RCMSCCRSSR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,338.5,229.2,274.07,2146.151895876547,2678.6392705485628,1852.490604772033 HLA-A*03:01,KISEYRHYCY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,421.4,625.5,572.58,508.5271761850045,198.21151382809373,295.13399784149385 HLA-A*03:01,CMSCCRSSR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,890.9,665.7,711.79,698.3657242942412,2116.4394014354266,1511.9583619970472 HLA-A*03:01,CLKFYSKISEY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,894.8,1363.0,1540.97,2095.081375326685,5205.889344177251,5802.133969881049 HLA-A*03:01,DIILECVYCK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1882.1,2341.3,1829.27,6024.303744160254,4179.40804463089,5637.158934176868 HLA-A*03:01,DLLIRCINCQK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,1145.9,2405.2,2443.06,1671.6915196553628,1513.4730710112726,1936.349688276893 HLA-A*03:01,CVYCKQQLLRR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,2237.6,2458.8,2848.84,95.13939639605283,126.24882041983204,176.5199522745506 HLA-A*03:01,AHYNIVTFCCK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,10306.1,7881.6,2918.19,942.6111512922834,2353.3178810853587,2133.4108950052528 HLA-A*03:01,CIVYRDGNPY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1467.2,2175.4,3007.11,4834.8995768888535,4183.345336629446,3218.6861814278805 HLA-A*03:01,NIRGRWTGR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,8301.7,8766.1,3240.31,2543.19939076268,4158.268367969763,2273.462019112702 HLA-A*03:01,HYNIVTFCCK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4049.9,4137.7,3307.86,2198.6174472625776,584.9455802587668,1084.223382567712 HLA-A*03:01,LKFYSKISEY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,3145.9,4157.9,3753.5,9631.77876679148,6822.620760297989,6779.638719408612 HLA-A*03:01,LGIVCPICSQK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,1894.1,3028.7,4665.87,4029.238428165269,8264.699832136585,7763.458517971719 HLA-A*03:01,MSCCRSSRTR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4520.9,5366.9,4817.98,1521.4009021341074,947.6102090610506,861.4797598619441 HLA-A*03:01,AFRDLCIVYR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4587.1,3393.3,5085.86,4400.140655805826,6190.8345548087855,5804.855243630565 HLA-A*03:01,SLYGTTLEQQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1800.8,2198.7,5755.56,2883.4793280106846,1957.5732183517416,3642.2699172915004 HLA-A*03:01,FAFRDLCIVY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,6733.5,7682.8,6638.96,5603.9553562641795,4502.49950017559,4077.4811835858773 HLA-A*03:01,ILECVYCK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,3159.6,4307.9,6671.15,890.273813982895,2692.586448413381,2374.3744309074427 HLA-A*03:01,IVYRDGNPYA,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,7084.6,8807.6,7479.27,5575.002201934725,7304.863413406947,7168.783410726695 HLA-A*03:01,YNIVTFCCK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7521.7,6165.1,7847.85,3252.6544931259614,1437.3016960840844,2674.2028326013715 HLA-A*03:01,AFRDLCIVY,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,8917.6,9238.2,7946.88,9427.562999067719,10594.479488804085,10957.51729834966 HLA-A*03:01,TIHDIILECVY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,7794.2,7411.9,8104.13,10238.983678331142,10535.356809094204,6687.412723396845 HLA-A*03:01,YAVCDKCLK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7155.4,6883.9,8224.8,3821.649764439815,2424.348143472158,4209.584907778554 HLA-A*03:01,KFYSKISEYRH,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,12156.0,13864.3,8573.91,8079.243506444573,13968.451334406172,17485.818462512172 HLA-A*03:01,SEYRHYCYSLY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,16141.2,13640.5,8860.23,3824.429784223868,5840.156611897132,8804.176450141538 HLA-A*03:01,CQKPLCPEEK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,6276.4,6630.4,9041.61,7555.636156280687,9600.987179295393,11138.161583549549 HLA-A*03:01,RLCVQSTHV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,10478.1,15291.1,9250.01,9181.889033252728,12869.854545414255,13561.35189596395 HLA-A*03:01,CMSCCRSSRTR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,4846.3,5407.0,10382.31,1255.8368120386338,5820.3946396026795,10020.255721723788 HLA-A*03:01,FAFRDLCIVYR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,5944.0,6144.5,10464.76,2491.416241486951,3000.0494697373656,4183.038873089809 HLA-A*03:01,CDKCLKFYSK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,15320.0,14495.2,10654.87,4404.859869695959,2186.190658739226,2983.1005232107013 HLA-A*03:01,TLEQQYNK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,8603.6,10288.9,10744.48,2689.6793224747407,5570.180711962954,10546.89805472796 HLA-A*03:01,VYCKQQLLR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,16174.8,15505.3,11111.21,5567.253279410506,6462.855881066801,12767.768012515184 HLA-A*03:01,YGTTLEQQYNK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,8477.2,6768.1,11681.38,9249.895196629821,13146.110479915269,14859.272306690418 HLA-A*03:01,WTGRCMSCCR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8888.0,10630.0,12285.99,8769.71255533588,8526.06828795749,9365.77933071704 HLA-A*03:01,LLMGTLGIVC,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,25372.2,25636.3,12569.3,6640.963839857213,5425.959510050151,6041.896311538562 HLA-A*03:01,KISEYRHY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,12211.8,13743.6,12912.53,1745.7820230340333,5329.022384307455,5567.132124374539 HLA-A*03:01,NIVTFCCK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,10964.7,13002.8,12935.6,1844.1544916120545,3736.831761832908,4925.956839391305 HLA-A*03:01,KQRHLDKK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,14324.0,13835.5,12994.1,978.3974358896014,1889.583078871707,4983.341587821577 HLA-A*03:01,RAHYNIVTF,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,11466.9,12923.0,13236.75,9593.774954796472,8075.12897822427,12654.867729913249 HLA-A*03:01,AVCDKCLKF,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,18440.7,16946.0,13831.93,7889.603419329891,8646.709244506084,10614.6251828039 HLA-A*03:01,ISEYRHYCY,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,15430.7,14319.7,14211.49,12713.65719886557,8762.981746819096,8380.195323653576 HLA-A*03:01,KQRFHNIR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,14637.8,13352.3,14664.95,7402.795328586102,17833.537842691203,16238.782362526514 HLA-A*03:01,MSCCRSSRTRR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,11276.2,11875.2,15034.96,2449.284978813199,6777.043043756836,5270.466920037933 HLA-A*03:01,TLHEYMLDL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,19457.6,18168.3,15136.0,13478.837615421822,15576.67774404172,16919.82201004596 HLA-A*03:01,RLCVQSTH,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,9516.8,10452.0,15734.3,5585.55143358981,11921.371380186743,15486.510604749796 HLA-A*03:01,KQRFHNIRGRW,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,16747.9,20875.5,15845.69,17769.847494111054,19599.174139326293,20086.92059187255 HLA-A*03:01,GTLGIVCPI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,16237.1,14216.1,16709.72,12524.864051355848,12949.151893041524,13325.577079707613 HLA-A*03:01,QLLRREVYDF,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,19300.3,20194.8,17676.8,14022.340680721682,20082.35074421348,18551.78613098005 HLA-A*03:01,LLIRCINCQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,8157.2,11563.9,18800.89,12143.728454198936,9472.68106483512,9922.57257387812 HLA-A*03:01,DLLMGTLGIV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,23381.5,25829.0,19532.01,19685.621315083717,16714.310190655182,13696.421961249798 HLA-A*03:01,EVYDFAFR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,13702.2,15071.1,19611.21,1767.8732388699136,3858.152467319781,7339.085909331587 HLA-A*03:01,MSCCRSSR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,13412.8,17131.7,19626.06,4265.170604589931,9705.2678010256,11207.538346703797 HLA-A*03:01,LRLCVQSTHV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,21693.8,25703.0,19670.29,23725.232869921416,21818.993890530248,22001.21513133623 HLA-A*03:01,STLRLCVQSTH,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,18133.0,16029.2,20787.57,6090.8665088837915,7790.524470676007,10694.070090191282 HLA-A*03:01,QLLRREVY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,20930.4,23909.5,21021.66,7983.111817600068,14737.649498897768,17877.926347847344 HLA-A*03:01,LLRREVYDF,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,21305.1,22277.1,24721.05,15832.304015760437,19283.206536874794,20248.882622842077 HLA-A*03:01,KCLKFYSKI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,26463.2,30831.3,28007.8,21373.22114892818,26154.45167537219,26504.28315878981 HLA-A*03:01,MSCCRSSRT,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,24516.5,27338.6,28748.97,15119.46430226626,19740.653965912104,24027.66602289625 HLA-A*03:01,PLCPEEKQR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,36295.1,36868.6,34912.68,15986.350453537061,23361.048188657267,25231.38625942724 HLA-A*11:01,AGQAEPDRA,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,41723.4,40700.5,32897.81,19487.655921806832,30992.293143074872,28645.275312916296 HLA-A*11:01,CDKCLKFYSK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8273.7,6893.5,5287.81,1057.9586125305268,1930.9392149616751,1160.6200182226905 HLA-A*11:01,CIVYRDGNPY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1549.9,1954.0,4175.53,1201.5119232425986,1523.6402337495904,1299.5845012037664 HLA-A*11:01,CLKFYSKISEY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,7376.9,8920.5,19570.09,7637.329624943686,8607.709095106029,8762.37463560671 HLA-A*11:01,CMSCCRSSR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,1592.3,1773.2,1842.96,488.0842002240792,1874.2298925866912,1782.2213109483835 HLA-A*11:01,CMSCCRSSRTR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,8619.7,9396.2,12933.23,2050.42703281226,5002.305870894132,4060.2372663091705 HLA-A*11:01,CQKPLCPEEK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,5449.0,4837.6,4576.07,3343.3340164938622,4865.293587730572,2478.4329499518435 HLA-A*11:01,CTELQTTIHDI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,35925.5,35188.4,35050.81,22798.707627700576,28660.626685495805,29746.469768459243 HLA-A*11:01,CVQSTHVDIR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,2449.3,2115.8,3271.2,1291.8619090634695,4487.297919064697,3476.411583807726 HLA-A*11:01,CVYCKQQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,31728.1,31864.3,39604.52,14035.357103872793,20154.58255974632,21930.36670288617 HLA-A*11:01,CVYCKQQLLRR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,2403.7,2456.7,4831.97,93.83898846301727,390.7621648395705,423.73524575262087 HLA-A*11:01,DEIDGPAG,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,48003.1,47382.8,46217.22,27792.657178297242,38917.54642211169,38973.699846921714 HLA-A*11:01,DGNPYAVCDKC,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,40538.8,40097.4,36277.0,22644.889294346005,32958.07360819781,31155.150716482636 HLA-A*11:01,DIILECVYCKQ,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,17383.4,25455.0,12219.31,15002.464793098225,21154.070358240133,25959.531548526524 HLA-A*11:01,DKCLKFYSK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,25328.9,27730.4,18143.61,5625.1027409749695,7487.455608354694,5159.269579738569 HLA-A*11:01,ETTDLYCY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,28056.6,27712.1,27009.93,3114.3400173612004,8754.660161221043,11449.502370931597 HLA-A*11:01,ETTDLYCYE,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,16807.5,16298.1,23906.67,7638.863420046611,9078.933396460823,8752.514875295234 HLA-A*11:01,EVYDFAFRD,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,33871.9,29166.3,22421.45,10000.986830999123,14992.82471561801,10471.836474467988 HLA-A*11:01,FAFRDLCIVY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4890.6,5787.0,6695.51,2111.8075182587977,3764.62808001404,3468.643622885065 HLA-A*11:01,FYSKISEYR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7460.3,7323.0,11508.38,7598.6440074526,9063.00748065181,7878.682800473727 HLA-A*11:01,GIVCPICS,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,36529.9,36951.7,37710.98,12178.449899354055,22401.8645937304,21862.68336374641 HLA-A*11:01,GIVCPICSQKP,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,5977.6,9779.0,7427.01,19797.42036602359,18897.169929317624,20931.652420488208 HLA-A*11:01,GNPYAVCDK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5427.2,9063.5,12577.73,3810.7391846558003,6521.732590493438,5437.6556973628 HLA-A*11:01,GTLGIVCPI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5656.2,4368.8,11138.54,6941.08461334701,9651.926068364071,7345.191953283194 HLA-A*11:01,GTTLEQQY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,28459.9,28050.6,29129.4,4644.142127747263,11274.911093989678,12875.288108669034 HLA-A*11:01,GTTLEQQYNKP,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,6917.7,9681.4,4733.19,14846.621207594035,14920.752522801706,15942.816579493032 HLA-A*11:01,HYNIVTFCCK,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1212.9,1213.5,1042.44,986.2134889530138,1106.5693237358985,862.0328849786329 HLA-A*11:01,IILECVYCKQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1574.5,3232.2,2186.62,3679.051824763417,5954.129636216291,4311.148633844881 HLA-A*11:01,IRCINCQK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,16016.2,21088.2,18778.93,8480.580280892878,17388.291093062242,15253.674597972657 HLA-A*11:01,IVCPICSQKP,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,2826.4,4960.7,2205.49,16508.530727223904,16974.72338982387,15775.722075404898 HLA-A*11:01,KCLKFYSK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,15541.6,15933.7,6483.71,1688.5798741481885,5655.4332857194995,7313.001651474084 HLA-A*11:01,KFYSKISEY,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,4277.8,4132.4,4210.14,4972.939038785257,9118.133117261548,8700.969290004108 HLA-A*11:01,KFYSKISEYR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1605.3,1633.4,2366.54,1137.0639999806385,2272.9980293324465,1729.8826861340624 HLA-A*11:01,KFYSKISEYRH,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,18415.7,19655.2,25751.96,14699.295372019302,23992.417951230054,25590.848944466867 HLA-A*11:01,KISEYRHY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,17931.7,19198.5,15027.49,1522.6065110482944,4477.380176476408,5070.170946378111 HLA-A*11:01,KISEYRHYC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,20196.7,19172.7,11647.81,10281.016527436794,4944.240035832017,5751.106983853338 HLA-A*11:01,KISEYRHYCYS,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,13337.5,14596.4,11597.26,4377.158306251542,7540.125987623304,7993.637624355907 HLA-A*11:01,KLPQLCTE,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,38181.5,38757.1,41573.79,16633.422440105976,27104.274879078985,29385.089805161864 HLA-A*11:01,KPLCDLLIR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,15434.3,15102.8,16968.61,8793.072708583251,11116.526219165933,11621.30038642246 HLA-A*11:01,KQRFHNIR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,21443.4,19892.5,25255.0,5787.74716083292,13307.040556423251,13540.427098056638 HLA-A*11:01,KQRFHNIRGR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4249.5,4445.0,12018.69,5409.382204732741,9711.896646958934,9812.403449787995 HLA-A*11:01,KQRHLDKK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,23657.8,18900.6,11497.93,2586.227786574936,6783.142480139129,7998.383868129876 HLA-A*11:01,LKFYSKISEYR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,11847.9,12677.9,15475.8,13037.329081950098,15505.198031189448,15286.376816878057 HLA-A*11:01,MFQDPQERPRK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,10202.0,9296.4,11308.67,1280.2721339000564,1711.5512873649725,919.0610016561909 HLA-A*11:01,MSCCRSSR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,8484.7,11909.6,13500.58,745.2206048255368,5216.293578749275,6881.621862690828 HLA-A*11:01,MSCCRSSRT,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,22981.7,27596.0,23953.79,11060.567746376115,14862.260431497814,13589.971511163352 HLA-A*11:01,MSCCRSSRTR,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1533.6,2308.9,1643.51,903.9767868061217,2074.1432121998073,1958.2968832103518 HLA-A*11:01,NIRGRWTGR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,14493.5,17810.6,20180.34,5890.516113854318,10879.94574628364,12143.640015284895 HLA-A*11:01,PAGQAEPDRA,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,46355.4,44968.7,41496.95,23063.434845277046,34165.494001505336,30850.645412976253 HLA-A*11:01,PLCPEEKQR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,36829.9,37176.6,32709.34,16598.379289006047,25603.592946354336,24689.211771860093 HLA-A*11:01,QTTIHDIILE,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,15820.5,17922.7,25662.12,5541.484079375929,11350.789872319578,9146.047895482036 HLA-A*11:01,RDGNPYAVCDK,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,23425.8,22986.2,21483.84,2351.0427263159063,5694.4144232026865,5896.370227517439 HLA-A*11:01,REVYDFAFR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,12364.8,10984.1,13509.78,2239.19763824527,5266.938322697817,4025.0188421705866 HLA-A*11:01,RHYCYSLY,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,20679.4,18175.4,26264.11,11030.244842726494,20766.472612386984,22126.468640123534 HLA-A*11:01,RLCVQSTHVD,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,36665.7,38873.9,31502.68,16439.925064143878,20797.42164828521,18900.914768442428 HLA-A*11:01,RTLEDLLM,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,25073.4,25150.0,28533.91,8568.430817036431,17210.176195650718,16426.73627097718 HLA-A*11:01,RTLEDLLMGT,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,10614.7,11547.7,17957.28,5427.7381364339035,11073.460570718235,8382.788506029578 HLA-A*11:01,SCCRSSRTR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,18883.7,24145.6,26662.08,15485.848069987858,21890.10996332307,20287.36552220845 HLA-A*11:01,SEYRHYCYS,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,23398.2,20096.9,25882.7,7242.909501939216,11946.170085596685,7814.238764311442 HLA-A*11:01,SEYRHYCYSLY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,17141.7,11630.6,20957.16,4964.468160017936,10681.487881770356,11395.416258121184 HLA-A*11:01,SKISEYRHYCY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,7955.9,12019.7,3460.45,8211.261537746985,13027.182753105479,13348.301499116104 HLA-A*11:01,SLYGTTLEQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,1994.1,2518.8,5669.4,909.8688747359337,2583.0824601605514,1509.6991300998684 HLA-A*11:01,SSEEEDEIDG,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,46388.6,45398.5,42990.49,21625.90201824093,30902.77595538252,30192.822903541386 HLA-A*11:01,STHVDIRTLE,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8180.6,10690.3,17396.74,2351.1514694241355,3626.466390078379,3108.056300285067 HLA-A*11:01,STLRLCVQS,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7311.6,8398.6,11216.42,2592.2153659165165,4993.4326595202865,3624.604111059481 HLA-A*11:01,STLRLCVQSTH,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,11210.0,8508.4,21889.29,3677.2775077249353,6870.0783172152405,6505.549577252196 HLA-A*11:01,TFCCKCDSTLR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,22933.5,20909.8,22830.75,2175.4325392765772,7119.048522834347,6740.3866863709045 HLA-A*11:01,TGRCMSCCR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,11664.8,14196.3,18365.21,7303.337786462746,12676.74558320295,12030.401042609656 HLA-A*11:01,TIHDIILEC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,27744.8,24875.3,17265.29,14935.346863415803,15595.43261271422,13548.678252515494 HLA-A*11:01,TIHDIILECVY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,3895.1,2672.8,4811.78,2174.707726321328,6132.897803971964,4242.112406686189 HLA-A*11:01,TTDLYCYEQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,10077.9,11981.9,10163.91,2173.431967459284,5313.533654592557,3318.6427623216523 HLA-A*11:01,TTDLYCYEQLN,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,35658.6,32336.7,29490.29,10811.590918534217,14704.748465398878,12049.104505257204 HLA-A*11:01,TTIHDIILE,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5708.2,6682.6,9740.68,2152.1711328398355,3144.269092022183,2404.548142607724 HLA-A*11:01,TTIHDIILEC,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,20096.2,21278.2,15893.42,13869.607493932192,15474.210571434014,13922.373319334065 HLA-A*11:01,TTLEQQYNKP,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1705.9,1893.4,709.82,14394.018049627624,10986.393844503771,8565.266976037352 HLA-A*11:01,TTLEQQYNKPL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,16816.0,14604.8,7924.39,16751.873641029164,19942.592102160306,15317.980158638191 HLA-A*11:01,VTFCCKCDS,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,15433.2,18465.4,20534.74,6336.414626546366,11300.937689146247,10910.325644877645 HLA-A*11:01,VYCKQQLLR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,8470.8,9908.1,6611.43,4227.101931069413,8653.539142274069,6781.498224130493 HLA-A*11:01,YSKISEYR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,10650.0,13959.6,19078.77,5073.774072307504,9928.3530788146,7545.033627566686 HLA-A*11:01,YSKISEYRH,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,23416.7,21120.8,19254.0,13898.256380507719,20758.7157315749,17581.880315582115 HLA-A*11:01,YSLYGTTLEQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4900.2,5991.6,16898.07,5990.40340289689,8845.80405880307,7233.2704224236295 HLA-A*24:02,RWTGRCMSCC,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,12646.1,17842.8,9956.13,2327.51469183589,4316.3125469468705,4864.483113368513 HLA-A*24:02,IVYRDGNPYA,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,30398.7,29113.0,27617.81,14403.729281193133,19063.353259695068,18682.20111462103 HLA-A*24:02,LLMGTLGIVC,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,41830.1,38467.6,31101.01,8535.885812364837,10566.25636941926,17589.22672256815 HLA-A*24:02,CDSTLRLCV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,37420.4,34181.2,35314.62,17019.067445824192,19265.427300303934,21144.969105576147 HLA-A*24:02,RWTGRCMSC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,8183.3,11769.2,4275.6,1252.129180436395,3292.725140390301,2210.2280345417207 HLA-A*24:02,KKQRFHNIRG,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,40321.0,40204.7,39485.14,18274.05257410025,19301.011905667063,23056.192391966866 HLA-A*24:02,DFAFRDLCIV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,19689.7,20285.9,20730.97,7285.596677999693,11784.91100066803,11840.785810576412 HLA-A*24:02,YCYSLYGTTL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,268.9,342.4,134.87,4045.001672952072,6291.939345660424,4901.339636410948 HLA-A*24:02,CYEQLNDSSE,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,33221.5,33039.4,27771.52,10510.647969789583,12029.17312200454,19754.559503290977 HLA-A*24:02,EYMLDLQPE,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,24906.0,25762.3,13459.45,2627.735370486799,4674.805189252864,4188.678260213211 HLA-A*24:02,LYCYEQLNDS,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,33078.8,30784.3,26307.61,7872.069624051399,9035.551260635362,21149.095121956765 HLA-A*24:02,EYMLDLQPET,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,27655.5,25809.7,21242.99,4744.62409060371,7767.151151194414,9194.004919948033 HLA-A*24:02,HYCYSLYGTT,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,13921.3,13727.3,9117.55,4160.420166078235,7680.8767122373865,6305.814446087444 HLA-A*24:02,CYEQLNDSS,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,31067.7,31256.9,25011.36,7807.102866221178,8956.773474358984,12966.768480464609 HLA-A*24:02,QQYNKPLCDL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8431.5,11155.1,14362.04,14481.133400705226,18341.356262682217,22837.715700467557 HLA-A*24:02,NPYAVCDKCL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,10467.5,15642.6,18381.11,19232.4395447782,22612.536963433042,29874.648854998188 HLA-A*24:02,LYGTTLEQQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,28990.4,26818.0,14067.07,3472.181258108957,5467.901453685499,7824.765679419533 HLA-A*24:02,LDKKQRFHNI,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,39331.7,33720.9,24254.75,10760.48301466704,13079.386571515302,20192.747930564517 HLA-A*24:02,LRREVYDFAF,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,15282.3,13888.3,9032.62,3396.447163543621,4625.537091423434,6698.489881155511 HLA-A*24:02,RCINCQKPL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,37134.8,37655.9,23544.46,10265.641030587249,14067.48892259074,21094.348221815093 HLA-A*24:02,TLEDLLMGTL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,30399.7,28756.1,28965.04,11968.230862651542,14649.88784954922,26051.10082437397 HLA-A*24:02,FYSKISEYR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,9771.4,9577.7,7663.92,2517.1746850747663,4142.750766266233,4009.092735139147 HLA-A*24:02,QLLRREVYDF,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,8433.7,9138.2,6034.56,1310.3032659857092,2974.8412189658825,5017.241639230572 HLA-A*24:02,RHLDKKQRF,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5098.1,9996.1,2766.13,624.1467030641506,1176.3738893945574,2251.6225660901514 HLA-A*24:02,VDIRTLEDL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,31430.5,32842.3,26183.23,14396.492717335888,17405.885082392062,21649.131058989424 HLA-A*24:02,VDIRTLEDLL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,30708.1,31901.9,23643.51,16245.343259640471,19853.677601398125,25142.400644843307 HLA-A*24:02,DPQERPRKL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,45927.6,44371.8,40129.47,18731.668651537042,20882.49224815732,25848.272337163253 HLA-A*24:02,LCVQSTHVDIR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,44114.8,42730.3,37951.25,23082.196613387925,25362.85581135644,34825.67527716447 HLA-A*24:02,TFCCKCDSTLR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,26034.1,32333.2,29078.7,16550.591567148018,19665.39300949906,24965.192500271387 HLA-A*24:02,EYMLDLQPETT,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,33132.1,29578.5,26569.63,2314.188613306457,4274.95201592503,6762.439605732876 HLA-A*24:02,RTLEDLLMGTL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,23833.8,19335.6,26563.04,7132.363209150767,10084.0069546467,16049.337486401597 HLA-A*24:02,CYSLYGTT,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,26920.4,27792.6,18030.1,2537.044719367281,3859.837211588529,12517.958554324397 HLA-A*24:02,SEYRHYCYSLY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,10564.2,16609.5,9611.69,10111.367483128466,15044.378332556398,22937.54791454256 HLA-A*24:02,QQLLRREVYDF,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,13218.7,13841.1,18489.62,2628.5987247809007,4844.5063343588,14465.954769608485 HLA-A*24:02,REVYDFAFRDL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,8446.6,6586.4,14573.68,11115.580407908974,14349.687826574016,11849.240258871943 HLA-A*24:02,ECVYCKQQLLR,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,38119.6,37341.5,31379.52,25523.90440628299,26560.196552286587,35494.326036429564 HLA-A*24:02,YDFAFRDLCIV,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,21789.1,26267.5,16421.16,18867.044391276177,22701.055813824718,30793.33695416457 HLA-A*24:02,GNPYAVCDKCL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,26546.4,27740.6,34978.46,16938.861890850312,20381.577819995644,27403.483742458222 HLA-A*24:02,CLKFYSKISEY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,24856.2,23225.4,37524.57,26914.97977266992,27765.476529918862,40336.140749917526 HLA-A*24:02,ISEYRHYCYSL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,2833.5,2355.4,3113.45,8899.099085509657,11589.442806600184,19249.411082425595 HLA-A*24:02,EVYDFAFRDLC,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,24585.8,25415.6,22725.03,20922.26895286488,23293.65328310457,32126.65772282363 HLA-A*24:02,YYCYSVYGTTL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,216.6,202.8,604.7,111.89359456203823,301.8856522689136,427.51753151815245 HLA-A*24:02,YYCYSVYGTT,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,7525.9,7137.3,1947.24,1525.68790783909,3382.4220501099353,3628.565531893391 HLA-A*24:02,SEYRYYCYSV,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1054.0,2190.0,2876.35,7275.177471932455,11336.546020412681,15400.903755077848 HLA-A*24:02,YYCYSVYGT,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7889.0,7567.3,6728.99,2629.136425290338,4638.798012449303,6811.211221578079 HLA-A*24:02,EYRYYCYSVY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,7795.8,7867.7,7892.64,991.8631191941313,1866.2659332119367,3302.622051967073 HLA-A*24:02,VYGTTLEQQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,28208.5,24869.1,10684.19,3000.441701810754,4928.23580615368,6186.455574963915 HLA-B*07:02,GPAGQAEPDRA,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,14048.1,16452.5,15440.19,8439.613951352983,7297.677323820672,19040.17544763588 HLA-B*07:02,LPQLCTELQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,11909.2,16362.1,8416.83,5938.424953192735,4843.336291632932,6641.374936153506 HLA-B*07:02,TPTLHEYMLDL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,3949.5,5038.2,2848.26,768.4217841785478,1302.9485673908416,2715.12986266422 HLA-B*07:02,EPDRAHYNI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,4371.2,5465.6,10667.68,7408.608322233509,7762.451996891709,12742.865461393372 HLA-B*07:02,RCINCQKPL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5829.8,10020.6,10881.59,3948.634140996812,3630.282590768997,7602.4332938880725 HLA-B*07:02,LPQLCTELQTT,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,11770.8,12514.7,11799.65,4419.9396490359295,3282.740576315066,8159.9436921048045 HLA-B*07:02,YSLYGTTL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,15487.0,12208.5,23550.32,8041.795089062719,5743.020502832607,14662.043113555439 HLA-B*07:02,GPAGQAEPD,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,18549.3,22758.7,10408.18,5409.346556132906,4792.710922930783,6776.763925503233 HLA-B*07:02,CVYCKQQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,24775.7,17574.2,29636.79,9462.35507254124,8425.700072279475,13477.150061657196 HLA-B*07:02,NPYAVCDKCL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,2833.6,2857.8,3554.75,1510.460666972149,1788.5132709715024,3572.3129531873565 HLA-B*07:02,SEYRHYCYSL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,16944.8,13971.8,23377.94,11601.694482651614,11169.815939819517,14290.891903899379 HLA-B*07:02,QPETTDLYCY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,26188.3,26393.7,28506.75,18330.593632548607,14625.753154498847,15556.322880163614 HLA-B*15:01,DLQPETTDLY,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,1985.9,2981.1,1131.31,3901.182659640288,4483.832141070158,1783.8474540063705 HLA-B*15:01,SEYRHYCYSL,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,4282.6,5063.9,4628.91,3965.6009998798,6776.729747724399,4161.584395180935 HLA-B*15:01,RLCVQSTHV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,3307.3,3976.7,1399.08,991.6851693379456,782.1412939991621,668.6607439441259 HLA-B*15:01,LMGTLGIVC,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,10940.6,9196.3,2283.83,1163.2972888083507,2451.3715853407625,1714.1131992773676 HLA-B*15:01,SLYGTTLEQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,7925.2,8401.9,4879.94,3679.8327331602363,4346.2989638983645,4685.072392552245 HLA-B*15:01,LLIRCINCQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,15785.5,17114.1,7808.63,4894.483493790985,6755.436663280311,4899.414494827697 HLA-B*15:01,LEQQYNKPL,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,10517.3,11395.1,3724.69,2763.669943063591,3815.3322109175483,1596.0868186309488 HLA-B*15:01,QAEPDRAHY,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,5004.4,6088.1,3473.69,2522.379797450491,4143.677865503523,3351.3820256185163 HLA-B*15:01,GTLGIVCPI,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,3304.0,3917.1,6258.59,4511.577434755824,6087.242606478117,4170.298962941786 HLA-B*15:01,GIVCPICSQ,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,15376.8,18112.8,6329.0,6001.218223650592,7331.933504408098,6918.57362795794 HLA-B*15:01,QLNDSSEEE,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,32349.3,31283.9,17375.87,13513.985673522251,15056.571198816013,20926.329416096352 HLA-B*15:01,CMSCCRSSR,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,17864.8,16099.6,15117.01,6856.540480813101,7400.988988509392,10515.678390013729 HLA-B*15:01,MSCCRSSRT,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,21090.0,24486.0,20596.6,9843.743232345192,12450.37128504561,16894.533840304917 HLA-B*15:01,RSSRTRRETQ,10,100.0,nb,,NON-CONFIDENTIAL,100000.0,24184.0,26577.4,17711.83,5047.551635684806,7137.601056542866,3896.277724665923 HLA-B*15:01,FAFRDLCIV,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,4061.7,4421.6,11152.53,4739.977927422689,6404.1837745263065,6853.42945161375 HLA-B*15:01,LIRCINCQK,9,100.0,nb,,NON-CONFIDENTIAL,100000.0,20383.5,18954.9,15499.94,6841.424715671967,9989.585883938127,12415.662202950058 HLA-B*15:01,LMGTLGIVCPI,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,3804.9,5684.1,5377.35,300.37054166544965,480.78461830160103,1357.4092613559171 HLA-B*15:01,REVYDFAF,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,7893.8,8117.0,4471.38,319.6990871014404,329.72918502561424,730.5215018668864 HLA-B*15:01,VQSTHVDIRTL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,7355.2,4917.9,11578.08,871.4412256872432,997.933215443048,2237.2053353204565 HLA-B*15:01,LIRCINCQKPL,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,4240.5,6136.4,8293.61,1327.251814535686,2510.971864538838,5517.449886787486 HLA-B*15:01,RLCVQSTH,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,15171.7,13984.7,17594.75,1230.1589376680622,1082.1936270282201,1195.1841288138844 HLA-B*15:01,FYSKISEYRHY,11,100.0,nb,,NON-CONFIDENTIAL,100000.0,5921.2,6033.2,5410.21,6511.682318012961,7712.374659604434,10691.632383740738 HLA-B*15:01,TLGIVCPI,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,20397.2,18270.7,18481.22,3542.624250266721,3264.328781981469,4857.917071540425 HLA-B*15:01,RTRRETQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,20971.0,19528.8,24587.69,3000.259755732219,5335.501010276689,5763.350117362581 HLA-B*15:01,MSCCRSSR,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,27739.7,31263.0,33102.03,9088.570284361696,10481.258964209477,17024.63267992658 HLA-B*15:01,CVYCKQQL,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,26148.1,21053.8,30864.02,3813.192639109835,7495.5400912868445,8313.235518311285 HLA-B*15:01,KQRHLDKK,8,100.0,nb,,NON-CONFIDENTIAL,100000.0,29028.1,28410.4,29631.98,9377.071195923309,11672.093401923024,19848.68824116367 ================================================ FILE: test/data/master_affinity_fixture_config.json ================================================ {"_network": null, "fit_info": [], "hyperparameters": {"activation": "tanh", "allele_amino_acid_encoding": "BLOSUM62", "allele_dense_layer_sizes": [], "batch_normalization": true, "data_dependent_initialization_method": null, "dense_layer_l1_regularization": 0.0, "dense_layer_l2_regularization": 0.0, "dropout_probability": 0.0, "early_stopping": true, "init": "glorot_uniform", "layer_sizes": [4], "learning_rate": null, "locally_connected_layers": [{"activation": "tanh", "filters": 2, "kernel_size": 2}], "loss": "custom:mse_with_inequalities", "max_epochs": 500, "min_delta": 0.0, "minibatch_size": 128, "num_outputs": 1, "optimizer": "rmsprop", "output_activation": "sigmoid", "patience": 20, "peptide_allele_merge_activation": "", "peptide_allele_merge_method": "multiply", "peptide_dense_layer_sizes": [], "peptide_encoding": {"alignment_method": "pad_middle", "left_edge": 4, "max_length": 15, "right_edge": 4, "vector_encoding_name": "BLOSUM62"}, "random_negative_affinity_max": 50000.0, "random_negative_affinity_min": 20000.0, "random_negative_binder_threshold": null, "random_negative_constant": 0, "random_negative_distribution_smoothing": 0.0, "random_negative_lengths": [8, 9, 10, 11, 12, 13, 14, 15], "random_negative_match_distribution": true, "random_negative_method": "recommended", "random_negative_output_indices": null, "random_negative_rate": 0.0, "topology": "feedforward", "train_data": {}, "validation_split": 0.1}, "network_json": "{\"class_name\": \"Functional\", \"config\": {\"name\": \"predictor\", \"trainable\": true, \"layers\": [{\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 15, 21], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"peptide\"}, \"registered_name\": null, \"name\": \"peptide\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"LocallyConnected1D\", \"config\": {\"name\": \"lc_0\", \"trainable\": true, \"dtype\": \"float32\", \"filters\": 2, \"kernel_size\": [2], \"strides\": [1], \"padding\": \"valid\", \"data_format\": \"channels_last\", \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null, \"implementation\": 1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 15, 21]}, \"name\": \"lc_0\", \"inbound_nodes\": [[[\"peptide\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"flattened_0\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 14, 2]}, \"name\": \"flattened_0\", \"inbound_nodes\": [[[\"lc_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_early\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 28]}, \"name\": \"batch_norm_early\", \"inbound_nodes\": [[[\"flattened_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 4, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 28]}, \"name\": \"dense_0\", \"inbound_nodes\": [[[\"batch_norm_early\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_0\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 4]}, \"name\": \"batch_norm_0\", \"inbound_nodes\": [[[\"dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"output\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 1, \"activation\": \"sigmoid\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 4]}, \"name\": \"output\", \"inbound_nodes\": [[[\"batch_norm_0\", 0, 0, {}]]]}], \"input_layers\": [[\"peptide\", 0, 0]], \"output_layers\": [[\"output\", 0, 0]]}, \"keras_version\": \"2.17.0\", \"backend\": \"tensorflow\"}", "network_weights": null, "network_weights_loader": null, "prediction_cache": null} ================================================ FILE: test/data/master_affinity_fixture_predictions.json ================================================ {"peptides": ["AAAAAAAAA", "CCCCCCCCC", "ACDEFGHIK"], "predictions": [223.6097539934542, 223.6097539934542, 223.6097539934542]} ================================================ FILE: test/data/master_densenet_fixture_config.json ================================================ {"hyperparameters": {"peptide_dense_layer_sizes": [3], "layer_sizes": [4, 3, 2], "activation": "tanh", "output_activation": "sigmoid", "dropout_probability": 0.7, "batch_normalization": true, "locally_connected_layers": [], "topology": "with-skip-connections", "num_outputs": 1, "allele_amino_acid_encoding": "BLOSUM62", "allele_dense_layer_sizes": [], "peptide_encoding": {"vector_encoding_name": "BLOSUM62", "alignment_method": "pad_middle", "left_edge": 4, "right_edge": 4, "max_length": 15}, "peptide_allele_merge_method": "multiply", "peptide_allele_merge_activation": "", "dense_layer_l1_regularization": 0.001, "dense_layer_l2_regularization": 0.0, "init": "glorot_uniform", "loss": "custom:mse_with_inequalities", "optimizer": "rmsprop", "learning_rate": null, "max_epochs": 500, "validation_split": 0.1, "early_stopping": true, "minibatch_size": 128, "data_dependent_initialization_method": null, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "random_negative_output_indices": null, "random_negative_rate": 0.0, "random_negative_constant": 0, "random_negative_match_distribution": true, "random_negative_distribution_smoothing": 0.0, "random_negative_method": "recommended", "random_negative_binder_threshold": null, "random_negative_lengths": [8, 9, 10, 11, 12, 13, 14, 15], "patience": 20, "min_delta": 0.0, "train_data": {}}, "_network": null, "network_json": "{\"class_name\": \"Functional\", \"config\": {\"name\": \"predictor\", \"trainable\": true, \"layers\": [{\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 15, 21], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"peptide\"}, \"registered_name\": null, \"name\": \"peptide\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"flattened_0\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 15, 21]}, \"name\": \"flattened_0\", \"inbound_nodes\": [[[\"peptide\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"peptide_dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 315]}, \"name\": \"peptide_dense_0\", \"inbound_nodes\": [[[\"flattened_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_early\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"batch_norm_early\", \"inbound_nodes\": [[[\"peptide_dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 4, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"dense_0\", \"inbound_nodes\": [[[\"batch_norm_early\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_0\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 4]}, \"name\": \"batch_norm_0\", \"inbound_nodes\": [[[\"dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dropout\", \"config\": {\"name\": \"dropout_0\", \"trainable\": true, \"dtype\": \"float32\", \"rate\": 0.30000000000000004, \"noise_shape\": null, \"seed\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 4]}, \"name\": \"dropout_0\", \"inbound_nodes\": [[[\"batch_norm_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Concatenate\", \"config\": {\"name\": \"concatenate\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": -1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [[null, 3], [null, 4]]}, \"name\": \"concatenate\", \"inbound_nodes\": [[[\"batch_norm_early\", 0, 0, {}], [\"dropout_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_1\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 7]}, \"name\": \"dense_1\", \"inbound_nodes\": [[[\"concatenate\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_1\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"batch_norm_1\", \"inbound_nodes\": [[[\"dense_1\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dropout\", \"config\": {\"name\": \"dropout_1\", \"trainable\": true, \"dtype\": \"float32\", \"rate\": 0.30000000000000004, \"noise_shape\": null, \"seed\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"dropout_1\", \"inbound_nodes\": [[[\"batch_norm_1\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Concatenate\", \"config\": {\"name\": \"concatenate_1\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": -1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [[null, 4], [null, 3]]}, \"name\": \"concatenate_1\", \"inbound_nodes\": [[[\"dropout_0\", 0, 0, {}], [\"dropout_1\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_2\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 2, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 7]}, \"name\": \"dense_2\", \"inbound_nodes\": [[[\"concatenate_1\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_2\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 2]}, \"name\": \"batch_norm_2\", \"inbound_nodes\": [[[\"dense_2\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dropout\", \"config\": {\"name\": \"dropout_2\", \"trainable\": true, \"dtype\": \"float32\", \"rate\": 0.30000000000000004, \"noise_shape\": null, \"seed\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 2]}, \"name\": \"dropout_2\", \"inbound_nodes\": [[[\"batch_norm_2\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"output\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 1, \"activation\": \"sigmoid\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 2]}, \"name\": \"output\", \"inbound_nodes\": [[[\"dropout_2\", 0, 0, {}]]]}], \"input_layers\": [[\"peptide\", 0, 0]], \"output_layers\": [[\"output\", 0, 0]]}, \"keras_version\": \"2.17.0\", \"backend\": \"tensorflow\"}", "network_weights": null, "network_weights_loader": null, "fit_info": [], "prediction_cache": null} ================================================ FILE: test/data/master_densenet_fixture_predictions.json ================================================ {"peptides": ["SYFPEITHI", "AAAAAAAAA", "CCCCCCCCC", "DDDDDDDDD"], "predictions": [3600.1894226888244, 3600.1894226888244, 3600.1894226888244, 3600.1894226888244]} ================================================ FILE: test/data/master_multi_output_fixture_config.json ================================================ {"hyperparameters": {"peptide_dense_layer_sizes": [], "layer_sizes": [4], "activation": "tanh", "output_activation": "sigmoid", "dropout_probability": 0.0, "batch_normalization": false, "locally_connected_layers": [], "topology": "feedforward", "num_outputs": 3, "allele_amino_acid_encoding": "BLOSUM62", "allele_dense_layer_sizes": [], "peptide_encoding": {"vector_encoding_name": "BLOSUM62", "alignment_method": "pad_middle", "left_edge": 4, "right_edge": 4, "max_length": 15}, "peptide_allele_merge_method": "multiply", "peptide_allele_merge_activation": "", "dense_layer_l1_regularization": 0.001, "dense_layer_l2_regularization": 0.0, "init": "glorot_uniform", "loss": "custom:mse_with_inequalities", "optimizer": "rmsprop", "learning_rate": null, "max_epochs": 500, "validation_split": 0.1, "early_stopping": true, "minibatch_size": 128, "data_dependent_initialization_method": null, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "random_negative_output_indices": null, "random_negative_rate": 0.0, "random_negative_constant": 0, "random_negative_match_distribution": true, "random_negative_distribution_smoothing": 0.0, "random_negative_method": "recommended", "random_negative_binder_threshold": null, "random_negative_lengths": [8, 9, 10, 11, 12, 13, 14, 15], "patience": 20, "min_delta": 0.0, "train_data": {}}, "_network": null, "network_json": "{\"class_name\": \"Functional\", \"config\": {\"name\": \"predictor\", \"trainable\": true, \"layers\": [{\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 15, 21], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"peptide\"}, \"registered_name\": null, \"name\": \"peptide\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"flattened_0\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 15, 21]}, \"name\": \"flattened_0\", \"inbound_nodes\": [[[\"peptide\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 4, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 315]}, \"name\": \"dense_0\", \"inbound_nodes\": [[[\"flattened_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"output\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"sigmoid\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 4]}, \"name\": \"output\", \"inbound_nodes\": [[[\"dense_0\", 0, 0, {}]]]}], \"input_layers\": [[\"peptide\", 0, 0]], \"output_layers\": [[\"output\", 0, 0]]}, \"keras_version\": \"2.17.0\", \"backend\": \"tensorflow\"}", "network_weights": null, "network_weights_loader": null, "fit_info": [], "prediction_cache": null} ================================================ FILE: test/data/master_multi_output_fixture_predictions.json ================================================ {"peptides": ["SYFPEITHI", "AAAAAAAAA", "CCCCCCCCC", "DDDDDDDDD"], "predictions": [39441.12426571068, 39441.12426571068, 39441.12426571068, 39441.12426571068]} ================================================ FILE: test/data/master_pan_concat_fixture_config.json ================================================ {"hyperparameters": {"allele_amino_acid_encoding": "BLOSUM62", "allele_dense_layer_sizes": [3], "peptide_dense_layer_sizes": [3], "peptide_allele_merge_method": "concatenate", "peptide_allele_merge_activation": "", "layer_sizes": [5], "activation": "tanh", "output_activation": "sigmoid", "dropout_probability": 0.8, "batch_normalization": true, "locally_connected_layers": [{"filters": 2, "activation": "tanh", "kernel_size": 2}], "topology": "feedforward", "num_outputs": 1, "peptide_encoding": {"vector_encoding_name": "BLOSUM62", "alignment_method": "pad_middle", "left_edge": 4, "right_edge": 4, "max_length": 15}, "dense_layer_l1_regularization": 0.001, "dense_layer_l2_regularization": 0.0, "init": "glorot_uniform", "loss": "custom:mse_with_inequalities", "optimizer": "rmsprop", "learning_rate": null, "max_epochs": 500, "validation_split": 0.1, "early_stopping": true, "minibatch_size": 128, "data_dependent_initialization_method": null, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "random_negative_output_indices": null, "random_negative_rate": 0.0, "random_negative_constant": 0, "random_negative_match_distribution": true, "random_negative_distribution_smoothing": 0.0, "random_negative_method": "recommended", "random_negative_binder_threshold": null, "random_negative_lengths": [8, 9, 10, 11, 12, 13, 14, 15], "patience": 20, "min_delta": 0.0, "train_data": {}}, "_network": null, "network_json": "{\"class_name\": \"Functional\", \"config\": {\"name\": \"predictor\", \"trainable\": true, \"layers\": [{\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 15, 21], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"peptide\"}, \"registered_name\": null, \"name\": \"peptide\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"LocallyConnected1D\", \"config\": {\"name\": \"lc_0\", \"trainable\": true, \"dtype\": \"float32\", \"filters\": 2, \"kernel_size\": [2], \"strides\": [1], \"padding\": \"valid\", \"data_format\": \"channels_last\", \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null, \"implementation\": 1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 15, 21]}, \"name\": \"lc_0\", \"inbound_nodes\": [[[\"peptide\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 1], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"allele\"}, \"registered_name\": null, \"name\": \"allele\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"flattened_0\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 14, 2]}, \"name\": \"flattened_0\", \"inbound_nodes\": [[[\"lc_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Embedding\", \"config\": {\"name\": \"allele_representation\", \"trainable\": false, \"dtype\": \"float32\", \"batch_input_shape\": [null, 1], \"input_dim\": 3, \"output_dim\": 777, \"embeddings_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"RandomUniform\", \"config\": {\"minval\": -0.05, \"maxval\": 0.05, \"seed\": null}, \"registered_name\": null}, \"embeddings_regularizer\": null, \"activity_regularizer\": null, \"embeddings_constraint\": null, \"mask_zero\": false, \"input_length\": 1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1]}, \"name\": \"allele_representation\", \"inbound_nodes\": [[[\"allele\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"peptide_dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 28]}, \"name\": \"peptide_dense_0\", \"inbound_nodes\": [[[\"flattened_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"allele_dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1, 777]}, \"name\": \"allele_dense_0\", \"inbound_nodes\": [[[\"allele_representation\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_early\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"batch_norm_early\", \"inbound_nodes\": [[[\"peptide_dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"allele_flat\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1, 3]}, \"name\": \"allele_flat\", \"inbound_nodes\": [[[\"allele_dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Concatenate\", \"config\": {\"name\": \"allele_peptide_merged\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": -1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [[null, 3], [null, 3]]}, \"name\": \"allele_peptide_merged\", \"inbound_nodes\": [[[\"batch_norm_early\", 0, 0, {}], [\"allele_flat\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 5, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 6]}, \"name\": \"dense_0\", \"inbound_nodes\": [[[\"allele_peptide_merged\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_0\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"batch_norm_0\", \"inbound_nodes\": [[[\"dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dropout\", \"config\": {\"name\": \"dropout_0\", \"trainable\": true, \"dtype\": \"float32\", \"rate\": 0.19999999999999996, \"noise_shape\": null, \"seed\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"dropout_0\", \"inbound_nodes\": [[[\"batch_norm_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"output\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 1, \"activation\": \"sigmoid\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"output\", \"inbound_nodes\": [[[\"dropout_0\", 0, 0, {}]]]}], \"input_layers\": [[\"peptide\", 0, 0], [\"allele\", 0, 0]], \"output_layers\": [[\"output\", 0, 0]]}, \"keras_version\": \"2.17.0\", \"backend\": \"tensorflow\"}", "network_weights": null, "network_weights_loader": null, "fit_info": [], "prediction_cache": null} ================================================ FILE: test/data/master_pan_concat_fixture_predictions.json ================================================ {"peptides": ["SYFPEITHI", "AAAAAAAAA", "CCCCCCCCC", "DDDDDDDDD"], "predictions": [50000.0, 50000.0, 50000.0, 50000.0], "alleles": ["HLA-A*01:01", "HLA-B*07:02", "HLA-A*01:01", "HLA-B*07:02"], "allele_to_sequence": {"HLA-A*01:01": "ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRST", "HLA-B*07:02": "YWVTSRQPNMLKIHGFEDCAYWVTSRQPNMLKIHGFE"}} ================================================ FILE: test/data/master_pan_multiply_fixture_config.json ================================================ {"hyperparameters": {"allele_amino_acid_encoding": "BLOSUM62", "allele_dense_layer_sizes": [3], "peptide_dense_layer_sizes": [3], "peptide_allele_merge_method": "multiply", "peptide_allele_merge_activation": "", "layer_sizes": [5], "activation": "tanh", "output_activation": "sigmoid", "dropout_probability": 0.8, "batch_normalization": true, "locally_connected_layers": [{"filters": 2, "activation": "tanh", "kernel_size": 2}], "topology": "feedforward", "num_outputs": 1, "peptide_encoding": {"vector_encoding_name": "BLOSUM62", "alignment_method": "pad_middle", "left_edge": 4, "right_edge": 4, "max_length": 15}, "dense_layer_l1_regularization": 0.001, "dense_layer_l2_regularization": 0.0, "init": "glorot_uniform", "loss": "custom:mse_with_inequalities", "optimizer": "rmsprop", "learning_rate": null, "max_epochs": 500, "validation_split": 0.1, "early_stopping": true, "minibatch_size": 128, "data_dependent_initialization_method": null, "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "random_negative_output_indices": null, "random_negative_rate": 0.0, "random_negative_constant": 0, "random_negative_match_distribution": true, "random_negative_distribution_smoothing": 0.0, "random_negative_method": "recommended", "random_negative_binder_threshold": null, "random_negative_lengths": [8, 9, 10, 11, 12, 13, 14, 15], "patience": 20, "min_delta": 0.0, "train_data": {}}, "_network": null, "network_json": "{\"class_name\": \"Functional\", \"config\": {\"name\": \"predictor\", \"trainable\": true, \"layers\": [{\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 15, 21], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"peptide\"}, \"registered_name\": null, \"name\": \"peptide\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"LocallyConnected1D\", \"config\": {\"name\": \"lc_0\", \"trainable\": true, \"dtype\": \"float32\", \"filters\": 2, \"kernel_size\": [2], \"strides\": [1], \"padding\": \"valid\", \"data_format\": \"channels_last\", \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null, \"implementation\": 1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 15, 21]}, \"name\": \"lc_0\", \"inbound_nodes\": [[[\"peptide\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"InputLayer\", \"config\": {\"batch_input_shape\": [null, 1], \"dtype\": \"float32\", \"sparse\": false, \"ragged\": false, \"name\": \"allele\"}, \"registered_name\": null, \"name\": \"allele\", \"inbound_nodes\": []}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"flattened_0\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 14, 2]}, \"name\": \"flattened_0\", \"inbound_nodes\": [[[\"lc_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Embedding\", \"config\": {\"name\": \"allele_representation\", \"trainable\": false, \"dtype\": \"float32\", \"batch_input_shape\": [null, 1], \"input_dim\": 3, \"output_dim\": 777, \"embeddings_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"RandomUniform\", \"config\": {\"minval\": -0.05, \"maxval\": 0.05, \"seed\": null}, \"registered_name\": null}, \"embeddings_regularizer\": null, \"activity_regularizer\": null, \"embeddings_constraint\": null, \"mask_zero\": false, \"input_length\": 1}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1]}, \"name\": \"allele_representation\", \"inbound_nodes\": [[[\"allele\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"peptide_dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 28]}, \"name\": \"peptide_dense_0\", \"inbound_nodes\": [[[\"flattened_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"allele_dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 3, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1, 777]}, \"name\": \"allele_dense_0\", \"inbound_nodes\": [[[\"allele_representation\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_early\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"batch_norm_early\", \"inbound_nodes\": [[[\"peptide_dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Flatten\", \"config\": {\"name\": \"allele_flat\", \"trainable\": true, \"dtype\": \"float32\", \"data_format\": \"channels_last\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 1, 3]}, \"name\": \"allele_flat\", \"inbound_nodes\": [[[\"allele_dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Multiply\", \"config\": {\"name\": \"allele_peptide_merged\", \"trainable\": true, \"dtype\": \"float32\"}, \"registered_name\": null, \"build_config\": {\"input_shape\": [[null, 3], [null, 3]]}, \"name\": \"allele_peptide_merged\", \"inbound_nodes\": [[[\"batch_norm_early\", 0, 0, {}], [\"allele_flat\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"dense_0\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 5, \"activation\": \"tanh\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": {\"module\": \"keras.regularizers\", \"class_name\": \"L1L2\", \"config\": {\"l1\": 0.0010000000474974513, \"l2\": 0.0}, \"registered_name\": null}, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 3]}, \"name\": \"dense_0\", \"inbound_nodes\": [[[\"allele_peptide_merged\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"BatchNormalization\", \"config\": {\"name\": \"batch_norm_0\", \"trainable\": true, \"dtype\": \"float32\", \"axis\": [1], \"momentum\": 0.99, \"epsilon\": 0.001, \"center\": true, \"scale\": true, \"beta_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"gamma_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"moving_mean_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"moving_variance_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Ones\", \"config\": {}, \"registered_name\": null}, \"beta_regularizer\": null, \"gamma_regularizer\": null, \"beta_constraint\": null, \"gamma_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"batch_norm_0\", \"inbound_nodes\": [[[\"dense_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dropout\", \"config\": {\"name\": \"dropout_0\", \"trainable\": true, \"dtype\": \"float32\", \"rate\": 0.19999999999999996, \"noise_shape\": null, \"seed\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"dropout_0\", \"inbound_nodes\": [[[\"batch_norm_0\", 0, 0, {}]]]}, {\"module\": \"keras.layers\", \"class_name\": \"Dense\", \"config\": {\"name\": \"output\", \"trainable\": true, \"dtype\": \"float32\", \"units\": 1, \"activation\": \"sigmoid\", \"use_bias\": true, \"kernel_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"GlorotUniform\", \"config\": {\"seed\": null}, \"registered_name\": null}, \"bias_initializer\": {\"module\": \"keras.initializers\", \"class_name\": \"Zeros\", \"config\": {}, \"registered_name\": null}, \"kernel_regularizer\": null, \"bias_regularizer\": null, \"activity_regularizer\": null, \"kernel_constraint\": null, \"bias_constraint\": null}, \"registered_name\": null, \"build_config\": {\"input_shape\": [null, 5]}, \"name\": \"output\", \"inbound_nodes\": [[[\"dropout_0\", 0, 0, {}]]]}], \"input_layers\": [[\"peptide\", 0, 0], [\"allele\", 0, 0]], \"output_layers\": [[\"output\", 0, 0]]}, \"keras_version\": \"2.17.0\", \"backend\": \"tensorflow\"}", "network_weights": null, "network_weights_loader": null, "fit_info": [], "prediction_cache": null} ================================================ FILE: test/data/master_pan_multiply_fixture_predictions.json ================================================ {"peptides": ["SYFPEITHI", "AAAAAAAAA", "CCCCCCCCC", "DDDDDDDDD"], "predictions": [50000.0, 50000.0, 50000.0, 50000.0], "alleles": ["HLA-A*01:01", "HLA-B*07:02", "HLA-A*01:01", "HLA-B*07:02"], "allele_to_sequence": {"HLA-A*01:01": "ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRST", "HLA-B*07:02": "YWVTSRQPNMLKIHGFEDCAYWVTSRQPNMLKIHGFE"}} ================================================ FILE: test/data/master_released_class1_affinity_predictions.json ================================================ {"release": "2.2.0", "allele_specific": {"alleles": ["HLA-A*01:01", "HLA-B*07:01", "HLA-C*03:03", "HLA-A*01:01", "HLA-B*07:01", "HLA-C*03:03"], "peptides": ["SYFPEITHI", "NLVPMVATV", "LLFGYPVYV", "GILGFVFTL", "SLLMWITQC", "FLPSDFFPS"], "predictions": [24452.379008653887, 7735.019327156681, 2587.3099121536384, 24210.461714088437, 10486.544291944927, 14799.753594255337]}, "pan_allele": {"alleles": ["HLA-A*01:01", "HLA-B*07:01", "HLA-C*01:02", "HLA-A*01:01", "HLA-B*07:01", "HLA-C*01:02"], "peptides": ["SYFPEITHI", "NLVPMVATV", "LLFGYPVYV", "GILGFVFTL", "SLLMWITQC", "FLPSDFFPS"], "predictions": [26048.673469654335, 9361.822193351605, 935.231481331825, 27538.157456313915, 24523.76119046196, 8001.970439100902]}} ================================================ FILE: test/data/master_released_class1_presentation_highscore_rows_metadata.json ================================================ { "allele_count": 35, "context_count": 9, "high_score_threshold": 0.9, "low_score_stats": { "pres_with_presentation_score": { "context_count": 9, "contexts_with_low_allele": 9, "low_score_threshold": 0.2 }, "pres_without_presentation_score": { "context_count": 9, "contexts_with_low_allele": 9, "low_score_threshold": 0.2 } }, "low_score_threshold": 0.2, "presentation_internal_affinity_provenance": "generated on Thu Jun 11 13:31:45 2020", "presentation_provenance": "generated on Thu Jun 11 13:37:18 2020", "release": "2.2.0", "row_count": 315, "score_columns": [ "pres_with_presentation_score", "pres_without_presentation_score" ], "source_tf_predictions_csv": "/private/tmp/mhcflurry-cross-allele-1000-randflanks/tf_predictions.csv.gz" } ================================================ FILE: test/expensive_verify_pretrain_optimizable.py ================================================ # Expensive test - not run by pytest. from mhcflurry import train_pan_allele_models_command from mhcflurry.downloads import get_path from mhcflurry.allele_encoding import AlleleEncoding import pandas import numpy PRETRAIN_DATA_PATH = get_path( "random_peptide_predictions", "predictions.csv.bz2") FULL_TRAIN_DF = pandas.read_csv( get_path( "data_curated", "curated_training_data.no_mass_spec.csv.bz2")) TRAIN_DF = FULL_TRAIN_DF.loc[ (FULL_TRAIN_DF.peptide.str.len() >= 8) & (FULL_TRAIN_DF.peptide.str.len() <= 15) ] ALLELE_SEQUENCES = pandas.read_csv( get_path("allele_sequences", "allele_sequences.csv"), index_col=0).sequence ALLELE_SEQUENCES = ALLELE_SEQUENCES.loc[ ALLELE_SEQUENCES.index.isin(TRAIN_DF.allele) ] TRAIN_DF = TRAIN_DF.loc[ TRAIN_DF.allele.isin(ALLELE_SEQUENCES.index) ] FOLDS_DF = pandas.DataFrame(index=TRAIN_DF.index) FOLDS_DF["fold_0"] = True HYPERPARAMTERS = { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [1024, 512], 'learning_rate': None, 'locally_connected_layers': [], 'loss': 'custom:mse_with_inequalities', 'max_epochs': 0, 'min_delta': 0.0, 'minibatch_size': 128, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', 'patience': 20, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'peptide_encoding': {'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, 'vector_encoding_name': 'BLOSUM62'}, 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 20000.0, 'random_negative_constant': 25, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 0.2, 'train_data': {'pretrain': True, 'pretrain_max_epochs': 30, 'pretrain_min_epochs': 5, 'pretrain_patience': 3, 'pretrain_peptides_per_step': 8, 'pretrain_steps_per_epoch': 256}, 'validation_split': 0.1, 'data_dependent_initialization_method': "lsuv", } def verify_optimizable(): predictor = train_pan_allele_models_command.train_model( work_item_name="work-item0", work_item_num=0, num_work_items=1, architecture_num=0, num_architectures=1, fold_num=0, num_folds=1, replicate_num=0, num_replicates=1, hyperparameters=HYPERPARAMTERS, pretrain_data_filename=PRETRAIN_DATA_PATH, verbose=1, progress_print_interval=5.0, predictor=None, save_to=None, constant_data={ 'train_data': TRAIN_DF, 'folds_df': FOLDS_DF, 'allele_encoding': AlleleEncoding( alleles=ALLELE_SEQUENCES.index.values, allele_to_sequence=ALLELE_SEQUENCES.to_dict()), }, ) (network,) = predictor.neural_networks print(predictor, network) print(network.fit_info) pretrain_val_loss = network.fit_info[0]["val_loss"][-1] print(pretrain_val_loss) numpy.testing.assert_array_less(pretrain_val_loss, 0.1) if __name__ == "__main__": verify_optimizable() ================================================ FILE: test/pytest_helpers.py ================================================ """ Test helper functions providing assertion utilities. """ import sys _MHCFLURRY_COMMANDS = { "mhcflurry-calibrate-percentile-ranks": "mhcflurry.calibrate_percentile_ranks_command", "mhcflurry-class1-train-allele-specific-models": "mhcflurry.train_allele_specific_models_command", "mhcflurry-class1-select-allele-specific-models": "mhcflurry.select_allele_specific_models_command", "mhcflurry-class1-train-pan-allele-models": "mhcflurry.train_pan_allele_models_command", "mhcflurry-class1-select-pan-allele-models": "mhcflurry.select_pan_allele_models_command", "mhcflurry-class1-train-processing-models": "mhcflurry.train_processing_models_command", "mhcflurry-class1-select-processing-models": "mhcflurry.select_processing_models_command", } def mhcflurry_cli(command): """ Return argv prefix to run a mhcflurry command using the current interpreter. This avoids picking up a system-installed mhcflurry that may rely on TensorFlow. """ module = _MHCFLURRY_COMMANDS.get(command) if module is None: raise ValueError(f"Unknown mhcflurry command: {command}") return [sys.executable, "-c", f"from {module} import run; run()"] def eq_(a, b, msg=None): """Assert that a equals b.""" if msg: assert a == b, msg else: assert a == b, f"{a!r} != {b!r}" def assert_less(a, b, msg=None): """Assert that a < b.""" if msg: assert a < b, msg else: assert a < b, f"{a!r} is not less than {b!r}" def assert_greater(a, b, msg=None): """Assert that a > b.""" if msg: assert a > b, msg else: assert a > b, f"{a!r} is not greater than {b!r}" def assert_almost_equal(a, b, places=7, msg=None): """Assert that a and b are equal up to `places` decimal places.""" diff = abs(a - b) threshold = 10 ** (-places) if msg: assert diff < threshold, msg else: assert diff < threshold, ( f"{a!r} != {b!r} within {places} places (diff={diff})" ) def assert_raises(exc_class, func=None, *args, **kwargs): """ Assert that calling func raises exc_class. Can also be used as a context manager. """ import pytest if func is None: return pytest.raises(exc_class) with pytest.raises(exc_class): func(*args, **kwargs) ================================================ FILE: test/test_allele_encoding.py ================================================ import time from mhcflurry.allele_encoding import AlleleEncoding from mhcflurry.amino_acid import BLOSUM62_MATRIX from numpy.testing import assert_equal def test_allele_encoding_speed(): encoding = AlleleEncoding( ["A*02:01", "A*02:03", "A*02:01"], { "A*02:01": "AC", "A*02:03": "AE", } ) start = time.time() encoding1 = encoding.fixed_length_vector_encoded_sequences("BLOSUM62") assert_equal( [ [BLOSUM62_MATRIX["A"], BLOSUM62_MATRIX["C"]], [BLOSUM62_MATRIX["A"], BLOSUM62_MATRIX["E"]], [BLOSUM62_MATRIX["A"], BLOSUM62_MATRIX["C"]], ], encoding1) print("Simple encoding in %0.2f sec." % (time.time() - start)) print(encoding1) encoding = AlleleEncoding( ["A*02:01", "A*02:03", "A*02:01"] * int(1e5), { "A*02:01": "AC" * 16, "A*02:03": "AE" * 16, } ) start = time.time() encoding1 = encoding.fixed_length_vector_encoded_sequences("BLOSUM62") print("Long encoding in %0.2f sec." % (time.time() - start)) ================================================ FILE: test/test_amino_acid.py ================================================ """Tests for amino acid encoding.""" from mhcflurry import amino_acid from numpy.testing import assert_equal import pandas import warnings letter_to_index_dict = { 'A': 0, 'B': 1, 'C': 2, } def test_index_and_one_hot_encoding(): letter_to_vector_df = pandas.DataFrame( [ [1, 0, 0,], [0, 1, 0,], [0, 0, 1,] ], columns=[0, 1, 2] ) index_encoding = amino_acid.index_encoding( ["AAAA", "ABCA"], letter_to_index_dict) assert_equal( index_encoding, [ [0, 0, 0, 0], [0, 1, 2, 0], ]) one_hot = amino_acid.fixed_vectors_encoding( index_encoding, letter_to_vector_df) assert one_hot.shape == (2, 4, 3) assert_equal( one_hot[0], [ [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], ]) assert_equal( one_hot[1], [ [1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], ]) def test_index_encoding_no_downcast_futurewarning(): with warnings.catch_warnings(): warnings.simplefilter("error", FutureWarning) index_encoding = amino_acid.index_encoding( ["AAAA", "ABCA"], letter_to_index_dict) assert index_encoding.dtype.kind in ("i", "u") ================================================ FILE: test/test_api_compat_shims.py ================================================ import inspect import pytest from mhcflurry.class1_neural_network import Class1NeuralNetwork from mhcflurry.common import configure_tensorflow from mhcflurry.custom_loss import MSEWithInequalities, get_loss from mhcflurry.data_dependent_weights_initialization import get_activations from mhcflurry.local_parallelism import worker_init def test_legacy_configure_tensorflow_entry_point(): with pytest.warns(FutureWarning, match="configure_tensorflow"): configure_tensorflow(backend="tensorflow", gpu_device_nums=None, num_threads=1) def test_legacy_worker_init_signature_kept(): params = inspect.signature(worker_init).parameters assert "keras_backend" in params def test_worker_init_preserves_empty_gpu_assignment(monkeypatch): calls = [] def fake_configure_pytorch(**kwargs): calls.append(kwargs) monkeypatch.setattr( "mhcflurry.local_parallelism.configure_pytorch", fake_configure_pytorch, ) worker_init(backend="auto", gpu_device_nums=[]) assert calls == [{"backend": "auto", "gpu_device_nums": []}] def test_legacy_cache_key_alias(): network_json = ( '{"dense_layer_l1_regularization": 0.1, ' '"dense_layer_l2_regularization": 0.2, "layer_sizes": [8]}' ) assert ( Class1NeuralNetwork.keras_network_cache_key(network_json) == Class1NeuralNetwork.model_cache_key(network_json) ) def test_legacy_get_keras_loss_accessor(): standard = get_loss("mse") assert standard.get_keras_loss() == standard.loss custom = MSEWithInequalities() assert callable(custom.get_keras_loss()) def test_legacy_get_activations_symbol_kept(): params = inspect.signature(get_activations).parameters assert tuple(params) == ("model", "layer", "X_batch") ================================================ FILE: test/test_calibrate_percentile_ranks_command.py ================================================ """ Tests for calibrate percentile ranks command """ import os import shutil import tempfile import subprocess import pytest import sys from mhcflurry import Class1AffinityPredictor from mhcflurry.downloads import get_path from .pytest_helpers import mhcflurry_cli os.environ["CUDA_VISIBLE_DEVICES"] = "" os.environ["MHCFLURRY_CLUSTER_WORKER_COMMAND"] = ( f"{sys.executable} -m mhcflurry.cluster_worker_entry_point" ) from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() def run_and_check(n_jobs=0, delete=True, additional_args=[]): source_models_dir = get_path("models_class1_pan", "models.combined") dest_models_dir = tempfile.mkdtemp(prefix="mhcflurry-test-models") # Save a new predictor that has no percent rank calibration data. original_predictor = Class1AffinityPredictor.load(source_models_dir) print("Loaded predictor", source_models_dir) new_predictor = Class1AffinityPredictor( class1_pan_allele_models=original_predictor.class1_pan_allele_models, allele_to_sequence=original_predictor.allele_to_sequence, ) new_predictor.save(dest_models_dir) print("Saved predictor to", dest_models_dir) new_predictor = Class1AffinityPredictor.load(dest_models_dir) assert len(new_predictor.allele_to_percent_rank_transform) == 0 args = mhcflurry_cli("mhcflurry-calibrate-percentile-ranks") + [ "--models-dir", dest_models_dir, "--match-amino-acid-distribution-data", get_path( "data_curated", "curated_training_data.affinity.csv.bz2"), "--motif-summary", "--num-peptides-per-length", "1000", "--allele", "HLA-A*02:01", "HLA-B*07:02", "--verbosity", "1", "--num-jobs", str(n_jobs), ] + additional_args print("Running with args: %s" % args) subprocess.check_call(args) new_predictor = Class1AffinityPredictor.load(dest_models_dir) assert len(new_predictor.allele_to_percent_rank_transform) == 2 if delete: print("Deleting: %s" % dest_models_dir) shutil.rmtree(dest_models_dir) else: print("Not deleting: %s" % dest_models_dir) def test_run_serial(): run_and_check(n_jobs=0) def test_run_parallel(): run_and_check(n_jobs=2) def test_run_cluster_parallelism(delete=True): run_and_check(n_jobs=0, additional_args=[ '--cluster-parallelism', '--cluster-results-workdir', '/tmp/', '--cluster-max-retries', '0', ], delete=delete) if __name__ == "__main__": # run_and_check(n_jobs=0, delete=False) # run_and_check(n_jobs=2, delete=False) test_run_cluster_parallelism(delete=False) ================================================ FILE: test/test_changing_allele_representations.py ================================================ import pandas import pytest from mhcflurry.class1_affinity_predictor import Class1AffinityPredictor from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() ALLELE_TO_SEQUENCE = pandas.read_csv( get_path( "allele_sequences", "allele_sequences.csv"), index_col=0).sequence.to_dict() HYPERPARAMETERS = { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [4], 'learning_rate': None, 'locally_connected_layers': [], 'loss': 'custom:mse_with_inequalities', 'max_epochs': 40, 'minibatch_size': 128, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', 'patience': 2, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'peptide_encoding': { 'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, 'vector_encoding_name': 'BLOSUM62', }, 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 20000.0, 'random_negative_constant': 0, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 0.0, 'train_data': {}, 'validation_split': 0.1, } def test_changing_allele_representations(): allele1 = "HLA-A*02:01" allele2 = "HLA-C*03:04" allele3 = "HLA-B*07:02" peptide = "SIINFEKL" allele_to_sequence = {} for allele in [allele1, allele2]: allele_to_sequence[allele] = ALLELE_TO_SEQUENCE[allele] data1 = [] for i in range(5000): data1.append((allele1, peptide, 0, "=")) data1.append((allele2, peptide, 50000, "=")) data1 = pandas.DataFrame( data1, columns=["allele", "peptide", "affinity", "inequality"]) predictor = Class1AffinityPredictor(allele_to_sequence=allele_to_sequence) predictor.fit_class1_pan_allele_models( n_models=1, architecture_hyperparameters=HYPERPARAMETERS, alleles=data1.allele.values, peptides=data1.peptide.values, affinities=data1.affinity.values, inequalities=data1.inequality.values) (value1, value2) = predictor.predict([peptide, peptide], alleles=[allele1, allele2]) assert value1 < 100, value1 assert value2 > 4000, value2 allele_to_sequence[allele3] = ALLELE_TO_SEQUENCE[allele3] predictor.allele_to_sequence = allele_to_sequence predictor.clear_cache() (value1, value2, value3) = predictor.predict( [peptide, peptide, peptide], alleles=[allele1, allele2, allele3]) assert value1 < 100, value1 assert value2 > 4000, value2 ================================================ FILE: test/test_class1_affinity_predictor.py ================================================ """Tests for Class1AffinityPredictor.""" import pytest import tempfile import shutil import logging import warnings import traceback import sys import numpy import pandas from mhcflurry import Class1AffinityPredictor from numpy import testing from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup DOWNLOADED_PREDICTOR = None @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" global DOWNLOADED_PREDICTOR startup() try: DOWNLOADED_PREDICTOR = Class1AffinityPredictor.load() except Exception: DOWNLOADED_PREDICTOR = None logging.basicConfig(level=logging.DEBUG) yield DOWNLOADED_PREDICTOR = None cleanup() # To hunt down a weird warning we were seeing in pandas. def warn_with_traceback(message, category, filename, lineno, file=None, line=None): log = file if hasattr(file, "write") else sys.stderr traceback.print_stack(file=log) log.write(warnings.formatwarning(message, category, filename, lineno, line)) warnings.showwarning = warn_with_traceback def predict_and_check( allele, peptide, predictor=DOWNLOADED_PREDICTOR, expected_range=(0, 500) ): def debug(): print( "\n%s" % ( predictor.predict_to_dataframe( peptides=[peptide], allele=allele, include_individual_model_predictions=True, ) ) ) (prediction,) = predictor.predict(allele=allele, peptides=[peptide]) assert prediction >= expected_range[0], (predictor, prediction, debug()) assert prediction <= expected_range[1], (predictor, prediction, debug()) def test_a1_known_epitopes_in_newly_trained_model(): allele = "HLA-A*01:01" df = pandas.read_csv( get_path("data_curated", "curated_training_data.affinity.csv.bz2") ) df = df.loc[ (df.allele == allele) & (df.peptide.str.len() >= 8) & (df.peptide.str.len() <= 15) ] hyperparameters = { "max_epochs": 100, "patience": 10, "early_stopping": True, "validation_split": 0.2, "random_negative_rate": 0.0, "random_negative_constant": 25, "peptide_amino_acid_encoding": "BLOSUM62", "use_embedding": False, "kmer_size": 15, "batch_normalization": False, "locally_connected_layers": [ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], "activation": "relu", "output_activation": "sigmoid", "layer_sizes": [32], "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "dense_layer_l1_regularization": 0.001, "dropout_probability": 0.0, } predictor = Class1AffinityPredictor() predictor.fit_allele_specific_predictors( n_models=2, architecture_hyperparameters_list=[hyperparameters], allele=allele, peptides=df.peptide.values, affinities=df.measurement_value.values, verbose=0, ) predict_and_check("HLA-A*01:01", "EVDPIGHLY", predictor=predictor) models_dir = tempfile.mkdtemp("_models") print(models_dir) predictor.save(models_dir) predictor2 = Class1AffinityPredictor.load(models_dir) predict_and_check("HLA-A*01:01", "EVDPIGHLY", predictor=predictor2) shutil.rmtree(models_dir) predictor3 = Class1AffinityPredictor( allele_to_allele_specific_models={ allele: [predictor.allele_to_allele_specific_models[allele][0]] } ) predict_and_check("HLA-A*01:01", "EVDPIGHLY", predictor=predictor3) models_dir = tempfile.mkdtemp("_models") print(models_dir) predictor3.save(models_dir) predictor4 = Class1AffinityPredictor.load(models_dir) predict_and_check("HLA-A*01:01", "EVDPIGHLY", predictor=predictor4) shutil.rmtree(models_dir) def test_class1_affinity_predictor_a0205_memorize_training_data(): # Memorize the dataset. hyperparameters = dict( activation="tanh", layer_sizes=[64], max_epochs=100, early_stopping=False, validation_split=0.0, locally_connected_layers=[], dense_layer_l1_regularization=0.0, dropout_probability=0.0, ) allele = "HLA-A*02:05" df = pandas.read_csv( get_path("data_curated", "curated_training_data.affinity.csv.bz2") ) df = df.loc[df.allele == allele] df = df.loc[df.peptide.str.len() == 9] df = df.loc[df.measurement_type == "quantitative"] df = df.loc[df.measurement_source == "kim2014"] predictor = Class1AffinityPredictor() predictor.fit_allele_specific_predictors( n_models=2, architecture_hyperparameters_list=[hyperparameters], allele=allele, peptides=df.peptide.values, affinities=df.measurement_value.values, verbose=0, ) predictor.calibrate_percentile_ranks(num_peptides_per_length=1000) ic50_pred = predictor.predict(df.peptide.values, allele=allele) ic50_true = df.measurement_value.values assert len(ic50_pred) == len(ic50_true) testing.assert_allclose( numpy.log(ic50_pred), numpy.log(ic50_true), rtol=0.2, atol=0.2 ) ic50_pred_df = predictor.predict_to_dataframe(df.peptide.values, allele=allele) print(ic50_pred_df) assert "prediction_percentile" in ic50_pred_df.columns assert ic50_pred_df.prediction_percentile.isnull().sum() == 0 ic50_pred_df2 = predictor.predict_to_dataframe( df.peptide.values, allele=allele, include_individual_model_predictions=True ) print(ic50_pred_df2) # Test an unknown allele print("Starting unknown allele check") assert predictor.supported_alleles == [allele] ic50_pred = predictor.predict(df.peptide.values, allele="HLA-A*02:01", throw=False) assert numpy.isnan(ic50_pred).all() testing.assert_raises( ValueError, predictor.predict, df.peptide.values, allele="HLA-A*02:01" ) assert predictor.supported_alleles == [allele] testing.assert_raises(ValueError, predictor.predict, ["AAAAA"], allele=allele) # too short testing.assert_raises( ValueError, predictor.predict, ["AAAAAAAAAAAAAAAAAAAA"], # too long allele=allele, ) ic50_pred = predictor.predict( ["AAAAA", "AAAAAAAAA", "AAAAAAAAAAAAAAAAAAAA"], allele=allele, throw=False ) assert numpy.isnan(ic50_pred[0]) assert not numpy.isnan(ic50_pred[1]) assert numpy.isnan(ic50_pred[2]) def test_no_nans(): df = DOWNLOADED_PREDICTOR.predict_to_dataframe( alleles=["A02:01", "A02:02"], peptides=["SIINFEKL", "SIINFEKLL"] ) print(df) assert not df.isnull().any().any() def test_predict_implementations_equivalent(): for allele in ["HLA-A02:01", "A02:02"]: for centrality_measure in ["mean", "robust_mean"]: peptides = ["SIINFEKL", "SYYNFIIIKL", "SIINKFELQY"] pred1 = DOWNLOADED_PREDICTOR.predict( allele=allele, peptides=peptides + ["SSSN"], throw=False, centrality_measure=centrality_measure, ) pred2 = DOWNLOADED_PREDICTOR.predict_to_dataframe( allele=allele, peptides=peptides + ["SSSN"], throw=False, centrality_measure=centrality_measure, ).prediction.values testing.assert_almost_equal(pred1, pred2, decimal=2) pred1 = DOWNLOADED_PREDICTOR.predict( allele=allele, peptides=peptides, centrality_measure=centrality_measure ) pred2 = DOWNLOADED_PREDICTOR.predict_to_dataframe( allele=allele, peptides=peptides, centrality_measure=centrality_measure ).prediction.values testing.assert_almost_equal(pred1, pred2, decimal=2) def test_no_runtime_warnings_for_unsupported_rows(): with warnings.catch_warnings(): warnings.simplefilter("error", RuntimeWarning) df = DOWNLOADED_PREDICTOR.predict_to_dataframe( allele="HLA-A*02:01", peptides=["SIINFEKL", "SSSN"], throw=False, include_confidence_intervals=True, centrality_measure="mean", ) df2 = DOWNLOADED_PREDICTOR.predict_to_dataframe( allele="HLA-A*02:01", peptides=["SSSN"], throw=False, include_confidence_intervals=True, centrality_measure="robust_mean", ) assert not numpy.isnan(df.loc[df.peptide == "SIINFEKL", "prediction"].iloc[0]) assert numpy.isnan(df.loc[df.peptide == "SSSN", "prediction"].iloc[0]) assert numpy.isnan(df2["prediction"].iloc[0]) ================================================ FILE: test/test_class1_neural_network.py ================================================ """ Tests for Class1NeuralNetwork. """ import pytest import numpy from numpy import testing import pandas from mhcflurry.class1_neural_network import Class1NeuralNetwork from mhcflurry.downloads import get_path from mhcflurry.common import random_peptides from mhcflurry.testing_utils import cleanup, startup @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" startup() yield cleanup() @pytest.mark.slow def test_class1_neural_network_a0205_training_accuracy(): """Test that the network can memorize a small dataset.""" # Memorize the dataset. hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=500, early_stopping=False, validation_split=0.0, locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], dense_layer_l1_regularization=0.0, dropout_probability=0.0, ) # First test a Class1NeuralNetwork, then a Class1AffinityPredictor. allele = "HLA-A*02:05" df = pandas.read_csv( get_path("data_curated", "curated_training_data.affinity.csv.bz2") ) df = df.loc[df.allele == allele] df = df.loc[df.peptide.str.len() == 9] df = df.loc[df.measurement_type == "quantitative"] df = df.loc[df.measurement_source == "kim2014"] predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(df.peptide.values, df.measurement_value.values) ic50_pred = predictor.predict(df.peptide.values) ic50_true = df.measurement_value.values assert len(ic50_pred) == len(ic50_true) testing.assert_allclose( numpy.log(ic50_pred), numpy.log(ic50_true), rtol=0.2, atol=0.2 ) # Test that a second predictor has the same architecture json. # This is important for an optimization we use to re-use predictors of the # same architecture at prediction time. hyperparameters2 = dict( activation="tanh", layer_sizes=[16], max_epochs=1, early_stopping=False, validation_split=0.0, locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], dense_layer_l1_regularization=0.0, dropout_probability=0.0, ) predictor2 = Class1NeuralNetwork(**hyperparameters2) predictor2.fit(df.peptide.values, df.measurement_value.values, verbose=0) assert predictor.network().to_json() == predictor2.network().to_json() def test_inequalities(): """Test that inequality constraints are properly handled.""" # Memorize the dataset. hyperparameters = dict( peptide_amino_acid_encoding="one-hot", activation="tanh", layer_sizes=[4], max_epochs=200, minibatch_size=32, random_negative_rate=0.0, random_negative_constant=0, early_stopping=False, validation_split=0.0, locally_connected_layers=[], dense_layer_l1_regularization=0.0, dropout_probability=0.0, loss="custom:mse_with_inequalities_and_multiple_outputs", ) dfs = [] # Weak binders df = pandas.DataFrame() df["peptide"] = random_peptides(500, length=9) df["value"] = 400.0 df["inequality1"] = "=" df["inequality2"] = "<" dfs.append(df) # Strong binders - same peptides as above but more measurement values df = pandas.DataFrame() df["peptide"] = dfs[-1].peptide.values df["value"] = 1.0 df["inequality1"] = "=" df["inequality2"] = "=" dfs.append(df) # Non-binders df = pandas.DataFrame() df["peptide"] = random_peptides(500, length=10) df["value"] = 1000 df["inequality1"] = ">" df["inequality2"] = ">" dfs.append(df) df = pandas.concat(dfs, ignore_index=True) fit_kwargs = {"verbose": 0} predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit( df.peptide.values, df.value.values, inequalities=df.inequality1.values, **fit_kwargs ) df["prediction1"] = predictor.predict(df.peptide.values) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit( df.peptide.values, df.value.values, inequalities=df.inequality2.values, **fit_kwargs ) df["prediction2"] = predictor.predict(df.peptide.values) # Binders should be stronger for pred in ["prediction1", "prediction2"]: assert df.loc[df.value < 1000, pred].mean() < 500 assert df.loc[df.value >= 1000, pred].mean() > 500 # For the binders, the (=) on the weak-binding measurement (100) in # inequality1 should make the prediction weaker, whereas for inequality2 # this measurement is a "<" so it should allow the strong-binder measurement # to dominate. numpy.testing.assert_array_less(5.0, df.loc[df.value == 1].prediction1.values) numpy.testing.assert_array_less(df.loc[df.value == 1].prediction2.values, 2.0) numpy.testing.assert_allclose(df.loc[df.value == 1].prediction2.values, 1.0, atol=0.5) print(df.groupby("value")[["prediction1", "prediction2"]].mean()) def test_basic_training(): """Test basic network training with synthetic data.""" hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=50, early_stopping=False, validation_split=0.0, locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], dense_layer_l1_regularization=0.0, dropout_probability=0.0, ) # Generate synthetic data peptides = random_peptides(100, length=9) affinities = numpy.random.uniform(10, 50000, 100) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) predictions = predictor.predict(peptides) assert len(predictions) == len(peptides) assert predictions.min() > 0 assert predictions.max() < 100000 def test_serialization(): """Test that network weights can be serialized and deserialized.""" hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=10, early_stopping=False, validation_split=0.0, locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3} ], ) peptides = random_peptides(50, length=9) affinities = numpy.random.uniform(10, 50000, 50) # Train a network predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) # Get predictions before serialization preds_before = predictor.predict(peptides) # Serialize and deserialize config = predictor.get_config() weights = predictor.get_weights() predictor2 = Class1NeuralNetwork.from_config(config, weights=weights) preds_after = predictor2.predict(peptides) # Predictions should be identical numpy.testing.assert_allclose(preds_before, preds_after, rtol=1e-5) def test_different_peptide_lengths(): """Test that the network handles different peptide lengths correctly.""" hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=20, validation_split=0.0, ) # Mix of different length peptides peptides = ( random_peptides(30, length=8) + random_peptides(30, length=9) + random_peptides(30, length=10) + random_peptides(10, length=11) ) affinities = numpy.random.uniform(10, 50000, 100) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) predictions = predictor.predict(peptides) assert len(predictions) == len(peptides) def test_early_stopping(): """Test that early stopping works correctly.""" hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=1000, early_stopping=True, patience=5, validation_split=0.2, ) peptides = random_peptides(200, length=9) affinities = numpy.random.uniform(10, 50000, 200) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) # Should stop well before 1000 epochs # (We can't easily check this without modifying the class to expose the final epoch) predictions = predictor.predict(peptides) assert len(predictions) == len(peptides) def test_batch_normalization(): """Test training with batch normalization.""" hyperparameters = dict( activation="relu", layer_sizes=[16], max_epochs=20, validation_split=0.0, batch_normalization=True, ) peptides = random_peptides(100, length=9) affinities = numpy.random.uniform(10, 50000, 100) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) predictions = predictor.predict(peptides) assert len(predictions) == len(peptides) def test_dropout(): """Test training with dropout.""" hyperparameters = dict( activation="relu", layer_sizes=[32, 16], max_epochs=20, validation_split=0.0, dropout_probability=0.5, ) peptides = random_peptides(100, length=9) affinities = numpy.random.uniform(10, 50000, 100) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit(peptides, affinities, verbose=0) predictions = predictor.predict(peptides) assert len(predictions) == len(peptides) def test_multiple_outputs(): """Test network with multiple outputs.""" hyperparameters = dict( activation="tanh", layer_sizes=[16], max_epochs=50, validation_split=0.0, num_outputs=2, loss="custom:mse_with_inequalities_and_multiple_outputs", locally_connected_layers=[], ) peptides = random_peptides(100, length=9) affinities = numpy.random.uniform(0.0, 1.0, 100) output_indices = numpy.random.choice([0, 1], 100) predictor = Class1NeuralNetwork(**hyperparameters) predictor.fit( peptides, affinities, output_indices=output_indices, verbose=0 ) # Predict for each output predictions0 = predictor.predict(peptides, output_index=0) predictions1 = predictor.predict(peptides, output_index=1) assert len(predictions0) == len(peptides) assert len(predictions1) == len(peptides) ================================================ FILE: test/test_class1_pan.py ================================================ """ Tests for training and predicting using Class1 pan-allele models. """ from sklearn.metrics import roc_auc_score import pandas import pytest from numpy.testing import assert_ from mhcflurry import Class1NeuralNetwork from mhcflurry.allele_encoding import AlleleEncoding from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() HYPERPARAMETERS = { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [64], 'learning_rate': None, 'locally_connected_layers': [], 'loss': 'custom:mse_with_inequalities', 'max_epochs': 5000, 'minibatch_size': 256, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', 'patience': 5, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'peptide_encoding': { 'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, 'vector_encoding_name': 'BLOSUM62', }, 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 20000.0, 'random_negative_constant': 25, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 0.2, 'random_negative_method': 'by_allele', 'train_data': {}, 'validation_split': 0.1, } ALLELE_TO_SEQUENCE = pandas.read_csv( get_path( "allele_sequences", "allele_sequences.csv"), index_col=0).sequence.to_dict() TRAIN_DF = pandas.read_csv( get_path( "data_curated", "curated_training_data.affinity.csv.bz2")) TRAIN_DF = TRAIN_DF.loc[TRAIN_DF.allele.isin(ALLELE_TO_SEQUENCE)] TRAIN_DF = TRAIN_DF.loc[TRAIN_DF.peptide.str.len() >= 8] TRAIN_DF = TRAIN_DF.loc[TRAIN_DF.peptide.str.len() <= 15] TRAIN_DF = TRAIN_DF.loc[ TRAIN_DF.allele.isin(TRAIN_DF.allele.value_counts().iloc[:3].index) ] MS_HITS_DF = pandas.read_csv( get_path( "data_curated", "curated_training_data.csv.bz2")) MS_HITS_DF = MS_HITS_DF.loc[MS_HITS_DF.allele.isin(TRAIN_DF.allele.unique())] MS_HITS_DF = MS_HITS_DF.loc[MS_HITS_DF.peptide.str.len() >= 8] MS_HITS_DF = MS_HITS_DF.loc[MS_HITS_DF.peptide.str.len() <= 15] MS_HITS_DF = MS_HITS_DF.loc[~MS_HITS_DF.peptide.isin(TRAIN_DF.peptide)] print("Loaded %d training and %d ms hits" % ( len(TRAIN_DF), len(MS_HITS_DF))) def test_train_simple(): # Reset random seeds to ensure reproducibility regardless of test order import numpy import random import torch numpy.random.seed(1) random.seed(1) torch.manual_seed(1) network = Class1NeuralNetwork(**HYPERPARAMETERS) allele_encoding = AlleleEncoding( TRAIN_DF.allele.values, allele_to_sequence=ALLELE_TO_SEQUENCE) network.fit( TRAIN_DF.peptide.values, affinities=TRAIN_DF.measurement_value.values, allele_encoding=allele_encoding, inequalities=TRAIN_DF.measurement_inequality.values) validation_df = MS_HITS_DF.copy() validation_df["hit"] = 1 decoys_df = MS_HITS_DF.copy() decoys_df["hit"] = 0 decoys_df["allele"] = decoys_df.allele.sample(frac=1.0).values validation_df = pandas.concat([validation_df, decoys_df], ignore_index=True) predictions = network.predict( peptides=validation_df.peptide.values, allele_encoding=AlleleEncoding( validation_df.allele.values, borrow_from=allele_encoding)) print(pandas.Series(predictions).describe()) score = roc_auc_score(validation_df.hit, -1 * predictions) print("AUC", score) assert_(score > 0.6) ================================================ FILE: test/test_class1_presentation_predictor.py ================================================ import pandas import tempfile import pickle import numpy import pytest from sklearn.metrics import roc_auc_score from mhcflurry import Class1AffinityPredictor, Class1ProcessingPredictor from mhcflurry.class1_presentation_predictor import Class1PresentationPredictor from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup import mhcflurry.class1_presentation_predictor from . import data_path mhcflurry.class1_presentation_predictor.PREDICT_CHUNK_SIZE = 15 def setup_module(): global AFFINITY_PREDICTOR global CLEAVAGE_PREDICTOR global CLEAVAGE_PREDICTOR_NO_FLANKING global PRESENTATION_PREDICTOR startup() AFFINITY_PREDICTOR = Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined"), optimization_level=0, max_models=1) CLEAVAGE_PREDICTOR = Class1ProcessingPredictor.load( get_path("models_class1_processing", "models.selected.with_flanks"), max_models=1) CLEAVAGE_PREDICTOR_NO_FLANKING = Class1ProcessingPredictor.load( get_path("models_class1_processing", "models.selected.no_flank"), max_models=1) PRESENTATION_PREDICTOR = Class1PresentationPredictor.load() def teardown_module(): global AFFINITY_PREDICTOR global CLEAVAGE_PREDICTOR global CLEAVAGE_PREDICTOR_NO_FLANKING global PRESENTATION_PREDICTOR AFFINITY_PREDICTOR = None CLEAVAGE_PREDICTOR = None CLEAVAGE_PREDICTOR_NO_FLANKING = None PRESENTATION_PREDICTOR = None cleanup() @pytest.fixture(scope="module") def predictors(): return { "affinity_predictor": AFFINITY_PREDICTOR, "cleavage_predictor": CLEAVAGE_PREDICTOR, "cleavage_predictor_no_flanking": CLEAVAGE_PREDICTOR_NO_FLANKING, "presentation_predictor": PRESENTATION_PREDICTOR, } def test_basic(predictors): df = pandas.read_csv(data_path("multiallelic.benchmark.small.csv.bz2")) train_df = df.loc[ df.sample_id.isin(sorted(df.sample_id.unique())[:3]) ] test_df = df.loc[ ~df.sample_id.isin(train_df.sample_id.unique()) ] test_df = test_df.sample(frac=0.01, weights=test_df.hit + 0.01) experiment_to_alleles = ( df.drop_duplicates("sample_id").set_index("sample_id").hla.str.split().to_dict()) predictor = Class1PresentationPredictor( affinity_predictor=predictors["affinity_predictor"], processing_predictor_without_flanks=predictors['cleavage_predictor_no_flanking'], processing_predictor_with_flanks=predictors['cleavage_predictor']) predictor.fit( targets=train_df.hit.values, peptides=train_df.peptide.values, sample_names=train_df.sample_id.values, alleles=experiment_to_alleles, n_flanks=train_df.n_flank.values, c_flanks=train_df.c_flank.values, verbose=2) # Calibrate with fake data. predictor.calibrate_percentile_ranks(numpy.random.rand(100)**2) def add_prediction_cols(test_df, predictor): prediction1_df = predictor.predict( peptides=test_df.peptide.values, sample_names=test_df.sample_id.values, alleles=experiment_to_alleles, n_flanks=test_df.n_flank.values, c_flanks=test_df.c_flank.values, verbose=2) print(prediction1_df) prediction2_df = predictor.predict( peptides=test_df.peptide.values, sample_names=test_df.sample_id.values, alleles=experiment_to_alleles, verbose=2) print(prediction2_df) test_df["prediction1"] = prediction1_df.presentation_score.values test_df["prediction2"] = prediction2_df.presentation_score.values test_df["prediction1_percentile"] = prediction1_df.presentation_percentile.values test_df["prediction2_percentile"] = prediction2_df.presentation_percentile.values test_df["processing_score1"] = prediction1_df.processing_score.values test_df["processing_score2"] = prediction2_df.processing_score.values test_df["affinity1"] = prediction1_df.affinity.values test_df["affinity2"] = prediction2_df.affinity.values add_prediction_cols(test_df, predictor) score1 = roc_auc_score(test_df.hit.values, test_df.prediction1.values) score2 = roc_auc_score(test_df.hit.values, test_df.prediction2.values) print("AUC", score1, score2) assert score1 > 0.8 assert score2 > 0.8 score1 = roc_auc_score( test_df.hit.values, -test_df.prediction1_percentile.values) score2 = roc_auc_score( test_df.hit.values, -test_df.prediction2_percentile.values) print("AUC (using percentiles)", score1, score2) assert score1 > 0.8 assert score2 > 0.8 # Test saving, loading, pickling models_dir = tempfile.mkdtemp("_models") print(models_dir) predictor.save(models_dir) predictor2 = Class1PresentationPredictor.load(models_dir) predictor3 = pickle.loads( pickle.dumps(predictor, protocol=pickle.HIGHEST_PROTOCOL)) predictor4 = pickle.loads( pickle.dumps(predictor2, protocol=pickle.HIGHEST_PROTOCOL)) for (i, other_predictor) in enumerate([predictor2, predictor3, predictor4]): print("Testing identity", i + 1) other_test_df = test_df.copy() del other_test_df["prediction1"] del other_test_df["prediction2"] add_prediction_cols(other_test_df, other_predictor) numpy.testing.assert_array_almost_equal( test_df["prediction1"], other_test_df["prediction1"], decimal=6) numpy.testing.assert_array_almost_equal( test_df["prediction2"], other_test_df["prediction2"], decimal=6) def test_downloaded_predictor_small(predictors): presentation_predictor = predictors['presentation_predictor'] # Test sequence scanning scan_results = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFN", "QPYVFIKRS", "AGGHSYGAD", ], alleles={ "HLA-A*02:01": ["HLA-A*02:01"], "HLA-C*02:01": ["HLA-C*02:01"], }, peptide_lengths=[9], result="best") print(scan_results) assert len(scan_results) == 6 scan_results = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFN", "QPYVFIKRS", "AGGHSYGAD", ], alleles={ "HLA-A*02:01": ["HLA-A*02:01"], "HLA-C*02:01": ["HLA-C*02:01"], }, peptide_lengths=[8, 9], result="best") print(scan_results) assert len(scan_results) == 6 scan_results = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFN", "QPYVFIKRS", "AGGHSYGAD", ], alleles={ "HLA-A*02:01": ["HLA-A*02:01"], "HLA-C*02:01": ["HLA-C*02:01"], }, peptide_lengths=[9], result="all") print(scan_results) assert len(scan_results) == 6 scan_results = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFN", "QPYVFIKRS", "AGGHSYGAD", ], alleles={ "HLA-A*02:01": ["HLA-A*02:01"], "HLA-C*02:01": ["HLA-C*02:01"], }, peptide_lengths=[8, 9], result="all") print(scan_results) assert len(scan_results) == 18 scan_results = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFN", "QPYVFIKRS", "AGGHSYGAD", ], alleles={ "HLA-A*02:01": ["HLA-A*02:01"], "HLA-C*02:01": ["HLA-C*02:01"], }, peptide_lengths=[10], result="all") print(scan_results) assert len(scan_results) == 0 def test_downloaded_predictor(predictors): presentation_predictor = predictors['presentation_predictor'] # Test sequence scanning scan_results1 = presentation_predictor.predict_sequences( sequences=[ "MESLVPGFNEKTHVQLSLPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLPQLE", "QPYVFIKRSDARTAPHGHVMVELVAELEGIQYGRSGETLGVLVPHVGEIPVAYRKVLLRKNGNKG", "AGGHSYGADLKSFDLGDELGTDPYEDFQENWNTKHSSGVTRELMRELNGGAYTRYVDNNFCGPDG", ], alleles=[ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ]) print(scan_results1) assert len(scan_results1) == 3, str(scan_results1) assert (scan_results1.affinity < 200).all(), str(scan_results1) assert (scan_results1.presentation_score > 0.7).all(), str(scan_results1) scan_results2 = presentation_predictor.predict_sequences( result="filtered", filter_value=500, comparison_quantity="affinity", sequences={ "seq1": "MESLVPGFNEKTHVQLSLPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLPQLE", "seq2": "QPYVFIKRSDARTAPHGHVMVELVAELEGIQYGRSGETLGVLVPHVGEIPVAYRKVLLRKNGNKG", "seq3": "AGGHSYGADLKSFDLGDELGTDPYEDFQENWNTKHSSGVTRELMRELNGGAYTRYVDNNFCGPDG", }, alleles=[ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ]) print(scan_results2) assert len(scan_results2) > 10 assert (scan_results2.affinity <= 500).all() scan_results3 = presentation_predictor.predict_sequences( result="filtered", filter_value=0.9, comparison_quantity="presentation_score", sequences={ "seq1": "MESLVPGFNEKTHVQLSLPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLPQLE", "seq2": "QPYVFIKRSDARTAPHGHVMVELVAELEGIQYGRSGETLGVLVPHVGEIPVAYRKVLLRKNGNKG", "seq3": "AGGHSYGADLKSFDLGDELGTDPYEDFQENWNTKHSSGVTRELMRELNGGAYTRYVDNNFCGPDG", }, alleles=[ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ]) print(scan_results3) assert len(scan_results3) >= 5, len(scan_results3) assert (scan_results3.presentation_score >= 0.9).all() scan_results4 = presentation_predictor.predict_sequences( result="all", comparison_quantity="affinity", sequences={ "seq1": "MESLVPGFNEKTHVQLSLPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLPQLE", "seq2": "QPYVFIKRSDARTAPHGHVMVELVAELEGIQYGRSGETLGVLVPHVGEIPVAYRKVLLRKNGNKG", "seq3": "AGGHSYGADLKSFDLGDELGTDPYEDFQENWNTKHSSGVTRELMRELNGGAYTRYVDNNFCGPDG", }, alleles=[ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ]) print(scan_results4) assert len(scan_results4) > 200, len(scan_results4) assert scan_results4.iloc[0].affinity < 100 sequences = { "seq1": "MESLVPGFNEKTHVQLSLPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLPQLE", "seq2": "QPYVFIKRSDARTAPHGHVMVELVAELEGIQYGRSGETLGVLVPHVGEIPVAYRKVLLRKNGNKG", "seq3": "AGGHSYGADLKSFDLGDELGTDPYEDFQENWNTKHSSGVTRELMRELNGGAYTRYVDNNFCGPDG", } scan_results5 = presentation_predictor.predict_sequences( result="all", comparison_quantity="affinity", sequences=sequences, alleles={ "sample1": [ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ], "sample2": [ "HLA-A*01:01", "HLA-A*02:06", "HLA-B*07:02", "HLA-B*44:02", "HLA-C*03:01", "HLA-C*07:02", ], }) print(scan_results5) assert len(scan_results5) == len(scan_results4) * 2 # Test case-insensitive. scan_results6 = presentation_predictor.predict_sequences( result="all", comparison_quantity="affinity", sequences=dict((k, v.lower()) for (k, v) in sequences.items()), alleles={ "sample1": [ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ], "sample2": [ "HLA-A*01:01", "HLA-A*02:06", "HLA-B*07:02", "HLA-B*44:02", "HLA-C*03:01", "HLA-C*07:02", ], }) numpy.testing.assert_array_equal( scan_results6.peptide.to_numpy(), scan_results5.peptide.str.lower().to_numpy(), ) numpy.testing.assert_almost_equal( scan_results6.affinity.values, scan_results5.affinity.values) numpy.testing.assert_almost_equal( scan_results6.processing_score.values, scan_results5.processing_score.values) numpy.testing.assert_almost_equal( scan_results6.presentation_score.values, scan_results5.presentation_score.values) scan_results7 = presentation_predictor.predict_sequences( result="all", comparison_quantity="affinity", sequences={ "seq1": "LVEVEKgVLPQLE", "seq2": "MRELNGGAYTRYVDNNFCGPdg", }, alleles={ "sample1": [ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ] }) print(scan_results7) # Check that c-terminus peptide is included and with the same case as input. assert "DNNFCGPdg" in scan_results7.peptide.values, scan_results7.peptide def test_downloaded_predictor_invalid_peptides(predictors): presentation_predictor = predictors['presentation_predictor'] peptides = [ "SIINFEKL", "REALLYLNGPEPTIDESSSSS", "SIINFEKLQ", ] alleles = [ "HLA-A*02:01", "HLA-A*03:01", "HLA-B*57:01", "HLA-B*44:02", "HLA-C*02:01", "HLA-C*07:01", ] numpy.testing.assert_raises( ValueError, presentation_predictor.predict, peptides=peptides, alleles=alleles) results1 = presentation_predictor.predict( peptides=peptides, alleles=alleles, throw=False).presentation_score.values numpy.testing.assert_equal(numpy.isnan(results1), [False, True, False]) ================================================ FILE: test/test_class1_processing_neural_network.py ================================================ """ Tests for Class1ProcessingNeuralNetwork. """ import pytest import re import numpy from sklearn.metrics import roc_auc_score import pandas from mhcflurry.class1_processing_neural_network import Class1ProcessingNeuralNetwork from mhcflurry.common import random_peptides from mhcflurry.amino_acid import BLOSUM62_MATRIX from mhcflurry.flanking_encoding import FlankingEncoding from mhcflurry.testing_utils import cleanup, startup numpy.random.seed(0) @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" startup() yield cleanup() table = dict([ (tuple(encoding), amino_acid) for amino_acid, encoding in BLOSUM62_MATRIX.iterrows() ]) def decode_matrix(array): """ Convert BLOSSUM62-encoded sequences to amino acid strings. Parameters ---------- array : shape (num, length, dim) where num is number of sequences, length is the length of the sequences, and dim is the BLOSUM62 dimensions (i.e. 21). Returns ------- list of strings """ (num, length, dim) = array.shape assert dim == 21 results = [] for row in array: item = "".join([ table[tuple(x)] for x in row ]) results.append(item) return results def test_neural_network_input(): """Test that input encoding produces expected sequences.""" model = Class1ProcessingNeuralNetwork( peptide_max_length=12, n_flank_length=8, c_flank_length=5) tests = [ { # Input "peptide": "SIINFEKL", "n_flank": "QWERTYIPSDFG", "c_flank": "FGHKLCVNMQWE", # Expected results "sequence": "TYIPSDFGSIINFEKLFGHKLXXXX", }, { # Input "peptide": "QCV", "n_flank": "QWERTYIPSDFG", "c_flank": "FGHKLCVNMQWE", # Expected results "sequence": "TYIPSDFGQCVFGHKLXXXXXXXXX", }, { # Input "peptide": "QCVSQCVSQCVS", "n_flank": "QWE", "c_flank": "MNV", # Expected results "sequence": "XXXXXQWEQCVSQCVSQCVSMNVXX", }, { # Input "peptide": "QCVSQCVSQCVS", "n_flank": "", "c_flank": "MNV", # Expected results "sequence": "XXXXXXXXQCVSQCVSQCVSMNVXX", }, { # Input "peptide": "QCVSQCVSQCVS", "n_flank": "", "c_flank": "", # Expected results "sequence": "XXXXXXXXQCVSQCVSQCVSXXXXX", }, ] for (i, d) in enumerate(tests): encoding = FlankingEncoding( peptides=[d['peptide']], n_flanks=[d['n_flank']], c_flanks=[d['c_flank']]) results = model.network_input(encoding) (decoded,) = decode_matrix(results['sequence']) numpy.testing.assert_equal(decoded, d['sequence']) numpy.testing.assert_equal(results['peptide_length'], len(d['peptide'])) # Test all at once df = pandas.DataFrame(tests) encoding = FlankingEncoding(df.peptide, df.n_flank, df.c_flank) results = model.network_input(encoding) df["decoded"] = decode_matrix(results['sequence']) numpy.testing.assert_array_equal(df.decoded.to_numpy(), df.sequence.to_numpy()) numpy.testing.assert_equal( results['peptide_length'], df.peptide.str.len().values) def test_small(): """Test basic network training with small dataset.""" train_basic_network(num=10000) @pytest.mark.slow def test_more(): """Test network with different hyperparameters.""" train_basic_network( num=10000, flanking_averages=False, convolutional_kernel_size=3, c_flank_length=0, n_flank_length=3, post_convolutional_dense_layer_sizes=[8]) @pytest.mark.slow def test_basic_indexing(num=10000, do_assertions=True, **hyperparameters): """Test that basic indexing patterns are learned.""" def is_hit(n_flank, c_flank, peptide): return peptide[0] in "SIQVL" and peptide[-1] in "YIPASD" def is_hit1(n_flank, c_flank, peptide): return peptide[0] in "SIQVL" def is_hit2(n_flank, c_flank, peptide): return peptide[-1] in "YIPASD" hypers = { "convolutional_kernel_size": 1, "flanking_averages": False, } train_basic_network(num=10000, is_hit=is_hit1, **hypers) train_basic_network(num=10000, is_hit=is_hit2, **hypers) train_basic_network(num=10000, is_hit=is_hit, **hypers) def train_basic_network(num, do_assertions=True, is_hit=None, **hyperparameters): """Train a processing network and check performance.""" use_hyperparameters = { "max_epochs": 100, "peptide_max_length": 12, "n_flank_length": 8, "c_flank_length": 8, "convolutional_kernel_size": 3, "flanking_averages": False, # Use False for reliable convergence "min_delta": 0.01, } use_hyperparameters.update(hyperparameters) df = pandas.DataFrame({ "n_flank": random_peptides(int(num / 2), 10) + random_peptides(int(num / 2), 1), "c_flank": random_peptides(num, 10), "peptide": random_peptides(int(num / 2), 11) + random_peptides(int(num / 2), 8), }).sample(frac=1.0) if is_hit is None: n_cleavage_regex = "[AILQSV][SINFEKLH][MNPQYK]" def is_hit(n_flank, c_flank, peptide): if re.search(n_cleavage_regex, peptide): return False # peptide is cleaved return bool(re.match(n_cleavage_regex, n_flank[-1:] + peptide)) df["hit"] = [ is_hit(row.n_flank, row.c_flank, row.peptide) for (_, row) in df.iterrows() ] train_df = df.sample(frac=0.9).copy() test_df = df.loc[~df.index.isin(train_df.index)].copy() print( "Generated dataset", len(df), "hits: ", df.hit.sum(), "frac:", df.hit.mean()) network = Class1ProcessingNeuralNetwork(**use_hyperparameters) network.fit( sequences=FlankingEncoding( peptides=train_df.peptide.values, n_flanks=train_df.n_flank.values, c_flanks=train_df.c_flank.values), targets=train_df.hit.values, verbose=0) print(network.network()) for df_subset in [train_df, test_df]: df_subset["predictions"] = network.predict( df_subset.peptide.values, df_subset.n_flank.values, df_subset.c_flank.values) train_auc = roc_auc_score(train_df.hit.values, train_df.predictions.values) test_auc = roc_auc_score(test_df.hit.values, test_df.predictions.values) print("Train auc", train_auc) print("Test auc", test_auc) if do_assertions: assert train_auc > 0.9 assert test_auc > 0.85 return network def test_serialization(): """Test that network weights can be serialized and deserialized.""" hyperparameters = { "max_epochs": 10, "peptide_max_length": 12, "n_flank_length": 5, "c_flank_length": 5, } # Generate training data peptides = random_peptides(100, length=9) n_flanks = random_peptides(100, length=10) c_flanks = random_peptides(100, length=10) targets = numpy.random.choice([0.0, 1.0], 100) # Train a network network = Class1ProcessingNeuralNetwork(**hyperparameters) flanking = FlankingEncoding(peptides, n_flanks, c_flanks) network.fit(flanking, targets, verbose=0) # Get predictions before serialization preds_before = network.predict_encoded(flanking) # Serialize and deserialize config = network.get_config() weights = network.get_weights() network2 = Class1ProcessingNeuralNetwork.from_config(config, weights=weights) preds_after = network2.predict_encoded(flanking) # Predictions should be close (some small differences may occur due to dropout eval mode) numpy.testing.assert_allclose(preds_before, preds_after, rtol=1e-4) def test_different_peptide_lengths(): """Test that different peptide lengths are handled correctly.""" hyperparameters = { "max_epochs": 10, "peptide_max_length": 15, "n_flank_length": 5, "c_flank_length": 5, } # Mix of peptide lengths peptides = ( random_peptides(30, length=8) + random_peptides(30, length=9) + random_peptides(30, length=10) + random_peptides(10, length=11) ) n_flanks = random_peptides(100, length=10) c_flanks = random_peptides(100, length=10) targets = numpy.random.choice([0.0, 1.0], 100) network = Class1ProcessingNeuralNetwork(**hyperparameters) flanking = FlankingEncoding(peptides, n_flanks, c_flanks) network.fit(flanking, targets, verbose=0) predictions = network.predict_encoded(flanking) assert len(predictions) == len(peptides) def test_empty_flanks(): """Test that empty flanking sequences are handled correctly.""" hyperparameters = { "max_epochs": 10, "peptide_max_length": 12, "n_flank_length": 5, "c_flank_length": 5, } peptides = random_peptides(50, length=9) n_flanks = [""] * 50 c_flanks = [""] * 50 targets = numpy.random.choice([0.0, 1.0], 50) network = Class1ProcessingNeuralNetwork(**hyperparameters) flanking = FlankingEncoding(peptides, n_flanks, c_flanks) network.fit(flanking, targets, verbose=0) predictions = network.predict_encoded(flanking) assert len(predictions) == len(peptides) assert numpy.isfinite(predictions).all() def test_prediction_range(): """Test that predictions are in the expected range [0, 1].""" hyperparameters = { "max_epochs": 20, "peptide_max_length": 12, "n_flank_length": 5, "c_flank_length": 5, } peptides = random_peptides(100, length=9) n_flanks = random_peptides(100, length=10) c_flanks = random_peptides(100, length=10) targets = numpy.random.choice([0.0, 1.0], 100) network = Class1ProcessingNeuralNetwork(**hyperparameters) flanking = FlankingEncoding(peptides, n_flanks, c_flanks) network.fit(flanking, targets, verbose=0) predictions = network.predict_encoded(flanking) # Predictions should be between 0 and 1 (sigmoid output) assert predictions.min() >= 0 assert predictions.max() <= 1 ================================================ FILE: test/test_class1_processing_predictor.py ================================================ import pandas import tempfile import pickle from numpy.testing import assert_array_equal from mhcflurry.class1_processing_predictor import Class1ProcessingPredictor from mhcflurry.common import random_peptides from .test_class1_processing_neural_network import train_basic_network AFFINITY_PREDICTOR = None def setup(): pass def teardown(): pass def test_basic(): network = train_basic_network(num=10000, do_assertions=False, max_epochs=10) predictor = Class1ProcessingPredictor(models=[network]) num=10000 df = pandas.DataFrame({ "n_flank": random_peptides(num, 10), "c_flank": random_peptides(num, 10), "peptide": random_peptides(num, 9), }) df["score"] = predictor.predict(df.peptide, df.n_flank, df.c_flank) # Test predictions are deterministic df1b = predictor.predict_to_dataframe( peptides=df.peptide.values, n_flanks=df.n_flank.values, c_flanks=df.c_flank.values) assert_array_equal(df.score.values, df1b.score.values) # Test saving and loading models_dir = tempfile.mkdtemp("_models") print(models_dir) predictor.save(models_dir) predictor2 = Class1ProcessingPredictor.load(models_dir) df2 = predictor2.predict_to_dataframe( peptides=df.peptide.values, n_flanks=df.n_flank.values, c_flanks=df.c_flank.values) assert_array_equal(df.score.values, df2.score.values) # Test pickling predictor3 = pickle.loads( pickle.dumps(predictor, protocol=pickle.HIGHEST_PROTOCOL)) df3 = predictor3.predict_to_dataframe( peptides=df.peptide.values, n_flanks=df.n_flank.values, c_flanks=df.c_flank.values) assert_array_equal(df.score.values, df3.score.values) ================================================ FILE: test/test_custom_loss.py ================================================ """ Tests for custom loss functions. """ import pytest from .pytest_helpers import assert_greater, assert_almost_equal import numpy import torch from mhcflurry.custom_loss import CUSTOM_LOSSES, MultiallelicMassSpecLoss from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" startup() yield cleanup() def evaluate_loss(loss_obj, y_true, y_pred): """Evaluate a loss function with PyTorch tensors.""" y_true = torch.tensor(y_true, dtype=torch.float32) y_pred = torch.tensor(y_pred, dtype=torch.float32) if y_pred.ndim == 1: y_pred = y_pred.reshape(len(y_pred), 1) if y_true.ndim == 1: y_true = y_true.reshape(len(y_true), 1) print("y_pred, y_true:", y_pred, y_true) assert y_true.ndim == 2 assert y_pred.ndim == 2 result = loss_obj.loss(y_pred, y_true) return result.item() def test_mse_with_inequalities(loss_obj=None): """Test MSE with inequalities loss function.""" if loss_obj is None: loss_obj = CUSTOM_LOSSES['mse_with_inequalities'] y_values = [0.0, 0.5, 0.8, 1.0] adjusted_y = loss_obj.encode_y(y_values) print(adjusted_y) loss0 = evaluate_loss(loss_obj, adjusted_y, y_values) print(loss0) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, [">", ">", ">", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, y_values) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, ["<", "<", "<", "<"]) loss0 = evaluate_loss(loss_obj, adjusted_y, y_values) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, y_values) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, [0.0, 0.4, 0.8, 1.0]) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, [">", "<", ">", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, [0.1, 0.4, 0.9, 1.0]) assert abs(loss0) < 1e-6, f"Expected 0, got {loss0}" adjusted_y = loss_obj.encode_y(y_values, [">", "<", ">", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, [0.1, 0.6, 0.9, 1.0]) assert_greater(loss0, 0.0) adjusted_y = loss_obj.encode_y(y_values, ["=", "<", ">", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, [0.1, 0.6, 0.9, 1.0]) assert_almost_equal(loss0, 0.02 / 4, places=5) adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"]) loss0 = evaluate_loss(loss_obj, adjusted_y, [0.1, 0.6, 0.9, 1.0]) assert_almost_equal(loss0, 0.03 / 4, places=5) def test_mse_with_inequalities_and_multiple_outputs(): """Test MSE with inequalities and multiple outputs loss function.""" loss_obj = CUSTOM_LOSSES['mse_with_inequalities_and_multiple_outputs'] test_mse_with_inequalities(loss_obj) y_values = [0.0, 0.5, 0.8, 1.0] adjusted_y = loss_obj.encode_y( y_values, output_indices=[0, 1, 1, 1]) loss0 = evaluate_loss( loss_obj, adjusted_y, [ [0.0, 1000], [2000, 0.5], [3000, 0.8], [4000, 1.0], ]) assert_almost_equal(loss0, 0.0, places=5) y_values = [0.0, 0.5, 0.8, 1.0] adjusted_y = loss_obj.encode_y( y_values, output_indices=[0, 1, 1, 0]) loss0 = evaluate_loss( loss_obj, adjusted_y, [ [0.1, 1000], [2000, 0.6], [3000, 0.8], [1.0, 4000], ]) assert_almost_equal(loss0, 0.02 / 4, places=5) y_values = [0.0, 0.5, 0.8, 1.0] adjusted_y = loss_obj.encode_y( y_values, output_indices=[0, 1, 1, 0], inequalities=["=", ">", "<", "<"]) loss0 = evaluate_loss( loss_obj, adjusted_y, [ [0.1, 1000], [2000, 0.6], [3000, 0.8], [1.0, 4000], ]) assert_almost_equal(loss0, 0.01 / 4, places=5) y_values = [0.0, 0.5, 0.8, 1.0] adjusted_y = loss_obj.encode_y( y_values, output_indices=[0, 1, 1, 0], inequalities=["=", "<", "<", "<"]) loss0 = evaluate_loss( loss_obj, adjusted_y, [ [0.1, 1000], [2000, 0.6], [3000, 0.8], [1.0, 4000], ]) assert_almost_equal(loss0, 0.02 / 4, places=5) def test_multiallelic_mass_spec_loss(): """Test multiallelic mass spec loss function.""" for delta in [0.0, 0.3]: print("delta", delta) # Hit labels y_true = [ 1.0, 0.0, 1.0, -1.0, # ignored 1.0, 0.0, 1.0, ] y_true = numpy.array(y_true) y_pred = [ [0.3, 0.7, 0.5], [0.2, 0.4, 0.6], [0.1, 0.5, 0.3], [0.9, 0.1, 0.2], [0.1, 0.7, 0.1], [0.8, 0.2, 0.4], [0.1, 0.2, 0.4], ] y_pred = numpy.array(y_pred) # reference implementation 1 def smooth_max(x, alpha): x = numpy.array(x) alpha = numpy.array([alpha]) return (x * numpy.exp(x * alpha)).sum() / ( numpy.exp(x * alpha)).sum() contributions = [] for i in range(len(y_true)): if y_true[i] == 1.0: for j in range(len(y_true)): if y_true[j] == 0.0: tightest_i = max(y_pred[i]) for k in range(y_pred.shape[1]): contribution = max( 0, y_pred[j, k] - tightest_i + delta)**2 contributions.append(contribution) contributions = numpy.array(contributions) expected1 = contributions.sum() / len(contributions) # reference implementation 2: numpy pos = numpy.array([ max(y_pred[i]) for i in range(len(y_pred)) if y_true[i] == 1.0 ]) neg = y_pred[(y_true == 0.0).astype(bool)] term = neg.reshape((-1, 1)) - pos + delta expected2 = ( numpy.maximum(0, term)**2).sum() / ( len(pos) * neg.shape[0] * neg.shape[1]) numpy.testing.assert_almost_equal(expected1, expected2) loss_obj = MultiallelicMassSpecLoss(delta=delta) computed = evaluate_loss( loss_obj, y_true, y_pred.reshape(y_pred.shape)) numpy.testing.assert_almost_equal(computed, expected1, 4) def test_encode_y_basic(): """Test basic y encoding functionality.""" from mhcflurry.pytorch_losses import MSEWithInequalities # Test equality encoding y = [0.0, 0.5, 1.0] encoded = MSEWithInequalities.encode_y(y) numpy.testing.assert_array_equal(encoded, y) # Test greater than encoding (should add 2) encoded_gt = MSEWithInequalities.encode_y(y, [">", ">", ">"]) numpy.testing.assert_array_equal(encoded_gt, [2.0, 2.5, 3.0]) # Test less than encoding (should add 4) encoded_lt = MSEWithInequalities.encode_y(y, ["<", "<", "<"]) numpy.testing.assert_array_equal(encoded_lt, [4.0, 4.5, 5.0]) def test_loss_gradient_flow(): """Test that gradients flow correctly through the loss.""" from mhcflurry.pytorch_losses import MSEWithInequalities loss_fn = MSEWithInequalities() # Create predictions that require gradients y_pred = torch.tensor([[0.5]], requires_grad=True) y_true = torch.tensor([[0.3]]) # equality loss = loss_fn(y_pred, y_true) loss.backward() # Gradient should exist and be non-zero assert y_pred.grad is not None assert y_pred.grad.abs().item() > 0 def test_inequality_gradient_respects_constraint(): """Test that gradients respect inequality constraints.""" from mhcflurry.pytorch_losses import MSEWithInequalities loss_fn = MSEWithInequalities() # Test greater-than constraint (y_true encoded as 2 + value) # When pred > threshold, gradient should be 0 y_pred = torch.tensor([[0.7]], requires_grad=True) y_true = torch.tensor([[2.5]]) # > 0.5 loss = loss_fn(y_pred, y_true) loss.backward() # Gradient should be 0 since pred (0.7) > threshold (0.5) assert abs(y_pred.grad.item()) < 1e-6 # When pred < threshold, gradient should be non-zero y_pred2 = torch.tensor([[0.3]], requires_grad=True) y_true2 = torch.tensor([[2.5]]) # > 0.5 loss2 = loss_fn(y_pred2, y_true2) loss2.backward() # Gradient should be non-zero since pred (0.3) < threshold (0.5) assert abs(y_pred2.grad.item()) > 0 ================================================ FILE: test/test_doctest.py ================================================ """ Run doctests. """ import os import doctest import pandas import pytest import mhcflurry import mhcflurry.class1_presentation_predictor os.environ["CUDA_VISIBLE_DEVICES"] = "" from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() def test_doctests(): original_precision = pandas.get_option('display.precision') pandas.set_option('display.precision', 3) doctest.testmod(mhcflurry) doctest.testmod(mhcflurry.class1_presentation_predictor) # Disabling for now until we figure out how to deal with numerical precision # for predictions. # assert results1.failed == 0, results1.failed # assert results2.failed == 0, results2.failed pandas.set_option('display.precision', original_precision) ================================================ FILE: test/test_download_models_class1.py ================================================ import numpy import pickle import tempfile import pytest from mhcflurry import Class1AffinityPredictor, Class1NeuralNetwork from mhcflurry.testing_utils import cleanup, startup numpy.random.seed(0) SERIALIZATION_RTOL = 1e-6 DOWNLOADED_PREDICTOR = None def setup_module(): global DOWNLOADED_PREDICTOR startup() DOWNLOADED_PREDICTOR = Class1AffinityPredictor.load() def teardown_module(): global DOWNLOADED_PREDICTOR DOWNLOADED_PREDICTOR = None cleanup() @pytest.fixture(scope="module") def downloaded_predictor(): return DOWNLOADED_PREDICTOR def predict_and_check( downloaded_predictor, allele, peptide, expected_range=(0, 500)): print("\n%s" % ( downloaded_predictor.predict_to_dataframe( peptides=[peptide], allele=allele, include_individual_model_predictions=True))) (prediction,) = downloaded_predictor.predict(allele=allele, peptides=[peptide]) assert prediction >= expected_range[0], (downloaded_predictor, prediction) assert prediction <= expected_range[1], (downloaded_predictor, prediction) def test_a1_titin_epitope_downloaded_models(downloaded_predictor): # Test the A1 Titin epitope ESDPIVAQY from # Identification of a Titin-Derived HLA-A1-Presented Peptide # as a Cross-Reactive Target for Engineered MAGE A3-Directed # T Cells predict_and_check(downloaded_predictor, "HLA-A*01:01", "ESDPIVAQY") def test_a1_mage_epitope_downloaded_models(downloaded_predictor): # Test the A1 MAGE epitope EVDPIGHLY from # Identification of a Titin-Derived HLA-A1-Presented Peptide # as a Cross-Reactive Target for Engineered MAGE A3-Directed # T Cells predict_and_check(downloaded_predictor, "HLA-A*01:01", "EVDPIGHLY") def test_a2_hiv_epitope_downloaded_models(downloaded_predictor): # Test the A2 HIV epitope SLYNTVATL from # The HIV-1 HLA-A2-SLYNTVATL Is a Help-Independent CTL Epitope predict_and_check(downloaded_predictor, "HLA-A*02:01", "SLYNTVATL") def test_caching(downloaded_predictor): if not downloaded_predictor.allele_to_sequence: # Only run this test on allele-specific predictors. Class1NeuralNetwork.KERAS_MODELS_CACHE.clear() downloaded_predictor.predict( peptides=["SIINFEKL"], allele="HLA-A*02:01") num_cached = len(Class1NeuralNetwork.KERAS_MODELS_CACHE) assert num_cached > 0 def test_downloaded_predictor_is_serializable(downloaded_predictor): predictor_copy = pickle.loads(pickle.dumps(downloaded_predictor)) # Optimized pan-model round-trips can differ at float-noise level across # platforms, so require a tight numerical match rather than bitwise # equality. numpy.testing.assert_allclose( downloaded_predictor.predict( ["RSKERAVVVAW"], allele="HLA-A*01:01")[0], predictor_copy.predict( ["RSKERAVVVAW"], allele="HLA-A*01:01")[0], rtol=SERIALIZATION_RTOL, atol=0.0, ) def test_downloaded_predictor_is_savable(downloaded_predictor): models_dir = tempfile.mkdtemp("_models") print(models_dir) downloaded_predictor.save(models_dir) predictor_copy = Class1AffinityPredictor.load(models_dir) numpy.testing.assert_allclose( downloaded_predictor.predict( ["RSKERAVVVAW"], allele="HLA-A*01:01")[0], predictor_copy.predict( ["RSKERAVVVAW"], allele="HLA-A*01:01")[0], rtol=SERIALIZATION_RTOL, atol=0.0, ) def test_downloaded_predictor_gives_percentile_ranks(downloaded_predictor): predictions = downloaded_predictor.predict_to_dataframe( peptides=["SAQGQFSAV", "SAQGQFSAV"], alleles=["HLA-A*03:01", "HLA-C*01:02"]) print(predictions) assert not predictions.prediction.isnull().any() assert not predictions.prediction_percentile.isnull().any() ================================================ FILE: test/test_ensemble_centrality.py ================================================ import numpy import warnings from numpy.testing import assert_equal from mhcflurry import ensemble_centrality def test_robust_mean(): arr1 = numpy.array([ [1, 2, 3, 4, 5], [-10000, 2, 3, 4, 100], ]) results = ensemble_centrality.robust_mean(arr1) assert_equal(results, [3, 3]) # Should ignore nans. arr2 = numpy.array([ [1, 2, 3, 4, 5], [numpy.nan, 1, 2, 3, numpy.nan], [numpy.nan, numpy.nan, numpy.nan, numpy.nan, numpy.nan], ]) results = ensemble_centrality.CENTRALITY_MEASURES["robust_mean"](arr2) assert_equal(results, [3, 2, numpy.nan]) results = ensemble_centrality.CENTRALITY_MEASURES["mean"](arr2) assert_equal(results, [3, 2, numpy.nan]) def test_no_runtime_warnings_for_all_nan_rows(): arr = numpy.array([ [numpy.nan, numpy.nan, numpy.nan], [1.0, 2.0, numpy.nan], ]) with warnings.catch_warnings(): warnings.simplefilter("error", RuntimeWarning) mean = ensemble_centrality.CENTRALITY_MEASURES["mean"](arr) median = ensemble_centrality.CENTRALITY_MEASURES["median"](arr) robust = ensemble_centrality.CENTRALITY_MEASURES["robust_mean"](arr) assert numpy.isnan(mean[0]) and mean[1] == 1.5 assert numpy.isnan(median[0]) and median[1] == 1.5 assert numpy.isnan(robust[0]) and robust[1] == 1.5 ================================================ FILE: test/test_hyperparameters.py ================================================ from mhcflurry.class1_neural_network import Class1NeuralNetwork def test_all_combinations_of_hyperparameters(): combinations_dict = dict( activation=["tanh", "sigmoid"], random_negative_constant=[0, 20]) results = ( Class1NeuralNetwork .hyperparameter_defaults .models_grid(**combinations_dict)) assert len(results) == 4 if __name__ == "__main__": test_all_combinations_of_hyperparameters() ================================================ FILE: test/test_local_parallelism.py ================================================ from argparse import ArgumentParser import pytest from mhcflurry.local_parallelism import ( add_local_parallelism_args, validate_worker_pool_args, worker_init_kwargs_for_scheduler, ) def test_worker_init_kwargs_round_robin_across_gpus(): assert worker_init_kwargs_for_scheduler( num_jobs=5, num_gpus=2, backend="auto", max_workers_per_gpu=2, ) == [ {"backend": "gpu", "gpu_device_nums": [0]}, {"backend": "gpu", "gpu_device_nums": [1]}, {"backend": "gpu", "gpu_device_nums": [0]}, {"backend": "gpu", "gpu_device_nums": [1]}, {"backend": "cpu", "gpu_device_nums": []}, ] def test_worker_init_kwargs_without_gpu_scheduling_uses_backend(): assert worker_init_kwargs_for_scheduler( num_jobs=3, num_gpus=0, backend="mps", max_workers_per_gpu=2, ) == [ {"backend": "mps"}, {"backend": "mps"}, {"backend": "mps"}, ] def test_worker_init_kwargs_normalizes_default_backend_alias(): assert worker_init_kwargs_for_scheduler( num_jobs=2, num_gpus=0, backend="default", max_workers_per_gpu=2, ) == [ {"backend": "auto"}, {"backend": "auto"}, ] def test_worker_init_kwargs_with_gpus_normalizes_default_backend_alias(): assert worker_init_kwargs_for_scheduler( num_jobs=3, num_gpus=1, backend="default", max_workers_per_gpu=2, ) == [ {"backend": "gpu", "gpu_device_nums": [0]}, {"backend": "gpu", "gpu_device_nums": [0]}, {"backend": "cpu", "gpu_device_nums": []}, ] def test_backend_default_alias_parses(): parser = ArgumentParser() add_local_parallelism_args(parser) args = parser.parse_args(["--backend", "default"]) assert args.backend == "default" def test_validate_worker_pool_args_requires_parallelism_for_gpus(): with pytest.raises(ValueError, match="num_jobs > 0"): validate_worker_pool_args( num_jobs=0, num_gpus=1, backend="auto", max_workers_per_gpu=1, ) def test_validate_worker_pool_args_rejects_non_cuda_backends_for_gpus(): with pytest.raises(ValueError, match="backend 'auto' or 'gpu'"): validate_worker_pool_args( num_jobs=2, num_gpus=1, backend="mps", max_workers_per_gpu=1, ) def test_validate_worker_pool_args_rejects_invalid_backend(): with pytest.raises(ValueError, match="Invalid backend"): validate_worker_pool_args( num_jobs=2, num_gpus=0, backend="gpuu", max_workers_per_gpu=1, ) ================================================ FILE: test/test_master_compat_predictions.py ================================================ """ Regression tests for individual neural network architectures. Each test case bundles a small model config, weights, and expected predictions under test/data/. These expected values were generated by the TF/Keras implementation and verify that the PyTorch code produces equivalent outputs for each supported architecture variant (affinity, pan-allele multiply/concat, densenet, multi-output). """ import json import os import numpy as np import pytest import torch from mhcflurry.allele_encoding import AlleleEncoding from mhcflurry.class1_neural_network import Class1NeuralNetwork from mhcflurry.common import configure_pytorch, load_weights from mhcflurry.testing_utils import startup, cleanup MODEL_NAMES = [ "master_affinity", "master_pan_multiply", "master_pan_concat", "master_densenet", "master_multi_output", ] DATA_DIR = os.path.join(os.path.dirname(__file__), "data") def setup_module(): startup() def teardown_module(): cleanup() def _load_model_and_expected(name): prefix = name + "_fixture" with open(os.path.join(DATA_DIR, f"{prefix}_config.json"), "r") as f: config = json.load(f) weights = load_weights(os.path.join(DATA_DIR, f"{prefix}_weights.npz")) with open(os.path.join(DATA_DIR, f"{prefix}_predictions.json"), "r") as f: expected = json.load(f) return config, weights, expected def _predict(config, weights, expected, backend=None): if backend is not None: configure_pytorch(backend=backend) Class1NeuralNetwork.clear_model_cache() model = Class1NeuralNetwork.from_config(config, weights=weights) peptides = expected["peptides"] if "alleles" in expected: allele_encoding = AlleleEncoding( alleles=expected["alleles"], allele_to_sequence=expected["allele_to_sequence"], ) else: allele_encoding = None return model.predict(peptides, allele_encoding=allele_encoding) @pytest.mark.parametrize("model_name", MODEL_NAMES) def test_predictions_match_expected(model_name): config, weights, expected = _load_model_and_expected(model_name) predicted = _predict(config, weights, expected) np.testing.assert_allclose( predicted, np.array(expected["predictions"], dtype=np.float64), rtol=0.01, atol=0.0, ) @pytest.mark.parametrize("model_name", MODEL_NAMES) def test_mps_matches_cpu(model_name): if not (hasattr(torch.backends, "mps") and torch.backends.mps.is_available()): pytest.skip("MPS is not available") config, weights, expected = _load_model_and_expected(model_name) predicted_cpu = np.asarray( _predict(config, weights, expected, backend="cpu"), dtype=np.float64, ) predicted_mps = np.asarray( _predict(config, weights, expected, backend="mps"), dtype=np.float64, ) np.testing.assert_allclose(predicted_mps, predicted_cpu, rtol=1e-5, atol=1e-2) ================================================ FILE: test/test_multi_output.py ================================================ import numpy import pandas import pytest from mhcflurry.class1_neural_network import Class1NeuralNetwork from mhcflurry.common import random_peptides from mhcflurry.testing_utils import cleanup, startup numpy.random.seed(0) @pytest.fixture(scope="module") def setup_module(): startup() yield cleanup() def test_multi_output(setup_module): hyperparameters = dict( loss="custom:mse_with_inequalities_and_multiple_outputs", activation="tanh", layer_sizes=[16], max_epochs=50, minibatch_size=250, random_negative_rate=0.0, random_negative_constant=0.0, early_stopping=False, validation_split=0.0, locally_connected_layers=[ ], dense_layer_l1_regularization=0.0, dropout_probability=0.0, optimizer="adam", num_outputs=3) df = pandas.DataFrame() df["peptide"] = random_peptides(10000, length=9) df["output1"] = df.peptide.map(lambda s: s[4] == 'K').astype(int) * 49000 + 1 df["output2"] = df.peptide.map(lambda s: s[3] == 'Q').astype(int) * 49000 + 1 df["output3"] = df.peptide.map(lambda s: s[4] == 'K' or s[3] == 'Q').astype(int) * 49000 + 1 print("output1 mean", df.output1.mean()) print("output2 mean", df.output2.mean()) stacked = df.set_index("peptide").stack().reset_index() stacked.columns = ['peptide', 'output_name', 'value'] stacked["output_index"] = stacked.output_name.map({ "output1": 0, "output2": 1, "output3": 2, }) assert not stacked.output_index.isnull().any(), stacked fit_kwargs = { 'verbose': 1, } predictor = Class1NeuralNetwork(**hyperparameters) stacked_train = stacked predictor.fit( stacked_train.peptide.values, stacked_train.value.values, output_indices=stacked_train.output_index.values, **fit_kwargs) result = predictor.predict(df.peptide.values, output_index=None) print(df.shape, result.shape) print(result) df["prediction1"] = result[:,0] df["prediction2"] = result[:,1] df["prediction3"] = result[:,2] df_by_peptide = df.set_index("peptide") correlation = pandas.DataFrame( numpy.corrcoef(df_by_peptide.T), columns=df_by_peptide.columns, index=df_by_peptide.columns) print(correlation) sub_correlation = correlation.loc[ ["output1", "output2", "output3"], ["prediction1", "prediction2", "prediction3"], ] assert sub_correlation.iloc[0, 0] > 0.99, correlation assert sub_correlation.iloc[1, 1] > 0.99, correlation assert sub_correlation.iloc[2, 2] > 0.99, correlation ================================================ FILE: test/test_network_merging.py ================================================ import numpy import pandas import pytest from mhcflurry import Class1AffinityPredictor, Class1NeuralNetwork from mhcflurry.common import random_peptides from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup def setup_module(): global PAN_ALLELE_PREDICTOR startup() PAN_ALLELE_PREDICTOR = Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined"), optimization_level=0,) def teardown_module(): global PAN_ALLELE_PREDICTOR PAN_ALLELE_PREDICTOR = None cleanup() @pytest.fixture(scope="module") def predictors(): return {"pan-allele": PAN_ALLELE_PREDICTOR} def test_merge(predictors): pan_allele_predictor = predictors['pan-allele'] assert len(pan_allele_predictor.class1_pan_allele_models) > 1 peptides = random_peptides(100, length=9) peptides.extend(random_peptides(100, length=10)) peptides = pandas.Series(peptides).sample(frac=1.0) alleles = pandas.Series( ["HLA-A*03:01", "HLA-B*57:01", "HLA-C*02:01"] ).sample(n=len(peptides), replace=True) predictions1 = pan_allele_predictor.predict( peptides=peptides, alleles=alleles) merged = Class1NeuralNetwork.merge( pan_allele_predictor.class1_pan_allele_models) merged_predictor = Class1AffinityPredictor( allele_to_sequence=pan_allele_predictor.allele_to_sequence, class1_pan_allele_models=[merged], ) predictions2 = merged_predictor.predict(peptides=peptides, alleles=alleles) numpy.testing.assert_allclose(predictions1, predictions2, atol=0.1) ================================================ FILE: test/test_percent_rank_transform.py ================================================ import numpy from mhcflurry.percent_rank_transform import PercentRankTransform from numpy.testing import assert_allclose, assert_equal def test_percent_rank_transform(): model = PercentRankTransform() model.fit(numpy.arange(1000), bins=100) assert_allclose( model.transform([-2, 0, 50, 100, 2000]), [0.0, 0.0, 5.0, 10.0, 100.0], err_msg=str(model.__dict__)) model2 = PercentRankTransform.from_series(model.to_series()) assert_allclose( model2.transform([-2, 0, 50, 100, 2000]), [0.0, 0.0, 5.0, 10.0, 100.0], err_msg=str(model.__dict__)) assert_equal(model.cdf, model2.cdf) assert_equal(model.bin_edges, model2.bin_edges) ================================================ FILE: test/test_predict_command.py ================================================ """Tests for the predict command.""" import pytest import tempfile import os import pandas import torch from mhcflurry import predict_command from mhcflurry.testing_utils import cleanup, startup torch.manual_seed(1) @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" startup() yield cleanup() TEST_CSV = ''' Allele,Peptide,Experiment HLA-A0201,SYNFEKKL,17 HLA-B4403,AAAAAAAAA,17 HLA-B4403,PPPPPPPP,18 '''.strip() @pytest.mark.slow def test_csv(): args = ["--allele-column", "Allele", "--peptide-column", "Peptide"] deletes = [] try: with tempfile.NamedTemporaryFile(delete=False, suffix=".csv") as fd: fd.write(TEST_CSV.encode()) deletes.append(fd.name) fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = [fd.name] + args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_command.run(full_args) result = pandas.read_csv(fd_out.name) print(result) assert not result.isnull().any().any() finally: for delete in deletes: os.unlink(delete) assert result.shape == (3, 8) @pytest.mark.slow def test_no_csv(): args = [ "--alleles", "HLA-A0201", "H-2-Kb", "--peptides", "SIINFEKL", "DENDREKLLL", "PICKLEEE", "--prediction-column-prefix", "mhcflurry1_", "--affinity-only", ] deletes = [] try: fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_command.run(full_args) result = pandas.read_csv(fd_out.name) print(result) finally: for delete in deletes: os.unlink(delete) print(result) assert len(result) == 6 sub_result1 = result.loc[result.peptide == "SIINFEKL"].set_index("allele") print(sub_result1) assert ( sub_result1.loc["H-2-Kb"].mhcflurry1_affinity < sub_result1.loc["HLA-A0201"].mhcflurry1_affinity) ================================================ FILE: test/test_predict_scan_command.py ================================================ import tempfile import os import pandas import pytest from numpy.testing import assert_array_less from mhcflurry import predict_scan_command from . import data_path from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() def read_output_csv(filename): return pandas.read_csv( filename, converters={"n_flank": str, "c_flank": str}) def test_fasta(): args = [ data_path("example.fasta"), "--alleles", "HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:03,HLA-C*07:02", ] deletes = [] try: fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_scan_command.run(full_args) result = read_output_csv(fd_out.name) print(result) assert not result.isnull().any().any() finally: for delete in deletes: os.unlink(delete) assert ( result.best_allele.nunique() == 6), str(list(result.best_allele.unique())) assert result.sequence_name.nunique() == 3 assert_array_less(result.affinity_percentile, 2.0) def test_fasta_50nm(): args = [ data_path("example.fasta"), "--alleles", "HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:02,HLA-C*07:02", "--threshold-affinity", "50", ] deletes = [] try: fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_scan_command.run(full_args) result = read_output_csv(fd_out.name) print(result) assert not result.isnull().any().any() finally: for delete in deletes: os.unlink(delete) assert len(result) > 0 assert_array_less(result.affinity, 50.0001) def test_fasta_percentile(): args = [ data_path("example.fasta"), "--alleles", "HLA-A*02:01,HLA-A*03:01,HLA-B*57:01,HLA-B*45:01,HLA-C*02:02,HLA-C*07:02", "--threshold-affinity-percentile", "5.0", ] deletes = [] try: fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_scan_command.run(full_args) result = read_output_csv(fd_out.name) print(result) assert not result.isnull().any().any() finally: for delete in deletes: os.unlink(delete) assert len(result) > 0 assert_array_less(result.affinity_percentile, 5.0001) def test_commandline_sequences(): args = [ "--sequences", "ASDFGHKL", "QWERTYIPCVNM", "--alleles", "HLA-A0201,HLA-A0301", "H-2-Kb", "--peptide-lengths", "8", "--results-all", ] deletes = [] try: fd_out = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") deletes.append(fd_out.name) full_args = args + ["--out", fd_out.name] print("Running with args: %s" % full_args) predict_scan_command.run(full_args) result = read_output_csv(fd_out.name) print(result) finally: for delete in deletes: os.unlink(delete) print(result) assert result.sequence_name.nunique() == 2 assert result.best_allele.nunique() == 3 assert result.sample_name.nunique() == 2 assert (result.peptide == "ASDFGHKL").sum() == 2 assert (result.peptide != "ASDFGHKL").sum() == 10 ================================================ FILE: test/test_pytorch_coverage.py ================================================ """ Unit tests to increase coverage of PyTorch migration code. Covers: - pytorch_losses: get_pytorch_loss registry, StandardLoss, sample weights - pytorch_layers: get_activation, LocallyConnected1D numerics - ensemble_centrality: edge cases (<=3 cols, all-NaN, median) - class1_neural_network: weight init variants, MergedClass1NeuralNetwork, skip-connections topology - class1_affinity_predictor: canonicalize_allele_name round-trip """ import warnings import numpy as np import pytest import torch from mhcflurry.testing_utils import startup, cleanup @pytest.fixture(autouse=True) def setup_teardown(): startup() yield cleanup() # ── pytorch_losses ────────────────────────────────────────────────────────── class TestGetPytorchLoss: def test_standard_mse(self): from mhcflurry.pytorch_losses import get_pytorch_loss loss = get_pytorch_loss("mse") assert not loss.supports_inequalities pred = torch.tensor([0.5]) target = torch.tensor([0.3]) val = loss(pred, target).item() assert abs(val - 0.04) < 1e-6 def test_standard_mae(self): from mhcflurry.pytorch_losses import get_pytorch_loss loss = get_pytorch_loss("mae") pred = torch.tensor([0.5]) target = torch.tensor([0.3]) val = loss(pred, target).item() assert abs(val - 0.2) < 1e-6 def test_custom_loss_lookup(self): from mhcflurry.pytorch_losses import get_pytorch_loss loss = get_pytorch_loss("custom:mse_with_inequalities") assert loss.supports_inequalities assert not loss.supports_multiple_outputs def test_custom_multi_output_lookup(self): from mhcflurry.pytorch_losses import get_pytorch_loss loss = get_pytorch_loss("custom:mse_with_inequalities_and_multiple_outputs") assert loss.supports_inequalities assert loss.supports_multiple_outputs def test_custom_mass_spec_lookup(self): from mhcflurry.pytorch_losses import get_pytorch_loss loss = get_pytorch_loss("custom:multiallelic_mass_spec_loss") assert loss.supports_inequalities def test_unknown_standard_loss_raises(self): from mhcflurry.pytorch_losses import get_pytorch_loss with pytest.raises(ValueError, match="Unknown standard loss"): get_pytorch_loss("huber") def test_unknown_custom_loss_raises(self): from mhcflurry.pytorch_losses import get_pytorch_loss with pytest.raises(ValueError, match="No such custom loss"): get_pytorch_loss("custom:nonexistent") class TestStandardLossWeighted: def test_mse_with_sample_weights(self): from mhcflurry.pytorch_losses import StandardLoss loss = StandardLoss("mse") pred = torch.tensor([0.5, 0.3]) target = torch.tensor([0.5, 0.0]) weights = torch.tensor([0.0, 1.0]) val = loss(pred, target, sample_weights=weights).item() # Only second sample contributes: 0.3^2 * 1.0 / 1.0 assert abs(val - 0.09) < 1e-6 def test_mae_with_sample_weights(self): from mhcflurry.pytorch_losses import StandardLoss loss = StandardLoss("mae") pred = torch.tensor([0.5, 0.3]) target = torch.tensor([0.5, 0.0]) weights = torch.tensor([0.0, 1.0]) val = loss(pred, target, sample_weights=weights).item() assert abs(val - 0.3) < 1e-6 def test_mse_column_vector_predictions_do_not_warn(self): from mhcflurry.pytorch_losses import StandardLoss loss = StandardLoss("mse") pred = torch.tensor([[0.5], [0.3]]) target = torch.tensor([0.5, 0.0]) with warnings.catch_warnings(record=True) as caught: warnings.simplefilter("always") val = loss(pred, target).item() assert abs(val - 0.045) < 1e-6 assert not caught class TestMSEWithInequalitiesSampleWeights: def test_weighted_equality_loss(self): from mhcflurry.pytorch_losses import MSEWithInequalities loss_fn = MSEWithInequalities() # Two equality targets, weight only the first encoded = MSEWithInequalities.encode_y([0.5, 0.5], ["=", "="]) y_pred = torch.tensor([0.7, 0.9]) y_true = torch.tensor(encoded) weights = torch.tensor([1.0, 0.0]) val = loss_fn(y_pred, y_true, sample_weights=weights).item() # Only first sample: (0.7 - 0.5)^2 * 1.0 / 1.0 = 0.04 assert abs(val - 0.04) < 1e-6 def test_encode_y_nan_raises(self): from mhcflurry.pytorch_losses import MSEWithInequalities with pytest.raises(ValueError, match="NaN"): MSEWithInequalities.encode_y([float("nan")]) def test_encode_y_length_mismatch_raises(self): from mhcflurry.pytorch_losses import MSEWithInequalities with pytest.raises(ValueError, match="same length"): MSEWithInequalities.encode_y([0.5, 0.5], ["="]) class TestMSEMultiOutputSampleWeights: def test_weighted_multi_output(self): from mhcflurry.pytorch_losses import MSEWithInequalitiesAndMultipleOutputs loss_fn = MSEWithInequalitiesAndMultipleOutputs() encoded = loss_fn.encode_y([0.5, 0.5], output_indices=[0, 1]) y_pred = torch.tensor([[0.7, 999.0], [999.0, 0.5]]) y_true = torch.tensor(encoded) weights = torch.tensor([1.0, 0.0]) val = loss_fn(y_pred, y_true, sample_weights=weights).item() # Only first sample, output 0: (0.7 - 0.5)^2 = 0.04 assert abs(val - 0.04) < 1e-6 def test_encode_y_negative_output_indices_raises(self): from mhcflurry.pytorch_losses import MSEWithInequalitiesAndMultipleOutputs with pytest.raises(ValueError, match="Invalid output indices"): MSEWithInequalitiesAndMultipleOutputs.encode_y( [0.5], output_indices=[-1]) def test_encode_y_output_indices_shape_mismatch_raises(self): from mhcflurry.pytorch_losses import MSEWithInequalitiesAndMultipleOutputs with pytest.raises(ValueError, match="Expected output_indices"): MSEWithInequalitiesAndMultipleOutputs.encode_y( [0.5, 0.5], output_indices=[0]) class TestMultiallelicMassSpecEdgeCases: def test_no_hits_returns_zero(self): from mhcflurry.pytorch_losses import MultiallelicMassSpecLoss loss_fn = MultiallelicMassSpecLoss(delta=0.2) y_pred = torch.tensor([[0.5, 0.3]], requires_grad=True) y_true = torch.tensor([0.0]) # only decoys val = loss_fn(y_pred, y_true) assert val.item() == 0.0 val.backward() # should not error def test_no_decoys_returns_zero(self): from mhcflurry.pytorch_losses import MultiallelicMassSpecLoss loss_fn = MultiallelicMassSpecLoss(delta=0.2) y_pred = torch.tensor([[0.5, 0.3]], requires_grad=True) y_true = torch.tensor([1.0]) # only hits val = loss_fn(y_pred, y_true) assert val.item() == 0.0 val.backward() # ── pytorch_layers ────────────────────────────────────────────────────────── class TestGetActivation: def test_tanh(self): from mhcflurry.pytorch_layers import get_activation act = get_activation("tanh") x = torch.tensor([0.0]) assert act(x).item() == 0.0 def test_sigmoid(self): from mhcflurry.pytorch_layers import get_activation act = get_activation("sigmoid") assert abs(act(torch.tensor([0.0])).item() - 0.5) < 1e-6 def test_relu(self): from mhcflurry.pytorch_layers import get_activation act = get_activation("relu") assert act(torch.tensor([-1.0])).item() == 0.0 assert act(torch.tensor([1.0])).item() == 1.0 def test_linear_returns_none(self): from mhcflurry.pytorch_layers import get_activation assert get_activation("linear") is None assert get_activation("") is None def test_unknown_raises(self): from mhcflurry.pytorch_layers import get_activation with pytest.raises(ValueError, match="Unknown activation"): get_activation("swish") class TestLocallyConnected1D: def test_output_shape(self): from mhcflurry.pytorch_layers import LocallyConnected1D lc = LocallyConnected1D( in_channels=3, out_channels=5, input_length=10, kernel_size=3 ) x = torch.randn(2, 10, 3) out = lc(x) assert out.shape == (2, 8, 5) def test_deterministic_forward(self): from mhcflurry.pytorch_layers import LocallyConnected1D torch.manual_seed(42) lc = LocallyConnected1D( in_channels=2, out_channels=1, input_length=4, kernel_size=2, activation="linear", ) x = torch.ones(1, 4, 2) out = lc(x) # With linear activation, output = einsum + bias, should be deterministic out2 = lc(x) assert torch.allclose(out, out2) # ── ensemble_centrality ───────────────────────────────────────────────────── class TestEnsembleCentralityEdgeCases: def test_robust_mean_falls_back_to_nanmean_for_few_columns(self): from mhcflurry.ensemble_centrality import robust_mean, _nanmean_no_warnings arr = np.array([[1.0, 2.0, 3.0]]) # 3 columns => fallback result = robust_mean(arr) expected = _nanmean_no_warnings(arr) np.testing.assert_array_equal(result, expected) def test_robust_mean_two_columns(self): from mhcflurry.ensemble_centrality import robust_mean arr = np.array([[10.0, 20.0]]) result = robust_mean(arr) assert result[0] == 15.0 def test_robust_mean_all_nan_many_columns(self): from mhcflurry.ensemble_centrality import robust_mean arr = np.array([[np.nan, np.nan, np.nan, np.nan, np.nan]]) result = robust_mean(arr) assert np.isnan(result[0]) def test_nanmedian_mixed_nans(self): from mhcflurry.ensemble_centrality import _nanmedian_no_warnings arr = np.array([ [1.0, 3.0, np.nan], [np.nan, np.nan, np.nan], [5.0, 5.0, 5.0], ]) result = _nanmedian_no_warnings(arr) assert result[0] == 2.0 assert np.isnan(result[1]) assert result[2] == 5.0 def test_nanmean_single_value_per_row(self): from mhcflurry.ensemble_centrality import _nanmean_no_warnings arr = np.array([ [np.nan, 7.0, np.nan], ]) result = _nanmean_no_warnings(arr) assert result[0] == 7.0 def test_centrality_measures_dict(self): from mhcflurry.ensemble_centrality import CENTRALITY_MEASURES assert set(CENTRALITY_MEASURES.keys()) == {"mean", "median", "robust_mean"} # ── class1_neural_network: weight initialization ──────────────────────────── class TestWeightInitialization: def _make_model(self, init): from mhcflurry.class1_neural_network import ( Class1NeuralNetwork, Class1NeuralNetworkModel, ) nn_obj = Class1NeuralNetwork() peptide_shape = nn_obj.peptides_to_network_input([]).shape[1:] return Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, layer_sizes=[16], init=init, ) def test_glorot_uniform(self): model = self._make_model("glorot_uniform") assert model.output_layer.weight.shape[0] == 1 def test_glorot_normal(self): model = self._make_model("glorot_normal") assert model.output_layer.weight.shape[0] == 1 def test_he_uniform(self): model = self._make_model("he_uniform") assert model.output_layer.weight.shape[0] == 1 def test_he_normal(self): model = self._make_model("he_normal") assert model.output_layer.weight.shape[0] == 1 def test_biases_are_zero(self): model = self._make_model("glorot_uniform") for name, param in model.named_parameters(): if "bias" in name: assert torch.all(param == 0), f"Non-zero bias in {name}" # ── class1_neural_network: MergedClass1NeuralNetwork ──────────────────────── class TestMergedClass1NeuralNetwork: def _make_merged(self, merge_method, n_networks=2): from mhcflurry.class1_neural_network import ( Class1NeuralNetwork, Class1NeuralNetworkModel, MergedClass1NeuralNetwork, ) nn_obj = Class1NeuralNetwork() peptide_shape = nn_obj.peptides_to_network_input([]).shape[1:] torch.manual_seed(0) networks = [] for _ in range(n_networks): net = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, layer_sizes=[4], ) networks.append(net) return MergedClass1NeuralNetwork(networks, merge_method=merge_method) def test_average(self): merged = self._make_merged("average") inp = {"peptide": torch.randn(3, *merged.networks[0].peptide_encoding_shape)} out = merged(inp) # Average of 2 networks individual = [net(inp) for net in merged.networks] expected = torch.stack(individual, dim=-1).mean(dim=-1) assert torch.allclose(out, expected, atol=1e-6) def test_sum(self): merged = self._make_merged("sum") inp = {"peptide": torch.randn(3, *merged.networks[0].peptide_encoding_shape)} out = merged(inp) individual = [net(inp) for net in merged.networks] expected = torch.stack(individual, dim=-1).sum(dim=-1) assert torch.allclose(out, expected, atol=1e-6) def test_concatenate(self): merged = self._make_merged("concatenate") inp = {"peptide": torch.randn(3, *merged.networks[0].peptide_encoding_shape)} out = merged(inp) individual = [net(inp) for net in merged.networks] expected = torch.cat(individual, dim=-1) assert torch.allclose(out, expected, atol=1e-6) def test_unknown_merge_method_raises(self): merged = self._make_merged("average") merged.merge_method = "bad" inp = {"peptide": torch.randn(1, *merged.networks[0].peptide_encoding_shape)} with pytest.raises(ValueError, match="Unknown merge method"): merged(inp) def test_get_set_weights_roundtrip(self): merged = self._make_merged("average") weights = merged.get_weights_list() assert len(weights) > 0 # Setting the same weights back should not change outputs inp = {"peptide": torch.randn(2, *merged.networks[0].peptide_encoding_shape)} out_before = merged(inp).detach().clone() merged.set_weights_list(weights) out_after = merged(inp) assert torch.allclose(out_before, out_after, atol=1e-6) # ── class1_neural_network: skip-connections topology ──────────────────────── class TestSkipConnectionsTopology: def test_forward_pass(self): from mhcflurry.class1_neural_network import ( Class1NeuralNetwork, Class1NeuralNetworkModel, ) nn_obj = Class1NeuralNetwork() peptide_shape = nn_obj.peptides_to_network_input([]).shape[1:] torch.manual_seed(7) model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, layer_sizes=[8, 8, 4], topology="with-skip-connections", ) inp = {"peptide": torch.randn(2, *peptide_shape)} out = model(inp) assert out.shape == (2, 1) def test_different_from_feedforward(self): from mhcflurry.class1_neural_network import ( Class1NeuralNetwork, Class1NeuralNetworkModel, ) nn_obj = Class1NeuralNetwork() peptide_shape = nn_obj.peptides_to_network_input([]).shape[1:] torch.manual_seed(99) skip_model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, layer_sizes=[8, 8], topology="with-skip-connections", ) torch.manual_seed(99) ff_model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, layer_sizes=[8, 8], topology="feedforward", ) inp = {"peptide": torch.randn(2, *peptide_shape)} out_skip = skip_model(inp) out_ff = ff_model(inp) # Different topologies should give different outputs (skip model has # different second-layer input dim so weights differ) assert not torch.allclose(out_skip, out_ff, atol=1e-4) # ── class1_affinity_predictor: canonicalize_allele_name ───────────────────── class TestCanonicalizeAlleleName: def test_common_alleles_roundtrip(self): """Known HLA alleles should round-trip through canonicalize_allele_name.""" from mhcflurry.common import normalize_allele_name alleles = [ "HLA-A*02:01", "HLA-A*01:01", "HLA-B*07:02", "HLA-B*44:02", "HLA-C*07:01", ] for allele in alleles: result = normalize_allele_name(allele, use_allele_aliases=False) assert result == allele, f"{allele} -> {result}" def test_aliases_false_avoids_remapping(self): """With aliases=False, HLA-C*01:01 should not remap to C*01:02.""" from mhcflurry.common import normalize_allele_name result = normalize_allele_name( "HLA-C*01:01", use_allele_aliases=False) assert result == "HLA-C*01:01" def test_normalize_raises_on_invalid(self): from mhcflurry.common import normalize_allele_name with pytest.raises(ValueError, match="Invalid MHC allele name"): normalize_allele_name("INVALID_ALLELE_NAME") def test_normalize_returns_default_on_invalid(self): from mhcflurry.common import normalize_allele_name result = normalize_allele_name( "INVALID_ALLELE_NAME", raise_on_error=False, default_value="NONE") assert result == "NONE" def test_forbidden_substring_raises(self): from mhcflurry.common import normalize_allele_name with pytest.raises(ValueError, match="Unsupported gene"): normalize_allele_name("HLA-MIC-A") def test_forbidden_substring_returns_default(self): from mhcflurry.common import normalize_allele_name result = normalize_allele_name( "HLA-MIC-A", raise_on_error=False, default_value="SKIP") assert result == "SKIP" # ── common.py: configure_pytorch ──────────────────────────────────────────── class TestConfigurePyTorch: def test_reconfigure_backend(self): from mhcflurry import common old_backend = common._pytorch_backend common.configure_pytorch(backend="cpu") assert common._pytorch_backend == "cpu" common.configure_pytorch(backend="auto") assert common._pytorch_backend == "auto" common._pytorch_backend = old_backend def test_invalid_backend_raises(self): from mhcflurry import common with pytest.raises(ValueError, match="Invalid backend"): common.configure_pytorch(backend="gpuu") def test_default_backend_alias_maps_to_auto(self): from mhcflurry import common old_backend = common._pytorch_backend try: common.configure_pytorch(backend="default") assert common._pytorch_backend == "auto" finally: common._pytorch_backend = old_backend def test_configure_tensorflow_cpu_backend_maps_to_cpu(self): from mhcflurry import common old_backend = common._pytorch_backend try: with pytest.warns(FutureWarning, match="configure_tensorflow"): common.configure_tensorflow(backend="tensorflow-cpu") assert common._pytorch_backend == "cpu" assert str(common.get_pytorch_device()) == "cpu" finally: common._pytorch_backend = old_backend def test_configure_tensorflow_default_alias_maps_to_auto(self): from mhcflurry import common old_backend = common._pytorch_backend try: common.configure_pytorch(backend="cpu") with pytest.warns(FutureWarning, match="configure_tensorflow"): common.configure_tensorflow(backend="tensorflow-default") assert common._pytorch_backend == "auto" finally: common._pytorch_backend = old_backend def test_configure_tensorflow_gpu_backend_maps_to_gpu(self): from mhcflurry import common old_backend = common._pytorch_backend try: with pytest.warns(FutureWarning, match="configure_tensorflow"): common.configure_tensorflow(backend="tensorflow-gpu") assert common._pytorch_backend == "gpu" if not torch.cuda.is_available(): with pytest.raises(RuntimeError, match="CUDA is not available"): common.get_pytorch_device() finally: common._pytorch_backend = old_backend ================================================ FILE: test/test_pytorch_regressions.py ================================================ """ Regression tests for PyTorch conversion gaps vs master behavior. """ import json import os import random import pytest import numpy as np import torch from mhcflurry.class1_neural_network import ( Class1NeuralNetwork, Class1NeuralNetworkModel, MergedClass1NeuralNetwork, ) from mhcflurry.class1_processing_neural_network import ( Class1ProcessingModel, Class1ProcessingNeuralNetwork, ) from mhcflurry.common import load_weights from mhcflurry.flanking_encoding import FlankingEncoding from mhcflurry.pytorch_losses import ( MSEWithInequalities, MultiallelicMassSpecLoss, ) from mhcflurry.testing_utils import startup, cleanup @pytest.fixture(autouse=True) def setup_teardown(): startup() yield cleanup() def _make_simple_affinity_model(**overrides): hyperparameters = dict( activation="tanh", layer_sizes=[4], locally_connected_layers=[], peptide_dense_layer_sizes=[], allele_dense_layer_sizes=[], dropout_probability=0.0, batch_normalization=False, dense_layer_l1_regularization=0.0, dense_layer_l2_regularization=0.0, max_epochs=5, early_stopping=False, validation_split=0.0, minibatch_size=2, optimizer="sgd", learning_rate=0.1, random_negative_rate=0.0, random_negative_constant=0, ) hyperparameters.update(overrides) return Class1NeuralNetwork(**hyperparameters) def _make_allele_representations(num_alleles=2): return np.arange(num_alleles * 6, dtype=np.float32).reshape(num_alleles, 2, 3) def _seed_all(seed=1): np.random.seed(seed) random.seed(seed) torch.manual_seed(seed) def test_sample_weights_affect_training(): peptides = ["AAAAAAAAA", "CCCCCCCCC"] affinities = np.array([50.0, 50000.0]) weights = np.array([1000.0, 1.0]) _seed_all(7) model_unweighted = _make_simple_affinity_model(max_epochs=25) model_unweighted.fit( peptides, affinities, shuffle_permutation=[0, 1], ) pred_unweighted = model_unweighted.predict(peptides) _seed_all(7) model_weighted = _make_simple_affinity_model(max_epochs=25) model_weighted.fit( peptides, affinities, sample_weights=weights, shuffle_permutation=[0, 1], ) pred_weighted = model_weighted.predict(peptides) # With sample weights, training should diverge from the unweighted case. assert not np.allclose(pred_unweighted, pred_weighted, rtol=0.01, atol=0.0) def test_validation_split_is_fixed_when_lr_zero(): peptides = ["AAAAAAAAA", "CCCCCCCCC", "DDDDDDDDD", "EEEEEEEEE"] affinities = np.array([50.0, 50000.0, 50000.0, 50.0]) _seed_all(3) model = _make_simple_affinity_model( learning_rate=0.0, max_epochs=3, validation_split=0.5, early_stopping=False, ) model.fit( peptides, affinities, shuffle_permutation=[0, 1, 2, 3], ) val_losses = model.fit_info[-1]["val_loss"] assert len(val_losses) >= 2 # With fixed validation split and zero learning rate, val loss should be constant. assert np.allclose(val_losses, val_losses[0], rtol=0.0, atol=1e-6) def test_dropout_probability_is_keep_prob(): nn = Class1NeuralNetwork() peptide_shape = nn.peptides_to_network_input([]).shape[1:] model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, dropout_probability=0.8, ) assert model.dropouts[0] is not None # In master, dropout_probability is a keep probability, so p should be 0.2. assert model.dropouts[0].p == pytest.approx(0.2, abs=1e-6) def test_batch_norm_uses_keras_defaults(): nn = Class1NeuralNetwork() peptide_shape = nn.peptides_to_network_input([]).shape[1:] model = Class1NeuralNetworkModel( peptide_encoding_shape=peptide_shape, batch_normalization=True, layer_sizes=[4], ) assert model.batch_norm_early is not None assert model.batch_norm_early.eps == pytest.approx(1e-3, abs=1e-12) assert model.batch_norm_early.momentum == pytest.approx(0.01, abs=1e-12) assert model.batch_norms[0] is not None assert model.batch_norms[0].eps == pytest.approx(1e-3, abs=1e-12) assert model.batch_norms[0].momentum == pytest.approx(0.01, abs=1e-12) def test_processing_dropout_is_spatial(): model = Class1ProcessingModel( sequence_dims=(10, 3), n_flank_length=1, c_flank_length=1, peptide_max_length=8, flanking_averages=False, convolutional_filters=3, convolutional_kernel_size=1, convolutional_activation="tanh", convolutional_kernel_l1_l2=[0.0, 0.0], dropout_rate=0.5, post_convolutional_dense_layer_sizes=[], ) assert model.dropout is not None model.train() _seed_all(11) x = torch.ones((1, 3, 10)) dropped = model.dropout(x) mask = (dropped != 0) # Spatial dropout should use one mask per channel across all positions. for c in range(mask.shape[1]): assert torch.all(mask[0, c, :] == mask[0, c, 0]) def test_processing_flank_averages_use_tf_masked_mean_semantics(): model = Class1ProcessingModel( sequence_dims=(7, 1), n_flank_length=2, c_flank_length=2, peptide_max_length=3, flanking_averages=True, convolutional_filters=1, convolutional_kernel_size=1, convolutional_activation="tanh", convolutional_kernel_l1_l2=[0.0, 0.0], dropout_rate=0.0, post_convolutional_dense_layer_sizes=[], ) # With TF semantics, masked averaging is computed via: # mean((x + 1) * mask, axis=sequence_axis) - 1 # i.e., denominator is full sequence length, not number of masked positions. conv_result = torch.ones((1, 7, 1)) peptide_length = torch.tensor([[3]]) n_avg = model._extract_n_flank_avg(conv_result) c_avg = model._extract_c_flank_avg(conv_result, peptide_length) expected = (2 * (1.0 + 1.0) / 7.0) - 1.0 assert n_avg.item() == pytest.approx(expected, abs=1e-7) assert c_avg.item() == pytest.approx(expected, abs=1e-7) def test_mse_with_inequalities_rejects_out_of_range_targets(): with pytest.raises(ValueError): MSEWithInequalities.encode_y([1.1], inequalities=["="]) with pytest.raises(ValueError): MSEWithInequalities.encode_y([-0.1], inequalities=["="]) def test_mse_with_inequalities_rejects_invalid_inequality(): with pytest.raises(ValueError): MSEWithInequalities.encode_y([0.5], inequalities=["?"]) def test_multiallelic_mass_spec_encode_y_validates_values(): with pytest.raises(AssertionError): MultiallelicMassSpecLoss.encode_y([0.5]) def test_merge_allele_specific_raises_not_implemented(): _seed_all(5) model_a = _make_simple_affinity_model(max_epochs=1) model_b = _make_simple_affinity_model(max_epochs=1) # Ensure networks exist, matching master expectations for merge(). model_a._network = model_a.make_network( allele_representations=None, **model_a.network_hyperparameter_defaults.subselect(model_a.hyperparameters) ) model_b._network = model_b.make_network( allele_representations=None, **model_b.network_hyperparameter_defaults.subselect(model_b.hyperparameters) ) with pytest.raises(NotImplementedError): Class1NeuralNetwork.merge([model_a, model_b]) def test_merged_network_serialization_preserves_dropout_keep_probability(): _seed_all(23) allele_representations = np.zeros((2, 3, 4), dtype=np.float32) models = [] for _ in range(2): model = Class1NeuralNetwork( dropout_probability=0.8, layer_sizes=[4], allele_dense_layer_sizes=[], peptide_dense_layer_sizes=[], locally_connected_layers=[], batch_normalization=False, dense_layer_l1_regularization=0.0, dense_layer_l2_regularization=0.0, ) model._network = model.make_network( allele_representations=allele_representations, **model.network_hyperparameter_defaults.subselect(model.hyperparameters) ) models.append(model) merged = Class1NeuralNetwork.merge(models) config = merged.get_config() roundtripped = Class1NeuralNetwork.from_config( config, weights=merged.get_weights(), ) network = roundtripped.network() assert isinstance(network, MergedClass1NeuralNetwork) for subnet in network.networks: assert subnet.dropout_probability == pytest.approx(0.8, abs=1e-12) assert subnet.dropouts[0] is not None assert subnet.dropouts[0].p == pytest.approx(0.2, abs=1e-12) def test_dense_regularization_excludes_output_layer(): peptides = ["AAAAAAAAA", "CCCCCCCCC"] _seed_all(17) model = _make_simple_affinity_model( layer_sizes=[], dense_layer_l1_regularization=0.1, dense_layer_l2_regularization=0.2, max_epochs=1, validation_split=0.0, early_stopping=False, ) model._network = model.make_network( allele_representations=None, **model.network_hyperparameter_defaults.subselect(model.hyperparameters) ) affinities = model.predict(peptides) weights_before = [p.detach().cpu().clone() for p in model.network().parameters()] model.fit( peptides, affinities, shuffle_permutation=[0, 1], ) weights_after = [p.detach().cpu().clone() for p in model.network().parameters()] for before, after in zip(weights_before, weights_after): assert torch.allclose(before, after, rtol=0.0, atol=1e-7) def test_processing_validation_uses_last_fraction_and_sample_weights(): _seed_all(19) model = Class1ProcessingNeuralNetwork( max_epochs=1, validation_split=0.5, early_stopping=False, learning_rate=0.0, minibatch_size=2, dropout_rate=0.0, flanking_averages=False, convolutional_kernel_l1_l2=[0.0, 0.0], convolutional_filters=2, convolutional_kernel_size=1, n_flank_length=1, c_flank_length=1, peptide_max_length=8, ) sequences = FlankingEncoding( peptides=["AAAAAAAA", "CCCCCCCC", "DDDDDDDD", "EEEEEEEE"], n_flanks=["Q", "R", "S", "T"], c_flanks=["V", "W", "Y", "A"], ) targets = np.array([1.0, 0.0, 1.0, 0.0], dtype=np.float32) sample_weights = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float32) shuffle_permutation = np.array([2, 0, 3, 1]) model._network = model.make_network( **model.network_hyperparameter_defaults.subselect(model.hyperparameters) ) network = model.network() network.eval() x_dict = model.network_input(sequences) x_dict = { key: value[shuffle_permutation] for key, value in x_dict.items() } shuffled_targets = targets[shuffle_permutation] shuffled_weights = sample_weights[shuffle_permutation] val_indices = np.arange(len(targets))[2:] with torch.no_grad(): val_inputs = { "sequence": torch.from_numpy(x_dict["sequence"][val_indices]).float(), "peptide_length": torch.from_numpy(x_dict["peptide_length"][val_indices]), } predictions = network(val_inputs) expected = torch.nn.functional.binary_cross_entropy( predictions, torch.from_numpy(shuffled_targets[val_indices]), reduction="none", ) expected = ( expected * torch.from_numpy(shuffled_weights[val_indices]) ).mean().item() model.fit( sequences=sequences, targets=targets, sample_weights=sample_weights, shuffle_permutation=shuffle_permutation, verbose=0, ) assert model.fit_info[-1]["val_loss"][0] == pytest.approx(expected, abs=1e-7) def test_optimizer_defaults_match_keras(): affinity_model = _make_simple_affinity_model(optimizer="adam") affinity_model._network = affinity_model.make_network( allele_representations=None, **affinity_model.network_hyperparameter_defaults.subselect( affinity_model.hyperparameters ) ) affinity_optimizer = affinity_model._create_optimizer(affinity_model.network()) assert affinity_optimizer.defaults["eps"] == pytest.approx(1e-07, abs=1e-12) processing_model = Class1ProcessingNeuralNetwork( optimizer="rmsprop", learning_rate=0.001, ) processing_model._network = processing_model.make_network( **processing_model.network_hyperparameter_defaults.subselect( processing_model.hyperparameters ) ) processing_optimizer = processing_model._create_optimizer( processing_model.network() ) assert processing_optimizer.defaults["alpha"] == pytest.approx(0.9, abs=1e-12) assert processing_optimizer.defaults["eps"] == pytest.approx(1e-07, abs=1e-12) def test_weight_and_embedding_updates_preserve_device(): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") affinity_model = _make_simple_affinity_model(batch_normalization=True) affinity_model._network = affinity_model.make_network( allele_representations=_make_allele_representations(), **affinity_model.network_hyperparameter_defaults.subselect( affinity_model.hyperparameters ) ) affinity_network = affinity_model.network() affinity_network.to(device) affinity_network.set_weights_list( affinity_network.get_weights_list(), auto_convert_keras=False, ) assert all(param.device == device for param in affinity_network.parameters()) assert all(buffer.device == device for buffer in affinity_network.buffers()) affinity_model.set_allele_representations(_make_allele_representations(3)) assert affinity_network.allele_embedding.weight.device == device affinity_model.clear_allele_representations() assert affinity_network.allele_embedding.weight.device == device processing_model = Class1ProcessingNeuralNetwork( dropout_rate=0.0, flanking_averages=False, convolutional_kernel_l1_l2=[0.0, 0.0], convolutional_filters=2, convolutional_kernel_size=1, n_flank_length=1, c_flank_length=1, peptide_max_length=8, ) processing_model._network = processing_model.make_network( **processing_model.network_hyperparameter_defaults.subselect( processing_model.hyperparameters ) ) processing_network = processing_model.network() processing_network.to(device) processing_network.set_weights_list( processing_network.get_weights_list(), auto_convert_keras=False, ) assert all(param.device == device for param in processing_network.parameters()) assert all(buffer.device == device for buffer in processing_network.buffers()) def test_cached_keras_weight_reload_preserves_device(): data_dir = os.path.join(os.path.dirname(__file__), "data") config_path = os.path.join(data_dir, "master_affinity_fixture_config.json") weights_path = os.path.join(data_dir, "master_affinity_fixture_weights.npz") with open(config_path, "r") as inp: config = json.load(inp) weights = load_weights(weights_path) reloaded_weights = [w.copy() for w in weights] device = torch.device("cuda" if torch.cuda.is_available() else "cpu") Class1NeuralNetwork.clear_model_cache() first_model = Class1NeuralNetwork.from_config(config, weights=weights) first_network = first_model.network(borrow=True) first_network.to(device) second_model = Class1NeuralNetwork.from_config(config, weights=reloaded_weights) second_network = second_model.network(borrow=True) assert second_network is first_network assert all(param.device == device for param in second_network.parameters()) assert all(buffer.device == device for buffer in second_network.buffers()) def test_l1_regularization_changes_weights_even_with_zero_data_loss(): peptides = ["AAAAAAAAA", "CCCCCCCCC"] _seed_all(13) model = _make_simple_affinity_model( dense_layer_l1_regularization=0.1, dense_layer_l2_regularization=0.0, max_epochs=1, validation_split=0.0, early_stopping=False, ) # Build network explicitly so we can read weights before fitting. model._network = model.make_network( allele_representations=None, **model.network_hyperparameter_defaults.subselect(model.hyperparameters) ) affinities = model.predict(peptides) weights_before = [p.detach().cpu().clone() for p in model.network().parameters()] model.fit( peptides, affinities, shuffle_permutation=[0, 1], ) weights_after = [p.detach().cpu().clone() for p in model.network().parameters()] changed = any( not torch.allclose(before, after, rtol=0.0, atol=1e-7) for before, after in zip(weights_before, weights_after) ) assert changed ================================================ FILE: test/test_random_negative_peptides.py ================================================ """Tests for random negative peptide generation.""" import pandas import math from mhcflurry.common import random_peptides from mhcflurry.random_negative_peptides import RandomNegativePeptides def test_random_negative_peptides_by_allele_equalize_nonbinders(): planner = RandomNegativePeptides( random_negative_method="by_allele", random_negative_binder_threshold=500, random_negative_rate=1.0, random_negative_constant=2) data_rows = [ ("HLA-A*02:01", "SIINFEKL", 400, "="), ("HLA-A*02:01", "SIINFEKLL", 300, "="), ("HLA-A*02:01", "SIINFEKLL", 300, "="), ("HLA-A*02:01", "SIINFEKLQ", 1000, "="), ("HLA-A*02:01", "SIINFEKLZZ", 12000, ">"), ] for peptide in random_peptides(1000, length=9): data_rows.append(("HLA-B*44:02", peptide, 100, "=")) for peptide in random_peptides(1000, length=9): data_rows.append(("HLA-B*44:02", peptide, 1000, "=")) for peptide in random_peptides(5, length=10): data_rows.append(("HLA-B*44:02", peptide, 100, "=")) data = pandas.DataFrame( data_rows, columns=["allele", "peptide", "affinity", "inequality"]) data["length"] = data.peptide.str.len() planner.plan( peptides=data.peptide.values, affinities=data.affinity.values, alleles=data.allele.values, inequalities=data.inequality.values) result_df = pandas.DataFrame({ "allele": planner.get_alleles(), "peptide": planner.get_peptides(), }) result_df["length"] = result_df.peptide.str.len() random_negatives = result_df.groupby(["allele", "length"]).peptide.count().unstack() data.groupby(["allele", "length"]).peptide.count().unstack().fillna(0) data.loc[ data.affinity <= 500 ].groupby(["allele", "length"]).peptide.count().unstack().fillna(0) real_nonbinders = data.loc[ data.affinity > 500 ].groupby(["allele", "length"]).peptide.count().unstack().fillna(0) random_negatives + real_nonbinders assert (random_negatives.loc["HLA-A*02:01"] == 1.0).all() assert (random_negatives.loc["HLA-B*44:02"] == math.ceil(1007 / 8)).all(), ( random_negatives.loc["HLA-B*44:02"], math.ceil(1007 / 8)) def test_random_negative_peptides_by_allele(): planner = RandomNegativePeptides( random_negative_method="by_allele_equalize_nonbinders", random_negative_binder_threshold=500, random_negative_rate=1.0, random_negative_constant=2) data_rows = [ ("HLA-A*02:01", "SIINFEKL", 400, "="), ("HLA-A*02:01", "SIINFEKLL", 300, "="), ("HLA-A*02:01", "SIINFEKLL", 300, "="), ("HLA-A*02:01", "SIINFEKLQ", 1000, "="), ("HLA-A*02:01", "SIINFEKLZZ", 12000, ">"), ("HLA-C*01:02", "SIINFEKLQ", 100, "="), # only binders ("HLA-C*07:02", "SIINFEKLL", 1000, "=") # only non-binders ] for peptide in random_peptides(1000, length=9): data_rows.append(("HLA-B*44:02", peptide, 100, "=")) for peptide in random_peptides(1000, length=9): data_rows.append(("HLA-B*44:02", peptide, 1000, "=")) for peptide in random_peptides(5, length=10): data_rows.append(("HLA-B*44:02", peptide, 100, "=")) data = pandas.DataFrame( data_rows, columns=["allele", "peptide", "affinity", "inequality"]) data["length"] = data.peptide.str.len() planner.plan( peptides=data.peptide.values, affinities=data.affinity.values, alleles=data.allele.values, inequalities=data.inequality.values) result_df = pandas.DataFrame({ "allele": planner.get_alleles(), "peptide": planner.get_peptides(), }) result_df["length"] = result_df.peptide.str.len() random_negatives = result_df.groupby(["allele", "length"]).peptide.count().unstack() real_data = data.groupby(["allele", "length"]).peptide.count().unstack().fillna(0) data.loc[ data.affinity <= 500 ].groupby(["allele", "length"]).peptide.count().unstack().fillna(0) real_nonbinders = data.loc[ data.affinity > 500 ].groupby(["allele", "length"]).peptide.count().unstack().fillna(0) for length in random_negatives.columns: if length not in real_nonbinders.columns: real_nonbinders[length] = 0 total_nonbinders = ( random_negatives.reindex(real_data.index).fillna(0) + real_nonbinders.reindex(real_data.index).fillna(0)) assert (total_nonbinders.loc["HLA-A*02:01"] == 2.0).all(), total_nonbinders assert (total_nonbinders.loc["HLA-B*44:02"] == 1126).all(), total_nonbinders assert not total_nonbinders.isnull().any().any() ================================================ FILE: test/test_regression_target.py ================================================ """Tests for regression target conversion.""" from mhcflurry.regression_target import ( from_ic50, to_ic50, ) def test_regression_target_to_ic50(): assert to_ic50(0, max_ic50=500.0) == 500 assert to_ic50(1, max_ic50=500.0) == 1.0 def test_ic50_to_regression_target(): assert from_ic50(5000, max_ic50=5000.0) == 0 assert from_ic50(0, max_ic50=5000.0) == 1.0 ================================================ FILE: test/test_released_master_predictions.py ================================================ """ Regression tests for released model predictions. Expected values were generated from the TF/Keras implementation on the published model weights and are stored under test/data/. These tests verify that the current (PyTorch) code reproduces the same predictions. """ import json import os import numpy as np from mhcflurry import Class1AffinityPredictor from mhcflurry.downloads import get_path from mhcflurry.testing_utils import startup, cleanup def setup_module(): startup() def teardown_module(): cleanup() def _load_expected(name): data_dir = os.path.join(os.path.dirname(__file__), "data") with open(os.path.join(data_dir, name), "r") as f: return json.load(f) def test_allele_specific_affinity_predictions(): expected = _load_expected( "master_released_class1_affinity_predictions.json")["allele_specific"] predictor = Class1AffinityPredictor.load( get_path("models_class1", "models")) predictions = predictor.predict( peptides=expected["peptides"], alleles=expected["alleles"], ) np.testing.assert_allclose( predictions, np.array(expected["predictions"], dtype=np.float64), rtol=0.01, atol=0.0, ) def test_pan_allele_affinity_predictions(): expected = _load_expected( "master_released_class1_affinity_predictions.json")["pan_allele"] predictor = Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined")) predictions = predictor.predict( peptides=expected["peptides"], alleles=expected["alleles"], ) np.testing.assert_allclose( predictions, np.array(expected["predictions"], dtype=np.float64), rtol=0.01, atol=0.0, ) ================================================ FILE: test/test_released_predictors_on_hpv_dataset.py ================================================ """ Test accuracy on HPV benchmark used in MHCflurry Cell Systems 2018 paper. The study that generated this dataset has now been published (Bonsack et al 2019, DOI: 10.1158/2326-6066.CIR-18-0584), and the authors request that any work based on the HPV dataset cite this paper. """ import os import pandas import pytest from sklearn.metrics import roc_auc_score from mhcflurry import Class1AffinityPredictor from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup def data_path(name): ''' Return the absolute path to a file in the test/data directory. The name specified should be relative to test/data. ''' return os.path.join(os.path.dirname(__file__), "data", name) DF = pandas.read_csv(data_path("hpv_predictions.csv")) def setup_module(): global PREDICTORS startup() PREDICTORS = { 'allele-specific': Class1AffinityPredictor.load( get_path("models_class1", "models")), 'pan-allele': Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined")) } def teardown_module(): global PREDICTORS PREDICTORS = None cleanup() @pytest.fixture(scope="module") def predictors(): return PREDICTORS def test_on_hpv(predictors, df=DF): scores_df = [] for (name, predictor) in predictors.items(): print("Running", name) df[name] = predictor.predict(df.peptide, alleles=df.allele) for name in df.columns[8:]: for nm_cutoff in [2000, 5000, 50000]: labels = df["affinity"] < nm_cutoff auc = roc_auc_score(labels.values, -1 * df[name].values) scores_df.append((name, "auc-%dnM" % nm_cutoff, auc)) scores_df = pandas.DataFrame( scores_df, columns=["predictor", "metric", "score"]) scores_df = scores_df.pivot( index="metric", columns="predictor", values="score") print("Predictions") print(df) print("Scores") print(scores_df) mean_scores = scores_df.mean() assert mean_scores["allele-specific"] > mean_scores["netmhcpan4"] assert mean_scores["pan-allele"] > mean_scores["netmhcpan4"] ================================================ FILE: test/test_released_predictors_well_correlated.py ================================================ """ Test that pan-allele and allele-specific predictors are highly correlated. """ from __future__ import print_function import argparse import logging import sys import numpy import pandas import pytest from mhcflurry import Class1AffinityPredictor from mhcflurry.encodable_sequences import EncodableSequences from mhcflurry.downloads import get_path from mhcflurry.common import random_peptides from mhcflurry.testing_utils import cleanup, startup logger = logging.getLogger("matplotlib") logger.disabled = True def setup(): """Setup for running script directly (not via pytest).""" global PREDICTORS startup() PREDICTORS = { 'allele-specific': Class1AffinityPredictor.load(get_path("models_class1", "models")), 'pan-allele': Class1AffinityPredictor.load(get_path("models_class1_pan", "models.combined")), } @pytest.fixture(autouse=True) def setup_teardown(): """Setup and teardown for each test.""" global PREDICTORS startup() try: PREDICTORS = { 'allele-specific': Class1AffinityPredictor.load( get_path("models_class1", "models")), 'pan-allele': Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined"), max_models=2) } except Exception: PREDICTORS = None yield PREDICTORS = None cleanup() @pytest.fixture def predictors(): return PREDICTORS def test_correlation( predictors, alleles=None, num_peptides_per_length=1000, lengths=[8, 9, 10], debug=False, return_result=False): peptides = [] for length in lengths: peptides.extend(random_peptides(num_peptides_per_length, length)) # Cache encodings peptides = EncodableSequences.create(list(set(peptides))) if alleles is None: alleles = set.intersection(*[ set(predictor.supported_alleles) for predictor in predictors.values() ]) alleles = sorted(set(alleles)) df = pandas.DataFrame(index=peptides.sequences) results_df = [] for allele in alleles: for (name, predictor) in predictors.items(): df[name] = predictor.predict(peptides, allele=allele) correlation = numpy.corrcoef( numpy.log10(df["allele-specific"]), numpy.log10(df["pan-allele"]))[0, 1] results_df.append((allele, correlation)) print(len(results_df), len(alleles), *results_df[-1]) if correlation < 0.6: print("Warning: low correlation", allele) df["tightest"] = df.min(axis=1) print(df.sort_values("tightest").iloc[:, :-1]) if debug: import ipdb # pylint: disable=import-error ipdb.set_trace() del df["tightest"] results_df = pandas.DataFrame(results_df, columns=["allele", "correlation"]) print(results_df) print("Mean correlation", results_df.correlation.mean()) assert results_df.correlation.mean() > 0.65 if return_result: return results_df parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--alleles", nargs="+", default=None, help="Which alleles to test") if __name__ == '__main__': # If run directly from python, leave the user in a shell to explore results. startup() args = parser.parse_args(sys.argv[1:]) result = test_correlation(alleles=args.alleles, debug=True, return_result=True) # Leave in ipython import ipdb # pylint: disable=import-error ipdb.set_trace() ================================================ FILE: test/test_released_presentation_highscore_rows.py ================================================ """ Regression tests for released presentation model predictions. Expected values cover peptide+flank contexts where at least one allele has a high presentation score (>0.9), including low-scoring alleles for the same contexts. Values were generated from the TF/Keras implementation and are stored under test/data/. """ import os import warnings import numpy as np import pandas as pd from mhcflurry import Class1AffinityPredictor, Class1PresentationPredictor from mhcflurry.testing_utils import startup, cleanup warnings.filterwarnings( "ignore", message=r".*Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) EXPECTED_CSV = "master_released_class1_presentation_highscore_rows.csv.gz" BASE_COLUMNS = ["row_id", "peptide", "allele", "n_flank", "c_flank"] STRING_COLUMNS = ["pres_with_best_allele", "pres_without_best_allele"] HIGH_SCORE_COLUMNS = [ "pres_with_presentation_score", "pres_without_presentation_score", ] def setup_module(): startup() def teardown_module(): cleanup() def _load_expected(): data_dir = os.path.join(os.path.dirname(__file__), "data") return pd.read_csv( os.path.join(data_dir, EXPECTED_CSV), keep_default_na=False) def _atol_for_output(column): if "percentile" in column: return 1e-5 if "affinity" in column: return 0.1 return 1e-5 def test_expected_data_has_high_and_low_contexts(): """Sanity-check that the expected data spans a wide score range.""" expected_df = _load_expected() by_context = expected_df.groupby( ["peptide", "n_flank", "c_flank"], observed=True) context_max = by_context[HIGH_SCORE_COLUMNS].max() context_min = by_context[HIGH_SCORE_COLUMNS].min() assert ( (context_max["pres_with_presentation_score"] > 0.9) | (context_max["pres_without_presentation_score"] > 0.9) ).all() assert (context_min["pres_with_presentation_score"] < 0.2).all() assert (context_min["pres_without_presentation_score"] < 0.2).all() def test_presentation_predictions(): expected_df = _load_expected() affinity_predictor = Class1AffinityPredictor.load() presentation_predictor = Class1PresentationPredictor.load() peptides = expected_df["peptide"].tolist() alleles = expected_df["allele"].tolist() n_flanks = expected_df["n_flank"].tolist() c_flanks = expected_df["c_flank"].tolist() with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=r".*Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) aff_df = affinity_predictor.predict_to_dataframe( peptides=peptides, alleles=alleles, throw=False, include_percentile_ranks=True, include_confidence_intervals=True, centrality_measure="mean", model_kwargs={"batch_size": 4096}, ) np.testing.assert_array_equal( aff_df["peptide"].to_numpy(), expected_df["peptide"].to_numpy()) np.testing.assert_array_equal( aff_df["allele"].to_numpy(), expected_df["allele"].to_numpy()) sample_names = alleles allele_map = {allele: [allele] for allele in sorted(set(alleles))} with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=r".*Downcasting behavior in `replace` is deprecated.*", category=FutureWarning, ) pres_with_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=n_flanks, c_flanks=c_flanks, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") pres_without_df = presentation_predictor.predict( peptides=peptides, alleles=allele_map, sample_names=sample_names, n_flanks=None, c_flanks=None, include_affinity_percentile=True, verbose=0, throw=True, ).sort_values("peptide_num") predicted = expected_df[BASE_COLUMNS].copy() predicted["affinity_prediction"] = aff_df["prediction"].values predicted["affinity_prediction_low"] = aff_df.get("prediction_low", np.nan) predicted["affinity_prediction_high"] = aff_df.get("prediction_high", np.nan) predicted["affinity_prediction_percentile"] = aff_df.get( "prediction_percentile", np.nan) predicted["pres_with_affinity"] = pres_with_df["affinity"].values predicted["pres_with_best_allele"] = ( pres_with_df["best_allele"].astype(str).values) predicted["pres_with_affinity_percentile"] = ( pres_with_df["affinity_percentile"].values) predicted["processing_with_score"] = pres_with_df["processing_score"].values predicted["pres_with_processing_score"] = ( pres_with_df["processing_score"].values) predicted["pres_with_presentation_score"] = ( pres_with_df["presentation_score"].values) predicted["pres_with_presentation_percentile"] = ( pres_with_df["presentation_percentile"].values) predicted["pres_without_affinity"] = pres_without_df["affinity"].values predicted["pres_without_best_allele"] = ( pres_without_df["best_allele"].astype(str).values) predicted["pres_without_affinity_percentile"] = ( pres_without_df["affinity_percentile"].values) predicted["processing_without_score"] = ( pres_without_df["processing_score"].values) predicted["pres_without_processing_score"] = ( pres_without_df["processing_score"].values) predicted["pres_without_presentation_score"] = ( pres_without_df["presentation_score"].values) predicted["pres_without_presentation_percentile"] = ( pres_without_df["presentation_percentile"].values) for col in STRING_COLUMNS: np.testing.assert_array_equal( predicted[col].astype(str).to_numpy(), expected_df[col].astype(str).to_numpy(), ) numeric_columns = [ c for c in expected_df.columns if c not in BASE_COLUMNS + STRING_COLUMNS ] for col in numeric_columns: np.testing.assert_allclose( predicted[col].to_numpy(dtype=np.float64), expected_df[col].to_numpy(dtype=np.float64), rtol=0.0, atol=_atol_for_output(col), ) ================================================ FILE: test/test_selected_peptides_csv.py ================================================ """ Regression checks against selected-peptides.csv. Compares current MHCflurry predictions to values recorded from the previous public release, and checks NetMHCpan affinity is reasonably close. """ import os import numpy as np import pandas as pd import pytest from mhcflurry import Class1AffinityPredictor, Class1PresentationPredictor from mhcflurry.downloads import get_path from mhcflurry.testing_utils import startup, cleanup DATA_PATH = os.path.join( os.path.dirname(os.path.dirname(__file__)), "selected-peptides.csv", ) def _normalize_allele(allele): if allele is None or (isinstance(allele, float) and np.isnan(allele)): return allele allele = str(allele).strip() if allele.startswith("HLA-") or "-" in allele: return allele if "*" in allele: return f"HLA-{allele}" return allele @pytest.fixture(scope="module") def selected_peptides_predictions(): startup() try: df = pd.read_csv(DATA_PATH) peptides = df["mhcflurry_peptide"].fillna(df["peptide"]).tolist() alleles = [_normalize_allele(a) for a in df["mhcflurry_best_allele"].tolist()] sample_names = [f"row_{i}" for i in range(len(peptides))] alleles_dict = {name: [allele] for name, allele in zip(sample_names, alleles)} predictor = Class1PresentationPredictor.load( get_path("models_class1_presentation", "models") ) pred_df = predictor.predict( peptides=peptides, alleles=alleles_dict, sample_names=sample_names, n_flanks=None, c_flanks=None, verbose=0, ) pred_df = pred_df.sort_values("peptide_num").reset_index(drop=True) df = df.reset_index(drop=True) return df, pred_df finally: cleanup() def test_selected_peptides_mhcflurry_matches_csv(selected_peptides_predictions): df, pred_df = selected_peptides_predictions np.testing.assert_allclose( pred_df["affinity"].values, df["mhcflurry_affinity"].values.astype(float), rtol=0.01, atol=1e-6, ) np.testing.assert_allclose( pred_df["processing_score"].values, df["mhcflurry_processing_score"].values.astype(float), rtol=0.01, atol=1e-6, ) np.testing.assert_allclose( pred_df["presentation_score"].values, df["mhcflurry_presentation_score"].values.astype(float), rtol=0.01, atol=1e-6, ) np.testing.assert_allclose( pred_df["presentation_percentile"].values, df["mhcflurry_presentation_percentile"].values.astype(float), rtol=0.01, atol=0.1, ) def test_selected_peptides_netmhcpan_affinity_close(selected_peptides_predictions): df, _ = selected_peptides_predictions net_alleles = [_normalize_allele(a) for a in df["netmhcpan_best_allele_by_pr"].tolist()] mhc_alleles = [_normalize_allele(a) for a in df["mhcflurry_best_allele"].tolist()] mask = [ (net.startswith("HLA-A") or net.startswith("HLA-B")) and (mhc.startswith("HLA-A") or mhc.startswith("HLA-B")) for net, mhc in zip(net_alleles, mhc_alleles) ] df = df.loc[mask].reset_index(drop=True) peptides = df["mhcflurry_peptide"].fillna(df["peptide"]).tolist() alleles = [net for net, keep in zip(net_alleles, mask) if keep] startup() try: predictor = Class1AffinityPredictor.load( get_path("models_class1", "models") ) mhc_aff = predictor.predict(peptides=peptides, alleles=alleles).astype(float) finally: cleanup() net_aff = df["netmhcpan_aff"].values.astype(float) mhc_aff = np.clip(mhc_aff, 1e-6, None) net_aff = np.clip(net_aff, 1e-6, None) log_diff = np.abs(np.log10(mhc_aff) - np.log10(net_aff)) # Within 10x for HLA-A/B when comparing to NetMHCpan's best allele. assert (log_diff <= np.log10(10)).all() ================================================ FILE: test/test_speed.py ================================================ """ Profile prediction speed """ import time import cProfile import pstats import collections import argparse import sys import pytest import pandas from mhcflurry import Class1AffinityPredictor from mhcflurry.encodable_sequences import EncodableSequences from mhcflurry.common import random_peptides from mhcflurry.downloads import get_path from mhcflurry.testing_utils import cleanup, startup ALLELE_SPECIFIC_PREDICTOR = None PAN_ALLELE_PREDICTOR = None def setup_module(): global ALLELE_SPECIFIC_PREDICTOR, PAN_ALLELE_PREDICTOR startup() ALLELE_SPECIFIC_PREDICTOR = Class1AffinityPredictor.load( get_path("models_class1", "models")) PAN_ALLELE_PREDICTOR = Class1AffinityPredictor.load( get_path("models_class1_pan", "models.combined")) def teardown_module(): global ALLELE_SPECIFIC_PREDICTOR, PAN_ALLELE_PREDICTOR ALLELE_SPECIFIC_PREDICTOR = None PAN_ALLELE_PREDICTOR = None cleanup() DEFAULT_NUM_PREDICTIONS = 10000 def load_predictors(): return { 'allele_specific': Class1AffinityPredictor.load(get_path("models_class1", "models")), 'pan_allele': Class1AffinityPredictor.load(get_path("models_class1_pan", "models.combined")), } # Define a fixture to initialize and clean up predictors @pytest.fixture(scope="module") def predictors(): startup() predictors_dict = load_predictors() yield predictors_dict cleanup() @pytest.fixture(autouse=True) def init(): from . import initialize initialize() def test_speed_allele_specific(predictors, profile=False, num=DEFAULT_NUM_PREDICTIONS): starts = collections.OrderedDict() timings = collections.OrderedDict() profilers = collections.OrderedDict() predictor = predictors['allele_specific'] def start(name): starts[name] = time.time() if profile: profilers[name] = cProfile.Profile() profilers[name].enable() def end(name): timings[name] = time.time() - starts[name] if profile: profilers[name].disable() start("first") predictor.predict(["SIINFEKL"], allele="HLA-A*02:01") end("first") peptides = random_peptides(num) start("pred_%d" % num) predictor.predict(peptides, allele="HLA-A*02:01") end("pred_%d" % num) NUM2 = 10000 peptides = EncodableSequences.create(random_peptides(NUM2, length=13)) start("encode_blosum_%d" % NUM2) peptides.variable_length_to_fixed_length_vector_encoding("BLOSUM62") end("encode_blosum_%d" % NUM2) start("pred_already_encoded_%d" % NUM2) predictor.predict(peptides, allele="HLA-A*02:01") end("pred_already_encoded_%d" % NUM2) NUM_REPEATS = 100 start("pred_already_encoded_%d_%d_times" % (NUM2, NUM_REPEATS)) for _ in range(NUM_REPEATS): predictor.predict(peptides, allele="HLA-A*02:01") end("pred_already_encoded_%d_%d_times" % (NUM2, NUM_REPEATS)) print("SPEED BENCHMARK") print("Results:\n%s" % str(pandas.Series(timings))) if __name__ == '__main__': # Only return values if run directly from Python, since pytest complains # about return values from tests. return dict( (key, pstats.Stats(value)) for (key, value) in profilers.items()) def test_speed_pan_allele(predictors, profile=False, num=DEFAULT_NUM_PREDICTIONS): starts = collections.OrderedDict() timings = collections.OrderedDict() profilers = collections.OrderedDict() predictor = predictors['pan_allele'] def start(name): starts[name] = time.time() if profile: profilers[name] = cProfile.Profile() profilers[name].enable() def end(name): timings[name] = time.time() - starts[name] if profile: profilers[name].disable() start("first") predictor.predict(["SIINFEKL"], allele="HLA-A*02:01") end("first") peptides = random_peptides(num) start("pred_%d" % num) predictor.predict(peptides, allele="HLA-A*02:01") end("pred_%d" % num) print("SPEED BENCHMARK") print("Results:\n%s" % str(pandas.Series(timings))) if __name__ == '__main__': # Only return values if run directly from Python, since pytest complains # about return values from tests. return dict( (key, pstats.Stats(value)) for (key, value) in profilers.items()) parser = argparse.ArgumentParser(usage=__doc__) parser.add_argument( "--predictor", nargs="+", choices=["allele-specific", "pan-allele"], default=["allele-specific", "pan-allele"], help="Which predictors to run") parser.add_argument( "--num-predictions", type=int, default=DEFAULT_NUM_PREDICTIONS, help="Number of predictions to run") if __name__ == '__main__': # If run directly from python, do profiling and leave the user in a shell # to explore results. args = parser.parse_args(sys.argv[1:]) setup_module() predictors_dict = { "allele_specific": ALLELE_SPECIFIC_PREDICTOR, "pan_allele": PAN_ALLELE_PREDICTOR, } if "allele-specific" in args.predictor: print("Running allele-specific test") result = test_speed_allele_specific( predictors=predictors_dict, profile=True, num=args.num_predictions) result[ "pred_%d" % args.num_predictions ].sort_stats("cumtime").reverse_order().print_stats() if "pan-allele" in args.predictor: print("Running pan-allele test") result = test_speed_pan_allele( predictors=predictors_dict, profile=True, num=args.num_predictions) result[ "pred_%d" % args.num_predictions ].sort_stats("cumtime").reverse_order().print_stats() # Leave in ipython locals().update(result) import ipdb # pylint: disable=import-error ipdb.set_trace() ================================================ FILE: test/test_train_and_related_commands.py ================================================ """ Test train, calibrate percentile ranks, and model selection commands. """ import json import os import shutil import tempfile import subprocess from copy import deepcopy import pytest from numpy.testing import assert_array_less from mhcflurry import Class1AffinityPredictor from mhcflurry.downloads import get_path from .pytest_helpers import mhcflurry_cli from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() os.environ["CUDA_VISIBLE_DEVICES"] = "" HYPERPARAMETERS = [ { "n_models": 2, "max_epochs": 500, "patience": 5, "minibatch_size": 128, "early_stopping": True, "validation_split": 0.2, "random_negative_rate": 0.0, "random_negative_constant": 25, "peptide_amino_acid_encoding": "BLOSUM62", "use_embedding": False, "kmer_size": 15, "batch_normalization": False, "locally_connected_layers": [ { "filters": 8, "activation": "tanh", "kernel_size": 3 } ], "activation": "tanh", "output_activation": "sigmoid", "layer_sizes": [ 16 ], "random_negative_affinity_min": 20000.0, "random_negative_affinity_max": 50000.0, "dense_layer_l1_regularization": 0.001, "dropout_probability": 0.0 } ] def run_and_check(n_jobs=0): models_dir = tempfile.mkdtemp(prefix="mhcflurry-test-models") hyperparameters_filename = os.path.join( models_dir, "hyperparameters.yaml") with open(hyperparameters_filename, "w") as fd: json.dump(HYPERPARAMETERS, fd) args = mhcflurry_cli("mhcflurry-class1-train-allele-specific-models") + [ "--data", get_path("data_curated", "curated_training_data.affinity.csv.bz2"), "--hyperparameters", hyperparameters_filename, "--allele", "HLA-A*02:01", "HLA-A*03:01", "--out-models-dir", models_dir, "--num-jobs", str(n_jobs), ] print("Running with args: %s" % args) subprocess.check_call(args) # Calibrate percentile ranks args = mhcflurry_cli("mhcflurry-calibrate-percentile-ranks") + [ "--models-dir", models_dir, "--num-peptides-per-length", "10000", "--num-jobs", str(n_jobs), ] print("Running with args: %s" % args) subprocess.check_call(args) result = Class1AffinityPredictor.load(models_dir) predictions = result.predict( peptides=["SLYNTVATL"], alleles=["HLA-A*02:01"]) assert predictions.shape == (1,) assert_array_less(predictions, 1000) df = result.predict_to_dataframe( peptides=["SLYNTVATL"], alleles=["HLA-A*02:01"]) print(df) assert "prediction_percentile" in df.columns print("Deleting: %s" % models_dir) shutil.rmtree(models_dir) def run_and_check_with_model_selection(n_jobs=1): models_dir1 = tempfile.mkdtemp(prefix="mhcflurry-test-models") hyperparameters_filename = os.path.join( models_dir1, "hyperparameters.yaml") # Include one architecture that has max_epochs = 0. We check that it never # gets selected in model selection. hyperparameters = [ deepcopy(HYPERPARAMETERS[0]), deepcopy(HYPERPARAMETERS[0]), ] hyperparameters[-1]["max_epochs"] = 0 with open(hyperparameters_filename, "w") as fd: json.dump(hyperparameters, fd) args = mhcflurry_cli("mhcflurry-class1-train-allele-specific-models") + [ "--data", get_path("data_curated", "curated_training_data.affinity.csv.bz2"), "--hyperparameters", hyperparameters_filename, "--allele", "HLA-A*02:01", "HLA-A*03:01", "--out-models-dir", models_dir1, "--num-jobs", str(n_jobs), "--held-out-fraction-reciprocal", "10", "--n-models", "1", ] print("Running with args: %s" % args) subprocess.check_call(args) result = Class1AffinityPredictor.load(models_dir1) assert len(result.neural_networks) == 4 models_dir2 = tempfile.mkdtemp(prefix="mhcflurry-test-models") args = mhcflurry_cli("mhcflurry-class1-select-allele-specific-models") + [ "--data", get_path("data_curated", "curated_training_data.affinity.csv.bz2"), "--exclude-data", models_dir1 + "/train_data.csv.bz2", "--out-models-dir", models_dir2, "--models-dir", models_dir1, "--num-jobs", str(n_jobs), "--mse-max-models", "1", "--unselected-accuracy-scorer", "combined:mass-spec,mse", "--unselected-accuracy-percentile-threshold", "95", ] print("Running with args: %s" % args) subprocess.check_call(args) result = Class1AffinityPredictor.load(models_dir2) assert len(result.neural_networks) == 2 assert ( len(result.allele_to_allele_specific_models["HLA-A*02:01"]) == 1) assert ( len(result.allele_to_allele_specific_models["HLA-A*03:01"]) == 1) assert ( result.allele_to_allele_specific_models["HLA-A*02:01"][0].hyperparameters["max_epochs"] == 500) assert ( result.allele_to_allele_specific_models["HLA-A*03:01"][ 0].hyperparameters["max_epochs"] == 500) print("Deleting: %s" % models_dir1) print("Deleting: %s" % models_dir2) shutil.rmtree(models_dir1) def test_run_parallel(): run_and_check(n_jobs=2) run_and_check_with_model_selection(n_jobs=2) def test_run_serial(): run_and_check(n_jobs=0) run_and_check_with_model_selection(n_jobs=0) ================================================ FILE: test/test_train_pan_allele_models_command.py ================================================ """ Tests for training and predicting using Class1 pan-allele models. """ import json import os import shutil import tempfile import subprocess import sys import pandas import pytest from numpy.testing import assert_array_less from mhcflurry import Class1AffinityPredictor from mhcflurry.downloads import get_path from .pytest_helpers import mhcflurry_cli from mhcflurry.testing_utils import cleanup, startup pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() os.environ["CUDA_VISIBLE_DEVICES"] = "" os.environ["MHCFLURRY_CLUSTER_WORKER_COMMAND"] = ( f"{sys.executable} -m mhcflurry.cluster_worker_entry_point" ) HYPERPARAMETERS_LIST = [ { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [64], 'learning_rate': None, 'locally_connected_layers': [], 'loss': 'custom:mse_with_inequalities', 'max_epochs': 0, # never selected 'minibatch_size': 256, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', 'patience': 10, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'peptide_encoding': { 'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, 'vector_encoding_name': 'BLOSUM62', }, 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 20000.0, 'random_negative_constant': 25, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 0.2, 'train_data': {"pretrain": False}, 'validation_split': 0.1, 'data_dependent_initialization_method': "lsuv", }, { 'activation': 'tanh', 'allele_dense_layer_sizes': [], 'batch_normalization': False, 'dense_layer_l1_regularization': 0.0, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'early_stopping': True, 'init': 'glorot_uniform', 'layer_sizes': [32], 'learning_rate': None, 'locally_connected_layers': [], 'loss': 'custom:mse_with_inequalities', 'max_epochs': 5, 'minibatch_size': 256, 'optimizer': 'rmsprop', 'output_activation': 'sigmoid', 'patience': 5, 'peptide_allele_merge_activation': '', 'peptide_allele_merge_method': 'concatenate', 'peptide_amino_acid_encoding': 'BLOSUM62', 'peptide_dense_layer_sizes': [], 'peptide_encoding': { 'alignment_method': 'left_pad_centered_right_pad', 'max_length': 15, 'vector_encoding_name': 'BLOSUM62', }, 'random_negative_affinity_max': 50000.0, 'random_negative_affinity_min': 20000.0, 'random_negative_constant': 25, 'random_negative_distribution_smoothing': 0.0, 'random_negative_match_distribution': True, 'random_negative_rate': 0.2, 'train_data': { "pretrain": True, 'pretrain_peptides_per_step': 4, 'pretrain_max_epochs': 2, 'pretrain_max_val_loss': 0.2, }, 'validation_split': 0.1, }, ] PRETRAIN_DATA = """ ,BoLA-6*13:01,Eqca-1*01:01,H-2-Db,H-2-Dd,H-2-Kb,H-2-Kd,H-2-Kk,H-2-Ld,HLA-A*01:01,HLA-A*02:01,HLA-A*02:02,HLA-A*02:03,HLA-A*02:05,HLA-A*02:06,HLA-A*02:07,HLA-A*02:11,HLA-A*02:12,HLA-A*02:16,HLA-A*02:17,HLA-A*02:19,HLA-A*02:50,HLA-A*03:01,HLA-A*11:01,HLA-A*23:01,HLA-A*24:02,HLA-A*24:03,HLA-A*25:01,HLA-A*26:01,HLA-A*26:02,HLA-A*26:03,HLA-A*29:02,HLA-A*30:01,HLA-A*30:02,HLA-A*31:01,HLA-A*32:01,HLA-A*33:01,HLA-A*66:01,HLA-A*68:01,HLA-A*68:02,HLA-A*68:23,HLA-A*69:01,HLA-A*80:01,HLA-B*07:01,HLA-B*07:02,HLA-B*08:01,HLA-B*08:02,HLA-B*08:03,HLA-B*14:02,HLA-B*15:01,HLA-B*15:02,HLA-B*15:03,HLA-B*15:09,HLA-B*15:17,HLA-B*18:01,HLA-B*27:03,HLA-B*27:05,HLA-B*35:01,HLA-B*35:03,HLA-B*38:01,HLA-B*39:01,HLA-B*40:01,HLA-B*40:02,HLA-B*42:01,HLA-B*44:02,HLA-B*44:03,HLA-B*45:01,HLA-B*46:01,HLA-B*48:01,HLA-B*51:01,HLA-B*53:01,HLA-B*54:01,HLA-B*57:01,HLA-B*58:01,HLA-B*83:01,HLA-C*03:03,HLA-C*05:01,HLA-C*06:02,HLA-C*07:02,HLA-C*12:03,HLA-C*15:02,Mamu-A*01:01,Mamu-A*02:01,Mamu-A*02:0102,Mamu-A*07:01,Mamu-A*11:01,Mamu-A*22:01,Mamu-A*26:01,Mamu-B*01:01,Mamu-B*03:01,Mamu-B*08:01,Mamu-B*10:01,Mamu-B*17:01,Mamu-B*17:04,Mamu-B*39:01,Mamu-B*52:01,Mamu-B*83:01,Patr-A*01:01,Patr-A*04:01,Patr-A*07:01,Patr-A*09:01,Patr-B*01:01,Patr-B*13:01,Patr-B*24:01 VCCIYWDISYCTCQ,44182.5,42134.1,44152.5,42887.9,30441.3,38592.9,41962.6,42822.6,25616.4,22063.8,35987.9,36692.9,40859.1,41072.7,38672.0,36913.2,40334.9,36647.9,36738.3,43307.7,40456.6,29511.6,31662.5,42630.7,40073.5,42494.2,36130.4,39625.4,39909.6,38751.8,39681.3,36767.7,36100.5,29302.9,46286.3,26136.6,37672.1,34302.1,37976.5,37864.7,31506.7,32281.1,40357.5,35316.3,29220.1,35346.3,34818.9,41566.6,31951.6,38975.1,40825.3,44917.4,43148.3,34119.6,37508.6,37930.1,29881.9,42463.0,39552.8,36529.9,36587.0,35603.6,34376.4,37498.8,42253.7,37676.9,30077.2,39384.4,33218.6,36576.7,38777.8,29806.4,28986.1,34746.3,39748.3,38600.2,40338.9,39364.9,41546.0,39574.0,42059.6,46195.4,41975.4,44810.3,44629.7,42749.5,43288.1,46931.2,39014.4,39893.3,41316.9,41923.5,41918.2,42723.5,38612.0,39772.1,42175.5,38879.7,41908.9,38287.3,41522.6,39666.8,43396.1 CQFVANRCHQKVFRL,39146.5,39452.0,9484.7,39116.9,13002.1,27669.4,30010.9,37655.0,31624.9,12478.3,28164.5,30813.8,39656.3,24968.0,33852.1,30953.1,31049.5,32169.5,33800.9,36730.1,37233.0,17696.0,31413.6,26134.9,31618.0,40342.3,35511.9,38680.3,38605.3,37388.9,38012.0,36161.2,36449.0,23276.0,39330.3,38518.9,37164.7,36824.9,32292.1,38968.4,31223.9,31704.9,35919.0,32976.9,28484.1,33958.6,32564.3,37876.1,24948.2,36401.9,34953.6,36509.9,39256.5,28768.4,24109.5,10714.6,40389.5,43803.1,32800.9,26891.8,27654.3,23972.8,35700.0,32613.3,26999.3,28714.6,29744.2,33689.4,34232.0,32967.2,37510.6,32342.9,30111.8,30403.3,38445.6,38237.8,37861.1,37985.3,39969.8,39538.2,38738.5,42978.4,39435.6,41359.5,16024.0,39753.9,41649.9,39454.1,32748.2,27406.8,38950.9,30001.9,27833.5,32655.5,27208.1,37915.8,39650.7,37642.0,37611.6,32313.3,36946.5,33275.5,39516.1 YNWDWAQCSGI,35747.3,29140.6,30472.7,33365.7,1476.4,4321.6,10641.6,32903.8,20380.9,4780.3,12919.5,17551.4,22162.1,13392.5,16314.1,7991.3,23261.7,6525.2,15695.2,27362.5,24716.2,28711.7,30898.9,23808.7,25642.9,39880.0,30787.6,33162.7,33052.3,33146.9,21397.6,36392.2,26063.9,28349.8,40062.1,26596.2,32116.4,31183.4,12831.5,35000.6,17873.4,30601.4,30336.8,24523.8,18060.1,28888.9,26060.1,34612.6,14003.0,32129.0,31080.5,35535.7,32822.4,24605.3,20247.7,8311.8,31112.8,40916.8,29408.5,29217.6,31888.1,25260.8,27729.2,28121.0,36758.1,32991.8,25414.3,32947.6,6063.8,33594.4,20760.6,28579.3,25034.7,23129.8,35563.0,30887.8,31750.0,27229.8,33731.0,32884.0,5407.3,4834.1,35326.9,25099.6,3516.2,32488.6,32741.2,40440.2,20202.0,21406.5,31991.4,22185.6,24853.2,27460.7,5335.4,15766.5,34520.1,33168.8,32759.1,10026.4,3042.1,27291.3,17873.3 APEPVMMQGCDN,44794.5,42064.7,36712.6,42567.1,31312.9,25512.2,38772.9,32376.8,31503.8,28373.3,45393.5,41842.1,43223.5,45234.2,39579.4,40729.5,41441.1,38673.3,37791.6,43381.7,42993.3,34470.7,37888.9,43650.8,41233.2,42212.6,34542.5,37432.8,37800.1,36891.9,40060.0,40205.7,35137.4,33173.1,46841.4,41392.7,36465.8,37628.0,41854.1,39959.8,30890.1,32541.7,34548.9,20953.5,34911.7,37295.7,35305.7,37963.4,35794.0,39768.6,41915.4,44501.8,43077.3,34135.5,36039.6,36968.8,30841.4,40495.2,36776.4,34237.8,33980.3,34729.3,36210.8,34585.1,41600.5,36181.2,28528.2,38973.9,32572.4,37361.4,35637.2,31359.7,31602.5,24366.2,39960.9,36509.1,43038.1,41238.5,41575.8,37826.4,39195.7,45378.3,42078.6,44831.9,41156.4,39194.0,44144.7,46339.5,39007.9,40269.1,40479.5,41508.5,41613.3,42798.9,38927.9,37961.6,43384.7,40127.5,43129.2,38632.1,42726.0,31364.8,43992.3 SIQNDHQFCNE,41247.1,36778.2,31563.6,39917.4,10018.5,26242.4,31501.4,36002.1,28366.2,23209.0,28116.8,27058.3,33981.8,23981.3,33667.0,30816.8,36286.8,30787.3,33485.0,40625.7,32634.4,11132.3,2621.0,37879.7,31918.2,41386.8,30477.2,29618.2,30679.9,31896.3,36876.3,29016.4,21555.8,16172.6,35160.7,22537.3,32996.3,21159.4,27137.4,29441.1,29994.0,32416.6,33022.6,31767.9,19129.5,25393.9,30423.1,37177.4,17995.5,32992.6,33549.6,39935.4,43477.4,33433.2,34472.0,34017.7,41050.6,44500.3,37744.9,35526.9,34872.2,33849.1,26222.6,32226.4,42709.1,36014.3,26019.6,38845.3,32771.8,37961.9,40955.2,21375.2,28595.7,30962.6,38296.9,37179.4,40323.2,38384.1,39617.4,38508.9,33177.7,25294.9,37478.4,42231.1,30983.3,33685.5,39692.9,45876.2,32965.1,34191.3,33783.1,36999.0,37443.1,38511.6,21638.2,31981.6,35943.1,30735.1,37418.3,19187.4,35391.0,36495.6,37896.1 WAVYMCISAPL,26021.0,16088.8,5262.2,11881.8,3628.8,10658.3,7398.9,18827.6,24553.0,6062.3,3725.9,6626.5,12806.4,1919.8,21857.7,13408.4,16709.7,11225.4,21476.2,33110.7,10213.0,20997.3,25916.5,17285.9,14772.3,39728.6,14817.4,13098.4,17583.7,18495.2,8523.0,24610.3,16200.6,12117.8,29147.3,12013.4,21713.9,5327.3,340.7,5501.6,10100.1,31368.4,13169.4,2241.8,1718.9,9124.3,13725.7,15124.6,2411.5,15438.8,6023.0,13412.1,11652.5,16573.2,10559.6,4402.9,1293.3,19356.7,5939.7,4715.8,12976.0,10061.8,8468.5,8280.0,17922.2,10362.6,6628.0,11632.8,8235.4,9815.9,4647.5,14010.5,7109.3,5989.7,4340.4,5718.2,22291.9,12581.6,19864.1,6913.5,2876.7,249.7,23174.7,7008.9,3938.4,15144.1,22744.4,14198.8,9360.4,6219.5,16554.9,16622.6,13488.7,13740.1,5481.3,11074.1,21412.3,23009.7,23098.3,7874.1,3966.5,11364.2,20621.6 SSTFMWVLHCHKNG,44865.8,42298.8,38909.9,42717.9,25716.2,39557.0,40608.0,43890.1,30252.2,15498.1,40268.4,35903.4,41637.4,43457.6,35753.7,34556.2,41097.6,32160.7,34584.8,43866.0,41238.7,26830.0,28742.7,42919.2,39493.0,42250.6,34514.1,37210.7,37497.0,36667.9,38414.4,31386.2,35609.3,27734.9,44761.2,32154.9,36404.8,21535.6,33460.4,34847.3,31448.6,33166.9,39703.3,37050.6,33174.4,36349.1,35093.6,40923.2,30340.5,38489.6,39269.6,43277.0,40119.8,34672.8,37568.4,38813.7,42587.8,45513.4,39465.4,36470.4,36334.7,34517.7,36501.0,36759.8,39608.8,37140.1,28997.9,39201.9,34168.3,40416.3,31511.1,23702.6,24459.9,37410.4,40441.5,39727.9,43281.4,42200.1,41301.8,41022.1,38716.0,38079.6,41414.7,44625.9,44299.1,42349.6,44097.4,46688.8,40452.1,40547.5,40968.6,41460.3,41161.2,41760.6,36773.2,37735.2,43469.9,41742.1,42940.2,39345.1,40750.3,38906.1,43829.8 NDYRIIHVH,29750.7,7903.2,39663.4,26269.3,26520.4,17741.9,6530.7,23519.5,16783.4,24907.1,38796.0,34045.0,37236.8,32764.2,33910.4,31876.9,36690.2,26640.4,34771.6,37988.3,38108.1,22606.4,22956.5,33713.4,23577.7,33039.6,28233.4,29657.2,20610.8,22948.6,22252.9,18901.8,9758.7,12195.3,32876.3,13544.5,27628.0,11451.6,26564.7,17732.1,22462.4,12031.0,28807.3,28633.4,20666.2,28277.9,23257.5,25003.9,11971.8,23476.4,17776.0,38533.8,33476.2,984.9,22771.0,23104.9,15921.4,31338.4,27375.9,25519.2,21732.5,10818.2,26628.9,18322.9,12300.8,17540.1,22481.6,25575.0,31230.6,28830.2,23186.7,22908.0,22448.4,12387.8,35440.0,29550.4,22569.4,22414.0,34456.6,27987.0,33094.3,26622.5,21300.3,29112.5,17602.3,17604.6,26471.7,14319.8,26587.4,24828.2,23827.5,38974.0,37958.0,27690.5,24379.9,14117.3,26238.3,16518.9,32692.1,23436.5,29298.5,21037.6,9746.2 NEVLWRNRILEIIN,43661.7,42466.3,41698.3,43109.4,35534.9,38811.3,33366.6,43465.4,29895.3,32658.2,42471.5,39083.2,42304.8,41013.3,40566.9,39243.5,41674.1,38714.2,38754.7,43677.4,42242.6,33804.1,37618.9,43068.1,39876.2,42639.4,35534.9,38686.6,39092.5,37827.9,41863.4,39871.7,40872.5,34461.3,46553.1,37443.4,36962.9,32868.0,42030.3,38619.2,31571.3,33145.8,40389.2,35203.0,32552.2,37443.5,36114.8,40695.8,33422.3,38902.1,40563.2,44825.5,44491.1,21154.4,37869.9,38601.7,41773.6,44984.0,39218.1,35042.4,28128.9,27476.4,37155.8,31523.1,30333.4,30040.7,30515.9,34905.5,36266.3,41366.6,41046.5,34295.9,31764.1,30961.9,40911.5,41612.8,43358.8,42536.8,41822.6,42428.9,45258.0,47372.9,39653.2,44025.0,39708.5,41722.2,44182.7,47429.4,39704.9,40816.4,40724.4,43114.5,44056.6,43817.1,40210.9,40351.9,43651.0,41203.5,43747.3,40571.0,43173.7,40487.6,43099.8 TDPNYHTHFSVT,44066.4,36674.1,32271.2,38109.4,21052.2,36108.5,36135.4,41980.7,30404.2,22295.5,41215.5,34035.9,41445.4,39809.0,36623.4,37166.7,39817.9,34899.7,34782.4,42846.6,41618.2,35189.1,37225.1,41790.5,39337.7,41729.1,35779.5,38304.8,38869.4,36969.1,41858.0,39576.0,39532.8,35183.1,45296.5,40505.4,36365.8,35874.3,36030.8,39184.3,30853.7,32919.7,38420.4,33262.2,27467.2,33073.5,34039.6,41103.6,32110.1,38958.8,39464.1,42709.4,44457.7,34432.4,33556.3,33590.2,40714.1,44637.0,38843.7,36048.2,28612.5,26040.4,30697.6,36461.0,39668.4,35404.3,29492.7,33964.7,32276.1,43412.5,29774.3,32512.1,32916.2,31862.0,39917.3,39059.0,42346.8,41351.6,40547.8,39095.9,33910.1,45607.0,41771.1,43517.8,41057.9,41285.8,43851.4,46378.9,40046.9,39228.6,39703.3,41008.7,41230.3,41780.3,38014.6,40518.1,43804.4,41473.9,42605.4,37678.0,39528.8,37422.5,39159.1 HQWFQCVAMQSY,27487.0,30700.5,37273.9,35376.0,29078.2,27724.0,20597.0,30480.4,17310.7,16021.7,37523.0,33961.1,40969.4,19968.6,34875.0,31825.6,37331.1,31175.8,29412.7,41535.5,40642.4,12424.8,23533.8,35308.2,33245.6,39775.3,22472.1,17719.2,19849.4,24844.8,7505.9,31364.7,4307.2,16799.1,27251.2,27379.8,25184.4,23448.3,35342.1,32138.7,29292.0,19190.3,30915.6,30562.0,31545.7,35961.0,30709.6,30188.3,499.8,14875.3,5731.1,34921.0,31566.9,5655.9,8402.1,1542.5,14847.3,32801.6,25414.0,23775.9,29195.9,18812.6,35386.2,4887.0,7298.3,19041.1,13830.1,30353.9,34462.2,23459.1,27710.9,18963.8,23748.8,14531.7,35047.3,36914.8,25988.6,29764.9,29475.3,39036.2,39794.4,29819.9,26826.0,32217.7,10013.9,26916.3,34912.0,37665.9,24758.7,17295.9,28531.8,24764.5,16139.5,30351.5,20914.8,27508.2,32628.3,28530.1,26332.1,16659.9,32297.3,30264.2,32507.1 IWQVYIQCGTEM,41061.7,37961.5,25302.7,38762.8,17765.9,10623.3,31859.8,31245.1,31023.4,25442.0,30489.9,35963.1,37256.7,35425.5,37360.4,37226.3,37086.9,36788.1,35657.8,41540.2,35619.8,32962.4,37114.7,20325.1,20101.6,32000.1,32835.6,34734.3,34929.6,33865.9,29462.0,35562.1,26925.2,30392.0,43469.1,35884.5,34001.2,36984.6,33796.5,39019.3,29735.5,32695.2,33217.4,16898.4,22006.2,33778.4,34261.2,38876.7,12971.4,29024.0,24142.0,39208.5,36860.8,23883.6,30132.9,22085.8,22174.9,36579.1,34827.9,33265.2,26867.1,27697.8,30006.4,26056.1,35488.9,31119.9,22043.6,33850.8,22722.1,23271.5,39360.0,25160.2,26966.6,22818.3,34267.7,30985.1,30357.2,27903.9,30255.5,30990.4,28298.9,30412.8,38456.8,39932.5,35373.0,34095.3,39746.8,44862.0,21759.5,21611.7,35509.8,40609.4,40356.5,36262.1,30415.4,38309.5,40677.9,32454.1,34949.9,8240.3,38245.3,27499.7,38969.8 WNPMPYADKDN,43793.1,41967.1,40595.5,38058.9,26509.5,29836.7,35333.9,43560.0,31045.3,24804.1,41242.6,39742.3,40936.8,42471.1,39179.9,38693.2,41403.3,37812.8,38097.8,43532.7,40502.2,34092.6,36870.7,42033.7,29201.6,41949.2,32912.4,35608.2,36362.6,32689.5,35304.0,39432.3,27060.9,33299.5,46315.2,38181.4,35417.9,33307.1,39797.7,37844.6,31558.8,32729.9,38648.1,34952.4,31312.2,34866.6,35333.3,39596.8,24432.7,37399.1,34958.8,36498.7,43456.6,37726.4,30345.3,29272.5,40734.0,44974.5,37794.7,36123.6,34346.3,31343.8,35849.8,37541.7,43371.3,38712.9,27773.2,38014.3,34428.3,43181.5,43353.8,25804.8,30897.2,38150.3,39755.9,39856.5,42141.5,40976.5,40968.5,41109.5,21640.6,36394.9,38594.2,43406.0,41654.3,40884.6,43121.2,46926.9,33685.5,38138.6,39382.6,36892.5,38091.4,41887.0,30276.8,30591.1,39255.5,39942.9,42992.5,34800.4,35997.4,39474.3,42450.7 DYLTMYNLAGHYMF,41216.3,39319.5,37516.7,38946.9,24901.2,18489.0,36248.8,41018.7,29045.8,30236.2,40621.7,40522.9,42015.7,40969.5,38931.0,38020.7,41315.7,36615.3,36461.1,43425.3,42086.8,32686.2,34084.9,4938.4,5634.0,22583.4,31068.1,33487.8,34530.0,34429.4,14893.3,38319.0,33635.5,29912.6,38086.4,18012.7,34384.5,28858.3,36132.1,31816.5,29143.5,30528.5,37580.3,35468.6,23500.5,33626.4,31227.5,37015.5,30141.8,37652.6,36980.8,41228.8,37043.9,11156.5,34073.5,32101.7,21944.1,35367.7,32575.7,31466.1,33729.3,30785.8,33940.0,34077.9,32036.2,36565.2,27349.4,37480.3,30117.8,34138.7,38034.4,28652.9,30980.1,31970.7,38401.2,39857.3,39077.2,35957.9,36971.2,40692.9,38297.0,42915.1,38921.3,38533.3,41037.2,38777.0,40785.5,42972.7,39144.8,37696.9,39104.8,37455.3,37600.0,40946.1,32211.7,37757.2,39846.1,37276.1,31433.1,26746.3,39308.8,32511.1,41919.2 CPGSCSNVEWFTSA,43052.5,41000.2,37276.6,40353.2,30839.2,33841.4,39836.6,37541.9,26747.9,19091.0,40729.1,37009.5,41693.5,38949.3,36880.0,36074.5,39750.1,34468.0,36268.0,41459.3,41595.7,31913.6,36962.6,42242.1,38673.8,41821.9,35358.2,38802.6,38705.1,38263.5,41344.8,39993.5,35732.9,34531.4,45588.8,40921.0,36880.4,38059.4,36557.1,39666.9,29659.7,32871.4,33048.7,13785.4,11061.9,25479.4,26941.0,40189.6,33952.7,38843.5,39758.0,44166.2,44126.5,32801.7,37107.9,36678.8,18676.0,36214.4,38034.0,34374.1,35037.7,33855.5,18579.0,37470.3,40714.5,26607.2,29370.0,38876.6,30730.1,26538.1,5463.4,33028.9,32508.0,28632.8,40303.0,39843.1,42588.1,41675.9,41191.6,40928.5,43912.4,47001.9,42041.0,44321.2,43281.3,37725.2,43718.0,46322.0,41703.2,40945.5,40231.8,42291.5,41186.2,38908.2,37563.7,41088.1,40616.9,39180.0,39582.2,37770.9,41653.1,32565.9,43315.5 TWLEAGSCNKFWCHY,43256.5,39229.2,31846.7,41249.1,22922.0,35472.1,37847.5,39274.3,16725.9,27082.6,43111.9,39658.3,42651.4,38557.6,39526.6,38566.8,40368.5,37618.1,37232.6,43056.4,42567.0,19631.5,29886.2,16257.7,27592.6,35667.9,34360.5,34792.0,36311.3,35826.1,8614.4,36054.8,17277.1,27552.0,41202.4,32120.8,35727.7,35292.4,40278.2,37839.7,31664.9,26671.4,39115.9,37688.0,34587.6,36326.4,36058.9,41403.8,16078.0,31715.7,31813.5,45128.2,40035.7,22478.7,35077.4,31707.1,28745.7,39056.4,39072.2,36471.8,36018.2,34942.6,37269.5,32201.6,29156.5,34952.9,29944.8,40025.6,34986.7,32836.4,38958.8,30948.0,30916.8,30316.3,40416.7,40818.4,32363.8,34988.8,37628.4,41676.8,43469.2,44015.7,41286.8,45040.6,42839.7,37323.5,42974.6,44799.3,39990.6,40266.6,39825.9,40864.0,41757.8,29762.6,32694.0,26427.3,41433.5,31461.3,37996.6,20136.4,41865.3,38221.3,43083.3 EEATDSRNYMRRL,43309.9,39975.1,36980.8,40770.0,26845.4,31663.4,18520.3,40400.6,32317.1,28377.1,38169.4,35509.3,39890.3,41532.5,38309.8,38115.8,40846.9,36438.1,37093.9,42930.5,39579.2,34478.8,37658.8,40705.5,38297.7,41800.1,33067.9,33014.0,32985.0,34258.1,41326.6,38227.3,39134.9,32951.4,42209.4,41582.2,33913.4,37663.4,33216.3,38646.4,30554.2,33276.9,33973.5,30058.9,25584.4,33144.6,32602.9,38320.0,33672.5,39174.1,40919.7,42064.5,40530.9,28407.8,33487.5,32993.4,42157.0,44495.1,34922.9,31182.7,21642.8,18956.3,29151.9,23436.5,17335.5,28156.7,30184.3,19678.7,31271.4,39334.2,41414.2,31418.8,31800.9,16677.8,38726.9,35946.1,37806.4,36625.3,40075.2,36961.7,37460.0,40782.8,38173.0,42921.7,31447.5,38095.7,42302.2,46969.4,34483.4,35123.9,35823.2,43203.7,44314.5,30994.0,34785.4,35043.5,42765.9,39533.0,35406.3,35756.6,39472.2,30912.6,39842.7 MSGDACND,39531.0,39404.3,42689.8,36631.0,24512.5,31873.8,22499.5,35348.8,27067.7,27959.4,36059.9,36380.6,40222.8,39885.0,35657.4,36346.6,37150.1,33696.8,35618.9,39815.2,37296.2,30732.1,30971.3,38186.1,33521.8,38861.9,32692.8,37045.0,37182.4,35007.3,35006.2,30627.5,21765.5,28733.2,38896.4,31030.8,34166.9,25154.9,37154.9,33131.6,26235.8,28117.1,32986.3,35470.5,26935.0,28876.1,27638.4,38167.8,21090.3,31994.7,32821.9,38174.9,26573.1,31407.1,35055.4,35544.4,35526.5,41595.8,36912.0,35058.5,32903.2,31917.8,28423.1,34514.3,39786.8,33805.7,23372.3,35819.7,25962.6,35199.4,35434.9,20873.3,10865.1,30611.6,26672.0,16901.8,32916.3,33854.9,34604.6,15853.9,22614.9,36981.8,36604.8,42344.9,37295.1,38385.0,39678.6,45767.9,36136.8,38201.6,35585.8,29834.5,26730.9,29939.4,17543.7,24477.3,36685.4,33534.9,40217.3,34840.3,25639.9,33476.0,38813.7 """.strip() def run_and_check(n_jobs=0, delete=True, additional_args=[]): models_dir = tempfile.mkdtemp(prefix="mhcflurry-test-models") hyperparameters_filename = os.path.join( models_dir, "hyperparameters.yaml") with open(hyperparameters_filename, "w") as fd: json.dump(HYPERPARAMETERS_LIST, fd) pretrain_data_filename = os.path.join( models_dir, "pretrain_data.csv") with open(pretrain_data_filename, "w") as fd: fd.write(PRETRAIN_DATA) fd.write("\n") data_df = pandas.read_csv( get_path("data_curated", "curated_training_data.affinity.csv.bz2")) selected_data_df = data_df.sample(frac=0.1) selected_data_df.to_csv( os.path.join(models_dir, "_train_data.csv"), index=False) args = mhcflurry_cli("mhcflurry-class1-train-pan-allele-models") + [ "--data", os.path.join(models_dir, "_train_data.csv"), "--allele-sequences", get_path("allele_sequences", "allele_sequences.csv"), "--pretrain-data", pretrain_data_filename, "--hyperparameters", hyperparameters_filename, "--out-models-dir", models_dir, "--num-jobs", str(n_jobs), "--num-folds", "2", "--verbosity", "1", ] + additional_args print("Running with args: %s" % args) subprocess.check_call(args) # Run model selection models_dir_selected = tempfile.mkdtemp( prefix="mhcflurry-test-models-selected") args = mhcflurry_cli("mhcflurry-class1-select-pan-allele-models") + [ "--data", os.path.join(models_dir, "train_data.csv.bz2"), "--models-dir", models_dir, "--out-models-dir", models_dir_selected, "--max-models", "1", "--num-jobs", str(n_jobs), ] + additional_args print("Running with args: %s" % args) subprocess.check_call(args) result = Class1AffinityPredictor.load( models_dir_selected, optimization_level=0) assert len(result.neural_networks) == 2 predictions = result.predict(peptides=["SLYNTVATL"], alleles=["HLA-A*02:01"]) assert predictions.shape == (1,) assert_array_less(predictions, 2000) if delete: print("Deleting: %s" % models_dir) shutil.rmtree(models_dir) shutil.rmtree(models_dir_selected) def test_run_parallel(): run_and_check(n_jobs=1) run_and_check(n_jobs=2) def test_run_serial(): run_and_check(n_jobs=0) def test_run_cluster_parallelism(): run_and_check(n_jobs=0, additional_args=[ '--cluster-parallelism', '--cluster-results-workdir', '/tmp/' ]) if __name__ == "__main__": # run_and_check(n_jobs=0, delete=False) test_run_cluster_parallelism() ================================================ FILE: test/test_train_processing_models_command.py ================================================ """ Test processing train and model selection commands. """ import json import os import shutil import tempfile import subprocess import re import pytest from sklearn.metrics import roc_auc_score import pandas from mhcflurry.class1_processing_predictor import Class1ProcessingPredictor from mhcflurry.common import random_peptides from mhcflurry.testing_utils import cleanup, startup from .pytest_helpers import mhcflurry_cli pytest.fixture(autouse=True, scope="module") def setup_module(): startup() yield cleanup() os.environ["CUDA_VISIBLE_DEVICES"] = "" HYPERPARAMETERS = [ { "max_epochs": 100, "n_flank_length": 5, "c_flank_length": 5, "convolutional_kernel_size": 3, }, { "max_epochs": 1, "n_flank_length": 5, "c_flank_length": 5, "convolutional_kernel_size": 3, } ] def make_dataset(num=10000): df = pandas.DataFrame({ "n_flank": random_peptides(num / 2, 10) + random_peptides(num / 2, 1), "c_flank": random_peptides(num, 10), "peptide": random_peptides(num / 2, 11) + random_peptides(num / 2, 8), }).sample(frac=1.0) df["sample_id"] = pandas.Series( ["sample_%d" % (i + 1) for i in range(5)]).sample( n=len(df), replace=True).values n_regex = "[AILQSVWEN].[MNPQYKV]" def is_hit(n_flank, c_flank, peptide): if re.search(n_regex, peptide): return False # peptide is cleaved return bool(re.match(n_regex, n_flank[-1:] + peptide)) df["hit"] = [ is_hit(row.n_flank, row.c_flank, row.peptide) for (_, row) in df.iterrows() ] train_df = df.sample(frac=0.9) test_df = df.loc[~df.index.isin(train_df.index)].copy() print( "Generated dataset", len(df), "hits: ", df.hit.sum(), "frac:", df.hit.mean()) return (train_df, test_df) def run_and_check(n_jobs=0, additional_args=[], delete=False): (train_df, test_df) = make_dataset() models_dir = tempfile.mkdtemp(prefix="mhcflurry-test-models") hyperparameters_filename = os.path.join( models_dir, "hyperparameters.yaml") with open(hyperparameters_filename, "w") as fd: json.dump(HYPERPARAMETERS, fd) train_filename = os.path.join(models_dir, "training.csv") train_df.to_csv(train_filename, index=False) args = mhcflurry_cli("mhcflurry-class1-train-processing-models") + [ "--data", train_filename, "--hyperparameters", hyperparameters_filename, "--out-models-dir", models_dir, "--held-out-samples", "2", "--num-folds", "2", "--num-jobs", str(n_jobs), ] print("Running with args: %s" % args) subprocess.check_call(args) full_predictor = Class1ProcessingPredictor.load(models_dir) print("Loaded models", len(full_predictor.models)) assert len(full_predictor.models) == 4 test_df["full_predictor"] = full_predictor.predict( test_df.peptide.values, test_df.n_flank.values, test_df.c_flank.values) test_auc = roc_auc_score(test_df.hit.values, test_df.full_predictor.values) print("Full predictor auc", test_auc) print("Performing model selection.") # Run model selection models_dir_selected = tempfile.mkdtemp( prefix="mhcflurry-test-models-selected") args = mhcflurry_cli("mhcflurry-class1-select-processing-models") + [ "--data", os.path.join(models_dir, "train_data.csv.bz2"), "--models-dir", models_dir, "--out-models-dir", models_dir_selected, "--max-models", "1", "--num-jobs", str(n_jobs), ] + additional_args print("Running with args: %s" % args) subprocess.check_call(args) selected_predictor = Class1ProcessingPredictor.load(models_dir_selected) assert len(selected_predictor.models) == 2 test_df["selected_predictor"] = selected_predictor.predict( test_df.peptide.values, test_df.n_flank.values, test_df.c_flank.values) test_auc = roc_auc_score(test_df.hit.values, test_df.selected_predictor.values) print("Selected predictor auc", test_auc) if delete: print("Deleting: %s" % models_dir) shutil.rmtree(models_dir) shutil.rmtree(models_dir_selected) def Xtest_run_parallel(): run_and_check(n_jobs=2) def test_run_serial(): run_and_check(n_jobs=0) ================================================ FILE: test/test_training_variants.py ================================================ """ Training variant tests for PyTorch migration. Tests training with different hyperparameter combinations that are valid but not exercised by the existing test suite, plus a functional test that trains a single network on synthetic A*02:01-motif data and verifies that a known epitope is predicted as a strong binder. """ import random import numpy as np import pytest import torch from mhcflurry.class1_neural_network import Class1NeuralNetwork from mhcflurry.common import random_peptides from mhcflurry.testing_utils import startup, cleanup @pytest.fixture(autouse=True) def setup_teardown(): startup() yield cleanup() def _seed(s=42): np.random.seed(s) random.seed(s) torch.manual_seed(s) def _make_model(**overrides): defaults = dict( activation="tanh", layer_sizes=[16], locally_connected_layers=[], peptide_dense_layer_sizes=[], allele_dense_layer_sizes=[], dropout_probability=0.0, batch_normalization=False, dense_layer_l1_regularization=0.0, dense_layer_l2_regularization=0.0, max_epochs=30, early_stopping=False, validation_split=0.0, minibatch_size=32, random_negative_rate=0.0, random_negative_constant=0, ) defaults.update(overrides) return Class1NeuralNetwork(**defaults) # --------------------------------------------------------------------------- # Training with locally connected layers # --------------------------------------------------------------------------- def test_train_with_locally_connected(): _seed(1) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( locally_connected_layers=[ {"filters": 4, "activation": "tanh", "kernel_size": 3}, ], layer_sizes=[8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 assert preds.min() > 0 # --------------------------------------------------------------------------- # Training with dropout # --------------------------------------------------------------------------- def test_train_with_dropout(): _seed(2) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( dropout_probability=0.5, # keep probability layer_sizes=[16, 8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with batch normalization # --------------------------------------------------------------------------- def test_train_with_batch_normalization(): _seed(3) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( batch_normalization=True, activation="relu", layer_sizes=[16], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with combined options: LC + dropout + batch norm # --------------------------------------------------------------------------- def test_train_lc_dropout_batchnorm(): _seed(4) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( locally_connected_layers=[ {"filters": 4, "activation": "tanh", "kernel_size": 3}, ], dropout_probability=0.8, batch_normalization=True, layer_sizes=[16, 8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with skip-connections (DenseNet) topology # --------------------------------------------------------------------------- def test_train_with_skip_connections(): _seed(5) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( topology="with-skip-connections", layer_sizes=[8, 8, 4], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with peptide dense layers # --------------------------------------------------------------------------- def test_train_with_peptide_dense_layers(): _seed(6) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( peptide_dense_layer_sizes=[16], layer_sizes=[8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with different optimizers # --------------------------------------------------------------------------- @pytest.mark.parametrize("optimizer", ["adam", "sgd", "rmsprop"]) def test_train_with_optimizer(optimizer): _seed(7) peptides = random_peptides(60, length=9) affinities = np.random.uniform(10, 50000, 60) model = _make_model( optimizer=optimizer, learning_rate=0.01, layer_sizes=[8], max_epochs=5, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 60 # --------------------------------------------------------------------------- # Training with L2 regularization # --------------------------------------------------------------------------- def test_train_with_l2_regularization(): _seed(8) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( dense_layer_l2_regularization=0.01, layer_sizes=[8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with L1 + L2 regularization combined # --------------------------------------------------------------------------- def test_train_with_l1_l2_regularization(): _seed(9) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( dense_layer_l1_regularization=0.01, dense_layer_l2_regularization=0.01, layer_sizes=[8], max_epochs=10, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with random negatives # --------------------------------------------------------------------------- def test_train_with_random_negatives(): _seed(10) peptides = random_peptides(80, length=9) affinities = np.random.uniform(10, 50000, 80) model = _make_model( random_negative_rate=1.0, random_negative_constant=10, layer_sizes=[8], max_epochs=5, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 80 # --------------------------------------------------------------------------- # Training with validation split + early stopping # --------------------------------------------------------------------------- def test_train_with_early_stopping(): _seed(11) peptides = random_peptides(100, length=9) affinities = np.random.uniform(10, 50000, 100) model = _make_model( validation_split=0.2, early_stopping=True, patience=3, max_epochs=200, layer_sizes=[8], ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 100 # Should have stopped early (well before 200) n_epochs = len(model.fit_info[-1]["loss"]) assert n_epochs < 200 # --------------------------------------------------------------------------- # Serialization round-trip preserves predictions after combined-option training # --------------------------------------------------------------------------- def test_serialization_with_lc_dropout_batchnorm(): _seed(12) peptides = random_peptides(60, length=9) affinities = np.random.uniform(10, 50000, 60) model = _make_model( locally_connected_layers=[ {"filters": 4, "activation": "tanh", "kernel_size": 3}, ], dropout_probability=0.8, batch_normalization=True, layer_sizes=[8], max_epochs=5, ) model.fit(peptides, affinities, verbose=0) preds_before = model.predict(peptides) config = model.get_config() weights = model.get_weights() restored = Class1NeuralNetwork.from_config(config, weights=weights) preds_after = restored.predict(peptides) np.testing.assert_allclose(preds_before, preds_after, rtol=1e-5) # --------------------------------------------------------------------------- # Training with mixed-length peptides # --------------------------------------------------------------------------- def test_train_mixed_lengths_with_lc(): _seed(13) peptides = ( random_peptides(30, length=8) + random_peptides(30, length=9) + random_peptides(20, length=10) + random_peptides(10, length=11) ) affinities = np.random.uniform(10, 50000, 90) model = _make_model( locally_connected_layers=[ {"filters": 4, "activation": "tanh", "kernel_size": 3}, ], layer_sizes=[8], max_epochs=5, ) model.fit(peptides, affinities, verbose=0) preds = model.predict(peptides) assert len(preds) == 90 # --------------------------------------------------------------------------- # Functional test: learn A*02:01 motif from synthetic data # --------------------------------------------------------------------------- _A0201_P2 = list("LM") # anchor at position 2 _A0201_P9 = list("LVI") # anchor at C-terminal position _OTHER_AA = list("ACDEFGHIKNPQRSTVWY") # non-anchor residues def _random_aa(choices, rng): return choices[rng.randint(0, len(choices) - 1)] def _generate_a0201_binder(rng, length=9): """Generate a peptide with canonical A*02:01 P2+P9 motifs.""" pep = [_random_aa(_OTHER_AA, rng) for _ in range(length)] pep[1] = _random_aa(_A0201_P2, rng) # P2 anchor pep[length - 1] = _random_aa(_A0201_P9, rng) # Pend anchor return "".join(pep) def _generate_non_binder(rng, length=9): """Generate a peptide that avoids A*02:01 anchors at P2 and Pend.""" non_p2 = [aa for aa in _OTHER_AA if aa not in _A0201_P2] non_p9 = [aa for aa in _OTHER_AA if aa not in _A0201_P9] pep = [_random_aa(_OTHER_AA, rng) for _ in range(length)] pep[1] = _random_aa(non_p2, rng) pep[length - 1] = _random_aa(non_p9, rng) return "".join(pep) def test_learn_a0201_motif(): """ Train a single Class1NeuralNetwork on 200 synthetic peptides (100 binders with A*02:01-like P2/Pend motifs at 1 nM, 100 non-binders at 50000 nM) and verify that SLLQHLIGL (a canonical A*02:01 epitope with P2=L, P9=L) is predicted as a strong binder (<= 500 nM). """ rng = np.random.RandomState(314) binders = [_generate_a0201_binder(rng) for _ in range(100)] non_binders = [_generate_non_binder(rng) for _ in range(100)] peptides = binders + non_binders affinities = np.concatenate([ np.full(100, 1.0), # strong binders np.full(100, 50000.0), # non-binders ]) _seed(271) model = _make_model( locally_connected_layers=[ {"filters": 8, "activation": "tanh", "kernel_size": 3}, ], layer_sizes=[32], max_epochs=200, early_stopping=False, validation_split=0.0, learning_rate=0.001, optimizer="adam", minibatch_size=32, dense_layer_l1_regularization=0.0, ) model.fit(peptides, affinities, verbose=0) # SLLQHLIGL — HLA-A*02:01 Tax epitope # P2 = L (canonical A*02:01 anchor), P9 = L (canonical A*02:01 anchor) test_pred = model.predict(["SLLQHLIGL"])[0] print(f"SLLQHLIGL predicted affinity: {test_pred:.1f} nM") assert test_pred <= 500, ( f"SLLQHLIGL should be predicted as strong binder, got {test_pred:.1f} nM" ) # A peptide with wrong anchors should be predicted as weak binder weak_pred = model.predict(["SAAQHQIGA"])[0] print(f"SAAQHQIGA predicted affinity: {weak_pred:.1f} nM") assert weak_pred > 1000, ( f"Non-motif peptide should be predicted weak, got {weak_pred:.1f} nM" ) ================================================ FILE: test-environment.yml ================================================ name: test-environment channels: - conda-forge - defaults dependencies: - pip