1+ rule compile_fail_sites_vcf :
2+ params :
3+ header = ("#CHROM" , "POS" , "ID" , "REF" , "ALT" , "QUAL" , "FILTER" , "INFO" ),
4+ filter_text = "mask" ,
5+ sub_text = "NA" ,
6+ exc_text = "site_qual"
7+ input :
8+ sites = OUTDIR / f"{ OUTPUT_NAME } .fail_sites.tsv" ,
9+ output :
10+ sites = temp (OUTDIR / f"{ OUTPUT_NAME } .fail_sites.vcf" ),
11+ run :
12+ import pandas as pd
13+ sites = (
14+ pd .read_table (input .sites , sep = "\t " )
15+ .drop_duplicates (subset = ("CHROM" , "POS" , "REF" ))
16+ .rename (columns = {"CHROM" : "#CHROM" })
17+ )
18+ sites ["ID" ] = "."
19+ sites ["ALT" ] = "."
20+ sites ["QUAL" ] = "."
21+ sites ["FILTER" ] = params .filter_text
22+ sites ["INFO" ] = f"SUB={ params .sub_text } ;EXC={ params .exc_text } "
23+ sites [list (params .header )].to_csv (output .sites , sep = "\t " , index = False )
24+
25+
26+ rule merge_sites :
27+ params :
28+ header = ("#CHROM" , "POS" , "ID" , "REF" , "ALT" , "QUAL" , "FILTER" , "INFO" )
29+ input :
30+ lambda wildcards : select_problematic_vcf (),
31+ OUTDIR / f"{ OUTPUT_NAME } .fail_sites.vcf" ,
32+ output :
33+ sites = temp (OUTDIR / "all_mask_sites.vcf" ),
34+ run :
35+ import pandas as pd
36+ (
37+ pd .concat (
38+ [pd .read_table (path , sep = "\t " , comment = "#" , names = params .header ) for path in input ],
39+ axis = "rows" ,
40+ ignore_index = True
41+ )
42+ .drop_duplicates (subset = ("#CHROM" , "POS" , "FILTER" ), keep = "first" )
43+ .sort_values (list (params .header ))
44+ .to_csv (output .sites , sep = "\t " , index = False )
45+ )
46+
47+
148rule extract_afwdist_variants :
249 conda : "../envs/biopython.yaml"
350 params :
@@ -8,7 +55,7 @@ rule extract_afwdist_variants:
855 mask_class = ["mask" ],
956 input :
1057 variants = OUTDIR / f"{ OUTPUT_NAME } .variants.tsv" ,
11- mask_vcf = lambda wildcards : select_problematic_vcf () ,
58+ mask_vcf = OUTDIR / "all_mask_sites.vcf" ,
1259 ancestor = OUTDIR / f"{ OUTPUT_NAME } .ancestor.fasta" ,
1360 reference = OUTDIR / "reference.fasta" ,
1461 output :
0 commit comments