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))
Exemple #2
0
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)
Exemple #3
0
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,
    )
Exemple #4
0
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
Exemple #6
0
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
Exemple #8
0
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()
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #13
0
def test_get_multiple_families(two_cases):
    with pytest.raises(CaseError):
        family = get_family(two_cases)
Exemple #14
0
def test_get_family(case_lines):
    family = get_family(case_lines)
    assert family.family_id == 'recessive_trio'