From e4c21bcba014600c072bb1bc9e0d6313fb205d2c Mon Sep 17 00:00:00 2001 From: Tim O'Donnell <timodonnell@gmail.com> Date: Fri, 24 Nov 2017 18:01:36 -0500 Subject: [PATCH] Add throw argument to percentile_ranks --- .../class1_affinity_predictor.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/mhcflurry/class1_affinity_prediction/class1_affinity_predictor.py b/mhcflurry/class1_affinity_prediction/class1_affinity_predictor.py index d0e84024..c3b841da 100644 --- a/mhcflurry/class1_affinity_prediction/class1_affinity_predictor.py +++ b/mhcflurry/class1_affinity_prediction/class1_affinity_predictor.py @@ -525,7 +525,7 @@ class Class1AffinityPredictor(object): transform.fit(predictions, bins=bins) self.allele_to_percent_rank_transform[allele] = transform - def percentile_ranks(self, affinities, allele=None, alleles=None): + def percentile_ranks(self, affinities, allele=None, alleles=None, throw=True): """ Return percentile ranks for the given ic50 affinities and alleles. @@ -538,6 +538,10 @@ class Class1AffinityPredictor(object): 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 ------- @@ -548,8 +552,13 @@ class Class1AffinityPredictor(object): transform = self.allele_to_percent_rank_transform[allele] return transform.transform(affinities) except KeyError: - raise ValueError( - "Allele %s has no percentile rank information" % allele) + msg = "Allele %s has no percentile rank information" % allele + if throw: + raise ValueError(msg) + else: + warnings.warn(msg) + # Return NaNs + return numpy.ones(len(affinities)) * numpy.nan if alleles is None: raise ValueError("Specify allele or alleles") @@ -559,7 +568,7 @@ class Class1AffinityPredictor(object): 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) + sub_df.affinity, allele=allele, throw=throw) assert not df.result.isnull().any() return df.result.values @@ -752,7 +761,7 @@ class Class1AffinityPredictor(object): if include_percentile_ranks: if self.allele_to_percent_rank_transform: result["prediction_percentile"] = self.percentile_ranks( - df.prediction, alleles=df.allele.values) + df.prediction, alleles=df.allele.values, throw=throw) else: warnings.warn("No percentile rank information available.") return result -- GitLab