Skip to content

Commit

Permalink
Merge pull request #186 from openvax/use-new-isovar-api-but-old-effec…
Browse files Browse the repository at this point in the history
…ts-logic

use new Isovar API but keep old logic for determining variant effects
  • Loading branch information
iskandr committed Feb 22, 2020
2 parents d0e74d9 + 3b0be11 commit 653febf
Show file tree
Hide file tree
Showing 11 changed files with 225 additions and 335 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -61,7 +61,7 @@ install:
- source activate test-environment
# install pysam from conda because I'm having trouble installing Cython
# for Python 3 on Travis
- conda install -c bioconda pysam=0.9.0
- conda install -c bioconda pysam
- pip install -r requirements.txt
- pip install .
- pip install coveralls
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Expand Up @@ -3,7 +3,7 @@ numpy>=1.14.0
pandas
pyensembl>=1.5.0
varcode>=0.5.9
isovar>=0.8.5,<1.0.0
isovar>=1.1.0
mhctools>=1.5.0
roman
jinja2
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -62,7 +62,7 @@
'pandas',
'pyensembl>=1.5.0',
'varcode>=0.5.9',
'isovar>=0.8.5,<1.0.0',
'isovar>=1.1.0',
'mhctools>=1.5.0',
'roman',
'jinja2',
Expand Down
95 changes: 48 additions & 47 deletions test/test_mutant_protein_sequence.py
Expand Up @@ -13,11 +13,9 @@
from __future__ import absolute_import, print_function, division

from nose.tools import eq_, assert_almost_equal
from vaxrank.core_logic import run_vaxrank
from vaxrank.cli import make_vaxrank_arg_parser, run_vaxrank_from_parsed_args
from vaxrank.mutant_protein_fragment import MutantProteinFragment
from mhctools import RandomBindingPredictor
from isovar.cli.variant_sequences_args import make_variant_sequences_arg_parser
from isovar.cli.rna_args import allele_reads_generator_from_args
from varcode.cli import variant_collection_from_args

from .testing_helpers import data_path

Expand Down Expand Up @@ -49,25 +47,19 @@ def test_mutant_amino_acids_in_mm10_chrX_8125624_refC_altA_pS460I():
# there are two co-occurring variants in the RNAseq data but since
# they don't happen in the same codon then we're considering the Varcode
# annotation to be correct
# TODO: deal with phasing of variants explicitly so that both
# variant positions are considered mutated
arg_parser = make_variant_sequences_arg_parser()
# TODO:
# deal with phasing of variants explicitly so that both
# variant positions are considered mutated
arg_parser = make_vaxrank_arg_parser()
args = arg_parser.parse_args([
"--vcf", data_path("b16.f10/b16.f10.Wdr13.vcf"),
"--bam", data_path("b16.f10/b16.combined.sorted.bam"),
"--vaccine-peptide-length", "15",
"--padding-around-mutation", "5",
"--mhc-predictor", "random",
"--mhc-alleles", "HLA-A*02:01",
])
reads_generator = allele_reads_generator_from_args(args)
variants = variant_collection_from_args(args)
results = run_vaxrank(
variants=variants,
reads_generator=reads_generator,
mhc_predictor=random_binding_predictor,
vaccine_peptide_length=15,
padding_around_mutation=5,
max_vaccine_peptides_per_variant=1,
min_alt_rna_reads=1,
min_variant_sequence_coverage=1,
variant_sequence_assembly=True)
results = run_vaxrank_from_parsed_args(args)
ranked_list = results.ranked_vaccine_peptides

for variant, vaccine_peptides in ranked_list:
Expand All @@ -85,23 +77,16 @@ def test_mutant_amino_acids_in_mm10_chr9_82927102_refGT_altTG_pT441H():
# mentions the G>T variant but doesn't include the subsequent nucleotide
# change T>G. To avoid having to think about phasing of variants I changed
# the VCF in vaxrank to contain a GT>TG variant.
arg_parser = make_variant_sequences_arg_parser()
arg_parser = make_vaxrank_arg_parser()
args = arg_parser.parse_args([
"--vcf", data_path("b16.f10/b16.f10.Phip.vcf"),
"--bam", data_path("b16.f10/b16.combined.sorted.bam"),
"--vaccine-peptide-length", "15",
"--padding-around-mutation", "5",
"--mhc-predictor", "random",
"--mhc-alleles", "HLA-A*02:01",
])
reads_generator = allele_reads_generator_from_args(args)
variants = variant_collection_from_args(args)
results = run_vaxrank(
reads_generator=reads_generator,
mhc_predictor=random_binding_predictor,
variants=variants,
vaccine_peptide_length=15,
padding_around_mutation=5,
min_alt_rna_reads=1,
min_variant_sequence_coverage=1,
variant_sequence_assembly=True,
max_vaccine_peptides_per_variant=1)
results = run_vaxrank_from_parsed_args(args)
ranked_list = results.ranked_vaccine_peptides

for variant, vaccine_peptides in ranked_list:
Expand All @@ -112,25 +97,19 @@ def test_mutant_amino_acids_in_mm10_chr9_82927102_refGT_altTG_pT441H():
mutant_protein_fragment)

def test_keep_top_k_epitopes():
arg_parser = make_variant_sequences_arg_parser()
arg_parser = make_vaxrank_arg_parser()
keep_k_epitopes = 3
args = arg_parser.parse_args([
"--vcf", data_path("b16.f10/b16.f10.Phip.vcf"),
"--bam", data_path("b16.f10/b16.combined.sorted.bam"),
"--vaccine-peptide-length", "15",
"--padding-around-mutation", "5",
"--num-epitopes-per-vaccine-peptide", str(keep_k_epitopes),
"--mhc-predictor", "netmhc",
"--mhc-alleles", "HLA-A*02:01",
])
reads_generator = allele_reads_generator_from_args(args)
variants = variant_collection_from_args(args)
keep_k_epitopes = 3
results = run_vaxrank(
reads_generator=reads_generator,
mhc_predictor=random_binding_predictor,
variants=variants,
vaccine_peptide_length=15,
padding_around_mutation=5,
min_alt_rna_reads=1,
min_variant_sequence_coverage=1,
variant_sequence_assembly=True,
max_vaccine_peptides_per_variant=1,
num_mutant_epitopes_to_keep=keep_k_epitopes)
results = run_vaxrank_from_parsed_args(args)

ranked_list = results.ranked_vaccine_peptides

for variant, vaccine_peptides in ranked_list:
Expand All @@ -141,3 +120,25 @@ def test_keep_top_k_epitopes():
mutant_epitope_score = sum(
p.logistic_epitope_score() for p in vaccine_peptide.mutant_epitope_predictions)
assert_almost_equal(mutant_epitope_score, vaccine_peptide.mutant_epitope_score)

def test_mutant_protein_fragment_serialization():
arg_parser = make_vaxrank_arg_parser()
keep_k_epitopes = 3
args = arg_parser.parse_args([
"--vcf", data_path("b16.f10/b16.f10.Phip.vcf"),
"--bam", data_path("b16.f10/b16.combined.sorted.bam"),
"--vaccine-peptide-length", "15",
"--padding-around-mutation", "5",
"--num-epitopes-per-vaccine-peptide", str(keep_k_epitopes),
"--mhc-predictor", "netmhc",
"--mhc-alleles", "HLA-A*02:01",
])
results = run_vaxrank_from_parsed_args(args)

ranked_list = results.ranked_vaccine_peptides

for _, vaccine_peptides in ranked_list:
mutant_protein_fragment = vaccine_peptides[0].mutant_protein_fragment
json_str = mutant_protein_fragment.to_json()
deserialized = MutantProteinFragment.from_json(json_str)
eq_(mutant_protein_fragment, deserialized)
4 changes: 2 additions & 2 deletions test/test_shell_script.py
Expand Up @@ -30,7 +30,7 @@
"--mhc-predictor", "random",
"--mhc-alleles", "H2-Kb,H2-Db",
"--padding-around-mutation", "5",
"--include-mismatches-after-variant"
"--count-mismatches-after-variant",
]

cli_args_for_b16_seqdata_real_predictor = [
Expand All @@ -41,7 +41,7 @@
"--mhc-alleles", "H2-Kb,H2-Db",
"--mhc-epitope-lengths", "8",
"--padding-around-mutation", "5",
"--include-mismatches-after-variant"
"--count-mismatches-after-variant"
]


Expand Down
2 changes: 1 addition & 1 deletion vaxrank/__init__.py
@@ -1 +1 @@
__version__ = "1.2.0"
__version__ = "1.3.0"

0 comments on commit 653febf

Please sign in to comment.