From 13ac93b92e8df6ecf880eba26945036c70329195 Mon Sep 17 00:00:00 2001 From: Manuel Holtgrewe Date: Wed, 21 Feb 2024 13:28:49 +0100 Subject: [PATCH] fix: resolving chrX het/hom issue (#68) --- chew/common.py | 6 ++++-- chew/data/GRCh37_sitesX.bed.gz | Bin 6637 -> 7966 bytes chew/data/GRCh38_sitesX.bed.gz | Bin 7607 -> 8256 bytes chew/fingerprint.py | 4 ++-- chew/roh.py | 2 +- chew/stats.py | 11 ++++++++--- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/chew/common.py b/chew/common.py index 01d052a..07dd9fb 100644 --- a/chew/common.py +++ b/chew/common.py @@ -125,9 +125,11 @@ class Site: alt: str -def load_sites(genome_release: str) -> typing.List[Site]: +def load_sites(genome_release: str, sites_suffix: str) -> typing.List[Site]: logger.info("Loading sites .bed.gz for %s", genome_release) - path_gz = os.path.join(os.path.dirname(__file__), "data", f"{genome_release}_sites.bed.gz") + path_gz = os.path.join( + os.path.dirname(__file__), "data", f"{genome_release}_{sites_suffix}.bed.gz" + ) result = [] with gzip.open(path_gz, "rt") as inputf: for line in inputf: diff --git a/chew/data/GRCh37_sitesX.bed.gz b/chew/data/GRCh37_sitesX.bed.gz index 53200241e898a80d4f47f9f5a98b016e6b27f457..325c54361eacb95c37ce9f8df4432738753cd1ff 100644 GIT binary patch literal 7966 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 F{{YCQPfP#+ literal 6637 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 qU@HIC{|XaxilZtLCVy|^8>qn*u$w|!jv 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 literal 7607 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 vcfpy.Header: def write_vcf(tmpdir: str, sample: str, release: str, autosomal_fingerprint) -> str: logger.info("Constructing VCF header...") vcf_header = create_vcf_header(sample, release) - sites = load_sites(release) + sites = load_sites(release, "sites") autosomal_mask = autosomal_fingerprint[0] autosomal_is_alt = autosomal_fingerprint[1] autosomal_hom_alt = autosomal_fingerprint[2] diff --git a/chew/stats.py b/chew/stats.py index b7eff8b..07c5208 100644 --- a/chew/stats.py +++ b/chew/stats.py @@ -109,9 +109,14 @@ def compute_sample_stats(container) -> SampleStats: header = extract_header(container) autosomal_fingerprint = container["autosomal_fingerprint"] - autosomal_mask = autosomal_fingerprint[0] - autosomal_is_alt = autosomal_fingerprint[1] - autosomal_hom_alt = autosomal_fingerprint[2] + if autosomal_fingerprint: + autosomal_mask = autosomal_fingerprint[0] + autosomal_is_alt = autosomal_fingerprint[1] + autosomal_hom_alt = autosomal_fingerprint[2] + else: + autosomal_mask = np.zeros(0, dtype=bool) + autosomal_is_alt = np.zeros(0, dtype=bool) + autosomal_hom_alt = np.zeros(0, dtype=bool) if "autosomal_aafs" in header.fields: var_het = compute_autosomal_aafs(container)