def make_variant_probe(al, variant, kmer, DB=None, no_backgrounds=False): if no_backgrounds: context = [] else: if DB is not None: try: context = get_context(variant.start, kmer) except: DB = None context = [] logger.warning( "Could not connect to database. Continuing without using backgrounds" ) else: context = [] if context: logger.debug("Found %i variants in context of %s" % (len(context), variant)) variant_probe = None contexts_seen_together = seen_together(context) alts = [] for context in contexts_seen_together: if context: logger.debug("Processing variant:%s with context:%s" % (variant, ",".join([str(c) for c in context]))) else: logger.debug("Processing variant:%s " % (variant)) try: panel = al.create(variant, context) except ValueError as e: pass logger.warning("Failed to process variant:%s context:%s. %s" % (variant, ",".join([str(c) for c in context]), str(e))) else: if variant_probe is not None: variant_probe.alts.extend(panel.alts) variant_probe.refs.extend(panel.refs) else: variant_probe = panel if variant_probe: variant_probe.alts = unique(variant_probe.alts) variant_probe.refs = unique(variant_probe.refs) return variant_probe
def diff(self, other): diff = {} # Compares the antibiogram of two predictor results drugs = unique(self.drugs + other.drugs) for drug in drugs: predict1, predict2 = self.susceptibility.get(drug, {"predict": "NA"}).get( "predict"), other.susceptibility.get(drug, {"predict": "NA"}).get("predict") if predict1 != predict2: diff[drug] = {} diff[drug]["predict"] = (predict1, predict2) return diff
def create_comparision_table(sample_ids, truth, ana1, ana2, ignore_drugs=[]): df = [] for sample_id in sample_ids: indv_truth = truth.get( sample_id, MykrobePredictorSusceptibilityResult.create( {})) indv_ana1 = ana1.get( sample_id, MykrobePredictorSusceptibilityResult.create( {})) indv_ana2 = ana2.get( sample_id, MykrobePredictorSusceptibilityResult.create( {})) drugs = unique(indv_truth.drugs + indv_ana1.drugs + indv_ana2.drugs) if drugs: for drug in drugs: if drug not in ignore_drugs: if args.ana2: row = [ sample_id, drug, indv_truth.susceptibility.get( drug, { "predict": "NA"}).get("predict"), indv_ana1.susceptibility.get( drug, { "predict": "NA"}).get("predict"), indv_ana2.susceptibility.get( drug, { "predict": "NA"}).get("predict")] else: row = [ sample_id, drug, indv_truth.susceptibility.get( drug, { "predict": "NA"}).get("predict"), indv_ana1.susceptibility.get( drug, { "predict": "NA"}).get("predict")] df.append(row) return df
def _get_drug_list_from_variant_to_resistance_drug(self): return unique( flatten(self.variant_or_gene_name_to_resistance_drug.values()))
def compare_analysis_to_truth(sample_ids, truth, ana, ana_name=""): comparison = {} for sample_id in sample_ids: indv_truth = truth.get( sample_id, MykrobePredictorSusceptibilityResult.create( {})) indv_ana = ana.get( sample_id, MykrobePredictorSusceptibilityResult.create( {})) drugs = unique(indv_truth.drugs + indv_ana.drugs) try: [drugs.remove(d) for d in args.ignore_drugs] except: pass if drugs: for drug in drugs: if drug == "Fusidicacid": drug = "FusidicAcid" truth_drug_predict = indv_truth.susceptibility.get( drug, {"predict": "NA"}).get("predict").upper().strip()[0] ana_drug_predict = indv_ana.susceptibility.get( drug, {"predict": "NA"}).get("predict").upper().strip()[0] ana_drug_predict = ana_drug_predict.replace( "INCONCLUSIVE", "I") truth_drug_predict = truth_drug_predict.replace( "INCONCLUSIVE", "I") truth_drug_predict = truth_drug_predict.replace("B", "I") truth_drug_predict = truth_drug_predict.replace("N", "I") ana_drug_predict = ana_drug_predict.replace("N", "I") truth_drug_predict = truth_drug_predict.replace("IA", "I") if not truth_drug_predict in ["R", "NA", "S", "I"]: sys.stderr.write( "failed truth check %s %s - %s - %s \n" % (ana_name, sample_id, drug, truth_drug_predict)) elif ana_drug_predict not in ["R", "NA", "S", "I"]: sys.stderr.write( "failed predict check %s %s - %s - %s \n" % (ana_name, sample_id, drug, ana_drug_predict)) else: if truth_drug_predict == "NA": compare = "UNKNOWN" elif ana_drug_predict == "I" or ana_drug_predict == "NA": if truth_drug_predict == "R": compare = "IR" elif truth_drug_predict == "S": compare = "IS" else: compare = "UNKNOWN" elif truth_drug_predict == ana_drug_predict: if truth_drug_predict == "R": compare = "TP" elif truth_drug_predict == "S": compare = "TN" else: compare = "UNKNOWN" else: if truth_drug_predict == "R": compare = "FN" elif truth_drug_predict == "S": compare = "FP" else: compare = "UNKNOWN" comparison = update_comparision(comparison, drug, compare) return comparison
def get_union_sample_ids(ana1, ana2): return unique(ana1.keys() + ana2.keys())
def _get_drug_list_from_variant_to_resistance_drug(self): return unique(flatten(self.variant_or_gene_name_to_resistance_drug.values()))