Skip to content

Commit c14600f

Browse files
committed
refactor: mark failed sites in merged VCF filter
Remove VCF header from params as well
1 parent 0627c13 commit c14600f

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

workflow/rules/distances.smk

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
rule compile_fail_sites_vcf:
22
params:
3-
header = ("#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO"),
4-
filter_text = "mask",
3+
filter_text = "fail_site",
54
sub_text = "NA",
6-
exc_text = "site_qual"
5+
exc_text = "site_qual",
76
input:
87
sites = OUTDIR / f"{OUTPUT_NAME}.fail_sites.tsv",
98
output:
109
sites = temp(OUTDIR / f"{OUTPUT_NAME}.fail_sites.vcf"),
1110
run:
1211
import pandas as pd
12+
HEADER = ["#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO"]
1313
sites = (
1414
pd.read_table(input.sites, sep="\t")
1515
.drop_duplicates(subset=("CHROM", "POS", "REF"))
@@ -20,28 +20,27 @@ rule compile_fail_sites_vcf:
2020
sites["QUAL"] = "."
2121
sites["FILTER"] = params.filter_text
2222
sites["INFO"] = f"SUB={params.sub_text};EXC={params.exc_text}"
23-
sites[list(params.header)].to_csv(output.sites, sep="\t", index=False)
23+
sites[HEADER].to_csv(output.sites, sep="\t", index=False)
2424

2525

26-
rule merge_sites:
27-
params:
28-
header = ("#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO")
26+
rule merge_mask_sites_vcf:
2927
input:
3028
lambda wildcards: select_problematic_vcf(),
3129
OUTDIR / f"{OUTPUT_NAME}.fail_sites.vcf",
3230
output:
3331
sites = temp(OUTDIR / "all_mask_sites.vcf"),
3432
run:
3533
import pandas as pd
34+
HEADER = ["#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO"]
3635
(
3736
pd.concat(
38-
[pd.read_table(path, sep="\t", comment="#", names=params.header) for path in input],
37+
[pd.read_table(path, sep="\t", comment="#", names=HEADER, dtype={"POS": "int64"}) for path in input],
3938
axis="rows",
4039
ignore_index=True
4140
)
42-
.drop_duplicates(subset=("#CHROM", "POS", "FILTER"), keep="first")
43-
.sort_values(list(params.header))
44-
.to_csv(output.sites, sep="\t", index=False)
41+
.drop_duplicates(subset=("#CHROM", "POS", "FILTER"), keep="first")
42+
.sort_values(by=["#CHROM", "POS"])
43+
.to_csv(output.sites, sep="\t", index=False)
4544
)
4645

4746

@@ -52,7 +51,7 @@ rule extract_afwdist_variants:
5251
position_col = "POS",
5352
sequence_col = "ALT",
5453
frequency_col = "ALT_FREQ",
55-
mask_class = ["mask"],
54+
mask_class = ["mask", "fail_site"],
5655
input:
5756
variants = OUTDIR/f"{OUTPUT_NAME}.variants.tsv",
5857
mask_vcf = OUTDIR / "all_mask_sites.vcf",

0 commit comments

Comments
 (0)