def delete(ctx, variant_file, family_file, family_type, family_id): """Delete the variants of a case.""" if not family_file or family_id: logger.error("Please provide a family file or a case id") logger.info("Exiting") ctx.abort() family = get_family( family_lines=family_file, family_type=family_type ) family_id = family.family_id affected_individuals = family.affected_individuals adapter = ctx.obj['adapter'] if variant_file == '-': logger.info("Start parsing variants from stdin") variant_stream = get_vcf_handle(fsock=sys.stdin) else: logger.info("Start parsing variants from stdin") variant_stream = get_vcf_handle(infile=variant_file) start_deleting = datetime.now() try: count = delete_variants(adapter, variant_stream, family_id, affected_individuals) except CaseError as error: logger.warning(error.message) ctx.abort() logger.info("Nr of variants deleted: {0}".format(count)) logger.info("Time to delete variants: {0}" .format(datetime.now() - start_deleting))
def delete(adapter, variant_file, family_file, family_type='ped', case_id=None): """Delete a case and all of it's variants from the database""" vcf = get_vcf(variant_file) with open(family_file, 'r') as family_lines: family = get_family(family_lines=family_lines, family_type=family_type) family_id = family.family_id if case_id: family_id = case_id individuals = family.individuals vcf_individuals = vcf.samples ind_positions = {} for i, ind_id in enumerate(vcf_individuals): ind_positions[ind_id] = i delete_family(adapter=adapter, family_id=family_id) delete_variants(adapter=adapter, vcf=vcf, ind_positions=ind_positions, family_id=family_id, individuals=individuals)
def load_database(adapter, variant_file, family_file, nr_variants=None, family_type='ped', skip_case_id=False, gq_treshold=None, case_id=None): """Load the database with a case and its variants Args: adapter variant_file(str) family_file(str) family_type(str) skip_case_id(bool) """ vcf = get_vcf(variant_file) with open(family_file, 'r') as family_lines: family = get_family( family_lines=family_lines, family_type=family_type ) family_id = family.family_id if case_id: family_id = case_id if not family.affected_individuals: logger.warning("No affected individuals could be found in ped file") logger.info("Found affected individuals in ped file: {0}" .format(', '.join(family.affected_individuals))) load_family( adapter=adapter, case_id=family_id, vcf_path=variant_file ) load_variants( adapter=adapter, family_id=family_id, individuals=family.individuals, vcf=vcf, nr_variants=nr_variants, skip_case_id=skip_case_id, gq_treshold=gq_treshold, )
def load_database( adapter, variant_file, family_file, nr_variants=None, family_type="ped", skip_case_id=False, gq_treshold=None, case_id=None, ): """Load the database with a case and its variants Args: adapter variant_file(str) family_file(str) family_type(str) skip_case_id(bool) """ vcf = get_vcf(variant_file) with open(family_file, "r") as family_lines: family = get_family(family_lines=family_lines, family_type=family_type) family_id = family.family_id if case_id: family_id = case_id if not family.affected_individuals: logger.warning("No affected individuals could be found in ped file") logger.info("Found affected individuals in ped file: {0}".format(", ".join(family.affected_individuals))) load_family(adapter=adapter, case_id=family_id, vcf_path=variant_file) load_variants( adapter=adapter, family_id=family_id, individuals=family.individuals, vcf=vcf, nr_variants=nr_variants, skip_case_id=skip_case_id, gq_treshold=gq_treshold, )
def affected_individuals(ped_path): """Extract affected individuals from a PED file. Args: ped_path (path): path to the PED file Returns: list: list of affected individuals """ with open(ped_path, 'r') as ped_stream: locus_fam = get_family(family_lines=ped_stream, family_type='alt') if not locus_fam.affected_individuals: logger.warn('no affected individuals in ped file') return None return locus_fam.affected_individuals
def delete(adapter, variant_file, family_file, family_type="ped", case_id=None): """Delete a case and all of it's variants from the database""" vcf = get_vcf(variant_file) with open(family_file, "r") as family_lines: family = get_family(family_lines=family_lines, family_type=family_type) family_id = family.family_id if case_id: family_id = case_id individuals = family.individuals delete_family(adapter=adapter, family_id=family_id) delete_variants(adapter=adapter, vcf=vcf, family_id=family_id, individuals=individuals)
def affected_individuals(ped_path): """Extract affected individuals from a PED file. Args: ped_path (path): path to the PED file Returns: list: list of affected individuals Raises: mip2scout.exc.FrequencyError: if no affected individals in PED """ with open(ped_path, 'r') as ped_stream: locus_fam = get_family(family_lines=ped_stream, family_type='alt') if not locus_fam.affected_individuals: message = "no affected individuals in ped file" logger.error(message) raise FrequencyError(message) return locus_fam.affected_individuals
def load(ctx, variant_file, family_file, family_type, bulk_insert): """Load the variants of a case The loading is based on if the variant is seen in a ny affected individual in the family. """ if not family_file: logger.error("Please provide a family file") ctx.abort() if variant_file == '-': logger.info("Parsing variants from stdin") variant_file = get_vcf_handle(fsock=sys.stdin) else: logger.info("Start parsing variants from stdin") variant_path = os.path.abspath(variant_file) variant_file = get_vcf_handle(infile=variant_file) try: family = get_family(family_lines=family_file, family_type=family_type) except SyntaxError as error: logger.warning(error.message) ctx.abort() if not family.affected_individuals: logger.error("No affected individuals could be found in ped file") ctx.abort() logger.info("Found affected individuals in ped file: {0}" .format(', '.join(family.affected_individuals))) adapter = ctx.obj['adapter'] try: load_variants(adapter, family.family_id, family.affected_individuals, variant_file, bulk_insert=bulk_insert, vcf_path=variant_path) except CaseError as error: logger.error(error.message) ctx.abort()
def delete(adapter, variant_file, family_file, family_type='ped', case_id=None): """Delete a case and all of it's variants from the database""" vcf = get_vcf(variant_file) with open(family_file, 'r') as family_lines: family = get_family(family_lines=family_lines, family_type=family_type) family_id = family.family_id if case_id: family_id = case_id individuals = family.individuals delete_family(adapter=adapter, family_id=family_id) delete_variants(adapter=adapter, vcf=vcf, family_id=family_id, individuals=individuals)
def load_database(adapter, variant_file, family_file, nr_variants=None, family_type='ped', skip_case_id=False, gq_treshold=None, case_id=None): """Load the database with a case and its variants Args: adapter variant_file(str) family_file(str) family_type(str) skip_case_id(bool) """ vcf = get_vcf(variant_file) if gq_treshold: if not vcf.contains('GQ'): logger.warning('Set gq-treshold to 0 or add info to vcf') raise SyntaxError('GQ is not defined in vcf header') with open(family_file, 'r') as family_lines: family = get_family(family_lines=family_lines, family_type=family_type) family_id = family.family_id if case_id: family_id = case_id if not family.affected_individuals: logger.warning("No affected individuals could be found in ped file") logger.debug("Found affected individuals in ped file: {0}".format( ', '.join(family.affected_individuals))) vcf_individuals = vcf.samples ind_positions = {} for i, ind_id in enumerate(vcf_individuals): ind_positions[ind_id] = i for ind_id in family.individuals: if ind_id not in ind_positions: raise CaseError( "Ind {0} in ped file does not exist in VCF".format(ind_id)) load_family(adapter=adapter, case_id=family_id, vcf_path=variant_file) try: load_variants( adapter=adapter, family_id=family_id, individuals=family.individuals, vcf=vcf, ind_positions=ind_positions, nr_variants=nr_variants, skip_case_id=skip_case_id, gq_treshold=gq_treshold, ) except Exception as err: logger.warning(err) ##TODO Delete inserted information here raise err
def test_get_family(case_lines): family = get_family(case_lines) assert family.family_id == 'recessive_trio'
def test_get_multiple_families(two_cases): with pytest.raises(CaseError): family = get_family(two_cases)