def get_clingen_clinvar_str_api(genome, transcript_uid, region=None): if (region is None ): response = jsonify([]) return response transcript = Transcript(transcript_uid, genome) res = [] if region in ["UTR", "INTRONIC", "GENIC", "CODING"]: region_tuple = transcript.get_requested_region("GENIC") else: start = int(region.split(":")[1].split("-")[0])-1 end = int(region.split(":")[1].split("-")[1]) region_tuple = [(start, end)] chrom = transcript.get_chr() location = "overlapping" # get full genic or custom region if request.path.startswith("/get_str"): res = get_strs(region_tuple[0][0]+1, region_tuple[0][1], chrom, genome, location) #add 1 to start to make 1 based for api call elif request.path.startswith("/get_clinvar"): res = get_clinvars(region_tuple[0][0]+1, region_tuple[0][1], chrom, genome, location) #add 1 to start to make 1 based for api call else: res = get_cnvs(region_tuple[0][0]+1, region_tuple[0][1], chrom, genome, location) #add 1 to start to make 1 based for api call # cut if UTR, INTRONIC, or CODING if region in ["UTR", "INTRONIC", "CODING"]: subregions = transcript.get_requested_region(region) res = extract_subregions(res, subregions, region) response = jsonify(res) return response
class Variants: def __init__(self, variants_file): """ creates variants object which has gene, inheritance, var1, var2 """ if type(variants_file) != dict: f = open(variants_file) variants_json = json.load(f) f.close() else: variants_json = variants_file try: self.transcript = Transcript(variants_json["GENE_UID"], variants_json["GENOME"]) self.var1 = self.make_variant(variants_json["VAR1"], self.transcript) self.var2 = self.make_variant(variants_json["VAR2"], self.transcript) self.sex = variants_json["SEX"] self.check_sex_zygosity() except Exception as e: raise Exception(e) def make_variant(self, var, transcript): if var == "None": return None var_type = var["TYPE"] if var_type == "SNV": variant = SNV(var, transcript) elif var_type == "INDEL": variant = Indel(var, transcript) elif var_type == "STR": variant = ShortTandemRepeat(var, transcript) elif var_type == "MEI": variant = MEI(var, transcript) elif var_type == "CLINVAR": variant = ClinVar(var, transcript) elif var_type == "CNV": variant = CopyNumberVariant(var, transcript) elif var_type == "CLINGEN": variant = CopyNumberVariant(var, transcript) else: variant = Variant(var, transcript) return variant def check_sex_zygosity(self): if self.sex not in ['XX', 'XY']: raise ValueError('SEX must be one of: XX, XY') if self.transcript.chrom == 'chrY' and self.sex != 'XY': raise ValueError('SEX of proband must be XY when selecting Y gene') if self.var1.zygosity in ['HOMOZYGOUS', 'HEMIZYGOUS' ] and self.var2 != None: raise ValueError( 'Cannot have a second variant if the first is HOMOZYGOUS or HEMIZYGOUS' ) if self.var1.zygosity != 'HEMIZYGOUS' and self.sex == 'XY' and self.transcript.get_chr( ) in ["chrX", "chrY"]: raise ValueError('With XY sex zygosity must be HEMIZYGOUS') def variants_2_VCF(self): """ turns variant template into variant, string representing vcf """ # print(self.var2) r2 = "" if self.var2 != None: r2 = self.var2.get_vcf_row() r1 = self.var1.get_vcf_row() return (r1, r2) def get_variant_rows(self): vcf = self.variants_2_VCF() return {"var1": vcf[0], "var2": vcf[1]}