def gene(gene_name): title = gene_name tbl_color = {"LOW": 'success', "MODERATE": 'warning', "HIGH": 'danger'} bcs = OrderedDict([("Gene", None), (title, None)]) result = list(wb_gene.filter((wb_gene.Name == gene_name) | (wb_gene.sequence_name == gene_name) | (wb_gene.locus == gene_name)).dicts().execute()) if len(result) != 1: return render_template('404.html'), 404 gene_record = result[0] # Retrieve variants variants = WI.select().filter( WI.CHROM == gene_record["CHROM"], WI.gene_id == gene_record["Name"]).dicts().execute() # Retrieve mappings mapping_set = mapping.select(mapping, trait, report) \ .join(trait) \ .join(report) \ .where((gene_record["CHROM"] == mapping.chrom) & (report.release == 0) & (gene_record["start"] >= mapping.interval_start) & (gene_record["end"] <= mapping.interval_end)) \ .dicts() \ .execute() return render_template('gene.html', **locals())
def gt_from_interval(chrom, start, end, var_eff): if var_eff == "ALL": var_eff = WI.CHROM == chrom else: var_eff = (WI.putative_impact << var_eff) result = list(WI.select(WI.CHROM, WI.POS, WI.REF, WI.ALT, WI.FILTER, WI.transcript_biotype, WI.putative_impact, WI.gene_name, WI.gene_id, WI.hgvs_p, WI.protein_position, WI.GT, WI.feature_id, WI.annotation) .filter(WI.CHROM == chrom, WI.POS >= start, WI.POS <= end, var_eff) .limit(1000) .dicts() .execute()) for i in result: i["GT"] = decode_gt(i["GT"]) return result
def variants_in_biotype(chrom, start, end): q = list(WI.select(WI.transcript_biotype) \ .filter(WI.gene_id != "", WI.CHROM == chrom, WI.POS >= start, WI.POS <= end, WI.FILTER == "") \ .group_by(WI.variant) \ .tuples() .execute()) q = count_column(q) q["total"] = sum(q.values()) return q
def get_variant_count(chrom, start, end, filter=True): """ Return the number of variants within an interval """ if filter: var_filter = (WI.FILTER == "") else: var_filter = (1 == 1) return WI.select(WI.variant) \ .filter((WI.CHROM == chrom) & (WI.POS >= start) & (WI.POS <= end) & (var_filter)) \ .group_by() \ .distinct().count()
def get_gene_w_impact(chrom, start, end): """ Return Genes with variants of given impact for a given interval """ q_biotype = Counter(list(WI.select(WI.transcript_biotype, WI.putative_impact) \ .filter(WI.gene_id != "", WI.CHROM == chrom, WI.POS >= start, WI.POS <= end, WI.FILTER == "") \ .group_by(WI.gene_id, WI.transcript_biotype) \ .tuples() .execute())) total = {"LOW": 0, "MODERATE": 0, "HIGH":0} for k,v in zip([x[1] for x in q_biotype.keys()], q_biotype.values()): total[k] += v by_biotype = defaultdict(dict) for k,v in q_biotype.items(): by_biotype[k[1]][k[0]] = v response = {} response["total"] = total response.update(by_biotype) return response
def get_gt(chrom, pos): """ return GT by chrom and position """ return decode_gt(WI.get(WI.CHROM == chrom, WI.POS == pos).GT)