Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
 def _get_drug_list_from_variant_to_resistance_drug(self):
     return unique(
         flatten(self.variant_or_gene_name_to_resistance_drug.values()))
Esempio n. 6
0
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
Esempio n. 7
0
def get_union_sample_ids(ana1, ana2):
    return unique(ana1.keys() + ana2.keys())
Esempio n. 8
0
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
Esempio n. 9
0
def get_union_sample_ids(ana1, ana2):
    return unique(ana1.keys() + ana2.keys())
Esempio n. 10
0
 def _get_drug_list_from_variant_to_resistance_drug(self):
     return unique(flatten(self.variant_or_gene_name_to_resistance_drug.values()))