Skip to content

Commit

Permalink
Adding ability to run mhctools with netMHCpan 4.0.
Browse files Browse the repository at this point in the history
Also: adding support for easily running with multiple versions of the same netMHC tool (same original binary name, optionally different versioned binary names made by the user) installed on one machine.
  • Loading branch information
julia326 committed Jun 22, 2018
1 parent a952647 commit 6157431
Showing 1 changed file with 27 additions and 8 deletions.
35 changes: 27 additions & 8 deletions mhctools/cli/args.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
NetMHCpan,
NetMHCpan28,
NetMHCpan3,
NetMHCpan4,
NetMHCIIpan,
NetMHCcons,
RandomBindingPredictor,
Expand All @@ -52,6 +53,7 @@
"netmhcpan": NetMHCpan,
"netmhcpan28": NetMHCpan28,
"netmhcpan3": NetMHCpan3,
"netmhcpan4": NetMHCpan4,
"netmhciipan": NetMHCIIpan,
"netmhccons": NetMHCcons,
"random": RandomBindingPredictor,
Expand All @@ -71,6 +73,15 @@
"mhcflurry": MHCflurry,
}

# The versioned program names will be tried first, and if they don't exist in the path, we'll
# fall back to the standard install program names.
versioned_mhc_predictor_program_names = {
"netmhcpan28": ["netMHCpan-2.8", "netMHCpan"],
"netmhcpan3": ["netMHCpan-3.0", "netMHCpan"],
"netmhcpan4": ["netMHCpan-4.0", "netMHCpan"],
"netmhc3": ["netMHC-3.4", "netMHC"],
}

def add_mhc_args(arg_parser):
mhc_options_arg_group = arg_parser.add_argument_group(
title="MHC Prediction Options",
Expand All @@ -92,11 +103,6 @@ def add_mhc_args(arg_parser):
type=parse_int_list,
help="Lengths of epitopes to consider for MHC binding prediction")

mhc_options_arg_group.add_argument(
"--mhc-epitope-lengths",
type=parse_int_list,
help="Deprecated name for --mhc-peptide-lengths")

mhc_options_arg_group.add_argument(
"--mhc-alleles-file",
help="File with one HLA allele per line")
Expand Down Expand Up @@ -139,8 +145,6 @@ def mhc_binding_predictor_from_args(args):
"Invalid MHC prediction method: %s" % (args.mhc_predictor,))
alleles = mhc_alleles_from_args(args)
peptide_lengths = args.mhc_peptide_lengths
if not peptide_lengths:
peptide_lengths = args.mhc_epitope_lengths
logger.info(
("Building MHC binding prediction %s"
" for alleles %s"
Expand All @@ -153,4 +157,19 @@ def mhc_binding_predictor_from_args(args):
kwargs["default_peptide_lengths"] = peptide_lengths
if args.mhc_predictor_models_path:
kwargs["models_path"] = args.mhc_predictor_models_path
return mhc_class(**kwargs)

# support optionally installed program names here, like netMHCpan-3.0 instead of
# netMHCpan - will make it possible to run different versions of the same netMHC suite tools
# in the same environment for comparison
program_names = versioned_mhc_predictor_program_names.get(args.mhc_predictor)
if program_names is None:
return mhc_class(**kwargs)

for program_name in program_names:
try:
predictor = mhc_class(program_name=program_name, **kwargs)
return predictor
except FileNotFoundError:
continue

raise ValueError("Cannot create MHC binding predictor from kwargs %s" % kwargs)

0 comments on commit 6157431

Please sign in to comment.