@@ -48,8 +48,6 @@ rule snps_to_ancestor:
4848 -m {params.ivar_depth} \
4949 -g {input.gff} \
5050 -r renamed_reference.fasta
51-
52- sed 's/'$ref'/'{wildcards.sample}'/g' {wildcards.sample}.tsv | cat > {output.tsv}
5351 """
5452
5553
@@ -69,39 +67,18 @@ rule annotation:
6967 "../scripts/report/get_annotation.py"
7068
7169
72- rule format_tsv :
73- threads :1
74- shadow : "shallow"
75- input :
76- expand (OUTDIR / "{sample}.tsv" , sample = iter_samples ())
77- output :
78- tsv = OUTDIR / f"{ OUTPUT_NAME } .tsv"
79- log :
80- LOGDIR / "format_tsv" / "log.txt"
81- shell :
82- """
83- path=`echo {input} | awk '{{print $1}}'`
84- grep "^REGION" "$path" > header
85- for tsv in {input}; do
86- tail -n +2 "$tsv" >> body
87- done
88- cat header body > "{output.tsv}"
89- rm header
90- """
91-
92-
9370rule mask_tsv :
9471 threads : 1
9572 conda : "../envs/biopython.yaml"
9673 params :
9774 mask_class = ["mask" ]
9875 input :
99- tsv = OUTDIR / f" { OUTPUT_NAME } .tsv" ,
76+ tsv = OUTDIR / "{sample }.tsv" ,
10077 vcf = lambda wildcards : select_problematic_vcf ()
10178 output :
102- masked_tsv = temp (OUTDIR / f" { OUTPUT_NAME } .masked.tsv" )
79+ masked_tsv = temp (OUTDIR / "{sample }.masked.tsv" )
10380 log :
104- LOGDIR / "mask_tsv" / "log.txt"
81+ LOGDIR / "mask_tsv" / "{sample}. log.txt"
10582 script :
10683 "../scripts/mask_tsv.py"
10784
@@ -114,12 +91,12 @@ rule filter_tsv:
11491 min_alt_rv = 2 ,
11592 min_alt_dp = 2 ,
11693 input :
117- tsv = OUTDIR / f" { OUTPUT_NAME } .masked.tsv" ,
94+ tsv = OUTDIR / "{sample }.masked.tsv" ,
11895 annotation = OUTDIR / "annotation.csv"
11996 output :
120- filtered_tsv = temp (OUTDIR / f" { OUTPUT_NAME } .masked.prefiltered.tsv" )
97+ filtered_tsv = temp (OUTDIR / "{sample }.masked.prefiltered.tsv" )
12198 log :
122- LOGDIR / "filter_tsv" / "log.txt"
99+ LOGDIR / "filter_tsv" / "{sample}. log.txt"
123100 script :
124101 "../scripts/filter_tsv.R"
125102
@@ -130,11 +107,11 @@ rule tsv_to_vcf:
130107 params :
131108 ref_name = config ["ALIGNMENT_REFERENCE" ],
132109 input :
133- tsv = OUTDIR / f" { OUTPUT_NAME } .masked.prefiltered.tsv" ,
110+ tsv = OUTDIR / "{sample }.masked.prefiltered.tsv" ,
134111 output :
135- vcf = temp (OUTDIR / f" { OUTPUT_NAME } .vcf" )
112+ vcf = temp (OUTDIR / "{sample }.vcf" )
136113 log :
137- LOGDIR / "tsv_to_vcf" / "log.txt"
114+ LOGDIR / "tsv_to_vcf" / "{sample}. log.txt"
138115 script :
139116 "../scripts/tsv_to_vcf.py"
140117
@@ -147,11 +124,11 @@ rule variants_effect:
147124 ref_name = config ["ALIGNMENT_REFERENCE" ],
148125 snpeff_data_dir = (BASE_PATH / "config" / "snpeff" ).resolve ()
149126 input :
150- vcf = OUTDIR / f" { OUTPUT_NAME } .vcf"
127+ vcf = OUTDIR / "{sample }.vcf"
151128 output :
152- ann_vcf = temp ( OUTDIR / f" { OUTPUT_NAME } .annotated.vcf")
129+ ann_vcf = OUTDIR / "{sample }.annotated.vcf"
153130 log :
154- LOGDIR / "variants_effect" / "log.txt"
131+ LOGDIR / "variants_effect" / "{sample}. log.txt"
155132 retries : 2
156133 shell :
157134 """
@@ -165,7 +142,7 @@ rule variants_effect:
165142 echo "Local database not found at '{params.snpeff_data_dir}', downloading from repository"
166143 fi
167144
168- snpEff eff -dataDir {params.snpeff_data_dir} -noStats {params.ref_name} {input.vcf} > {output.ann_vcf}
145+ snpEff eff -dataDir {params.snpeff_data_dir} -noStats {params.ref_name} {input.vcf} >{output.ann_vcf}
169146 """
170147
171148
@@ -180,11 +157,11 @@ rule extract_vcf_fields:
180157 ],
181158 sep = ","
182159 input :
183- vcf = OUTDIR / f" { OUTPUT_NAME } .annotated.vcf"
160+ vcf = OUTDIR / "{sample }.annotated.vcf"
184161 output :
185- tsv = OUTDIR / f" { OUTPUT_NAME } .vcf_fields.tsv"
162+ tsv = OUTDIR / "{sample }.vcf_fields.tsv"
186163 log :
187- LOGDIR / "tsv_to_vcf" / "log.txt"
164+ LOGDIR / "tsv_to_vcf" / "{sample}. log.txt"
188165 shell :
189166 'SnpSift extractFields -s {params.sep:q} {input.vcf:q} {params.extract_columns} >{output.tsv:q} 2>{log:q}'
190167
@@ -194,11 +171,11 @@ rule format_vcf_fields_longer:
194171 params :
195172 sep = ","
196173 input :
197- tsv = OUTDIR / f" { OUTPUT_NAME } .vcf_fields.tsv"
174+ tsv = OUTDIR / "{sample }.vcf_fields.tsv"
198175 output :
199- tsv = OUTDIR / f" { OUTPUT_NAME } .vcf_fields.longer.tsv"
176+ tsv = OUTDIR / "{sample }.vcf_fields.longer.tsv"
200177 log :
201- LOGDIR / "format_vcf_fields_longer" / "log.txt"
178+ LOGDIR / "format_vcf_fields_longer" / "{sample}. log.txt"
202179 script :
203180 "../scripts/format_vcf_fields_longer.R"
204181
@@ -207,11 +184,22 @@ rule vcf_to_tsv:
207184 threads : 1
208185 conda : "../envs/renv.yaml"
209186 input :
210- ann_vcf = OUTDIR / f" { OUTPUT_NAME } .annotated.vcf" ,
211- pre_tsv = OUTDIR / f" { OUTPUT_NAME } .masked.prefiltered.tsv"
187+ ann_vcf = OUTDIR / "{sample }.annotated.vcf" ,
188+ pre_tsv = OUTDIR / "{sample }.masked.prefiltered.tsv"
212189 output :
213- tsv = OUTDIR / f" { OUTPUT_NAME } .masked.filtered.tsv"
190+ tsv = OUTDIR / "{sample }.masked.filtered.tsv"
214191 log :
215- LOGDIR / "vcf_to_tsv" / "log.txt"
192+ LOGDIR / "vcf_to_tsv" / "{sample}. log.txt"
216193 script :
217194 "../scripts/vcf_to_tsv.R"
195+
196+
197+ rule compile_variants :
198+ threads : 1
199+ input : expand (OUTDIR / "{sample}.masked.filtered.tsv" , sample = iter_samples ())
200+ output :
201+ tsv = OUTDIR / f"{ OUTPUT_NAME } .masked.filtered.tsv"
202+ log :
203+ LOGDIR / "compile_variants" / "log.txt"
204+ script :
205+ "../scripts/compile_variants.R"
0 commit comments