def insert_sv_variants(adapter: MongoAdapter, case_obj: Case) -> None: """Build sv_variant documents and insert them into database on the fly, one at a time""" for variant in VCF(case_obj.vcf_sv_path, threads=settings.cyvcf_threads): variant_id = get_variant_id(variant=variant) ref = variant.REF alt = variant.ALT[0] coordinates = get_coords(variant) chrom = coordinates["chrom"] pos = coordinates["pos"] variant_obj = Variant( variant_id=variant_id, chrom=chrom, pos=pos, end=coordinates["end"], ref=ref, alt=alt, end_chrom=coordinates["end_chrom"], sv_type=coordinates["sv_type"], sv_len=coordinates["sv_length"], case_id=case_obj.case_id, homozygote=0, hemizygote=0, is_sv=True, id_column=variant.ID, ) adapter.add_structural_variant(variant=variant_obj, max_window=settings.load_sv_window)
def insert_snv_variants(adapter: MongoAdapter, case_obj: Case) -> None: """Build variant documents and bulk insert them into database""" variants = [] for variant in VCF(case_obj.vcf_path, threads=settings.cyvcf_threads): variant_id = get_variant_id(variant=variant) ref = variant.REF alt = variant.ALT[0] coordinates = get_coords(variant) chrom = coordinates["chrom"] pos = coordinates["pos"] found_homozygote = 0 found_hemizygote = 0 for ind_obj in case_obj.individuals: ind_pos = ind_obj["ind_index"] if int(variant.gt_quals[ind_pos]) < settings.load_gq_threshold: continue genotype = GENOTYPE_MAP[variant.gt_types[ind_pos]] if genotype not in ["het", "hom_alt"]: continue if genotype == "hom_alt": found_homozygote = 1 if ( chrom in ["X", "Y"] and ind_obj["sex"] == 1 and not check_par(chrom, pos, genome_build=settings.genome_build) ): found_hemizygote = 1 variant_obj = Variant( variant_id=variant_id, chrom=chrom, pos=pos, end=coordinates["end"], ref=ref, alt=alt, end_chrom=coordinates["end_chrom"], sv_type=coordinates["sv_type"], sv_len=coordinates["sv_length"], case_id=case_obj.case_id, homozygote=found_homozygote, hemizygote=found_hemizygote, is_sv=False, id_column=variant.ID, ) variants.append(variant_obj) adapter.add_variants(variants=variants)
def annotate_svs(adapter, vcf_obj): """Annotate all SV variants in a VCF Args: adapter(loqusdb.plugin.adapter) vcf_obj(cyvcf2.VCF) Yields: variant(cyvcf2.Variant) """ for nr_variants, variant in enumerate(vcf_obj, 1): variant_info = get_coords(variant) match = adapter.get_structural_variant(variant_info) if match: annotate_variant(variant, match) yield variant
def test_get_coords_for_BND(bnd_variant): coords = get_coords(bnd_variant) assert coords["pos"] == coords["end"] assert coords["sv_length"] == float("inf") assert coords["sv_type"] == "BND"
def test_get_coords_for_BND(bnd_variant): coords = get_coords(bnd_variant) assert coords['pos'] == coords['end'] assert coords['sv_length'] == float('inf') assert coords['sv_type'] == 'BND'