annotate Snakefile @ 39:6c879705d61b draft default tip

Uploaded
author chrisw
date Wed, 20 Nov 2019 02:56:18 +0000
parents 5656cfea6d97
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
1 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
2 Parameters:
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
3 - fastq_dump_args: arguments to pass to fastq dumping tool
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
4 - fastq_dump_retries: number of retry attempts before dying
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
5 - fastq_dump_tool: name of tool to run, e.g. 'fastq-dump' or 'fasterq-dump'
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
6 - star: arguments to pass to STAR aligner
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
7 - salmon_args: arguments to pass to salmon quant
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
8 - unique_qual: minimum MAPQ needed to be counted in unique BW [default: 10]
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
9 - bw_bed: name of BED file to use with bwtool
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
10 - max_unalign: maximum number of unaligned reads to save per run accession
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
11 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
12
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
13 STEPS = ['download', 'fastq_check', 'align', 'sort',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
14 'bamcount',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
15 'salmon',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
16 'align_unmapped',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
17 'extract_jx']
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
18
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
19 FILES = ['sjout.zst', 'fastq_check.tsv.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
20 'unmapped.bam', 'unmapped.fastq.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
21 'bamcount_nonref.csv.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
22 'bamcount_auc.tsv',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
23 'bamcount_frag.tsv',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
24 'Chimeric.out.junction.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
25 'all.exon_bw_count.zst', 'unique.exon_bw_count.zst',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
26 'all.bw.zst', 'unique.bw.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
27 'salmon.tsv.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
28 'jx_bed.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
29 'manifest'] + list(map(lambda x: x + '.log', STEPS))
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
30
14
f2258de365ee Uploaded
chrisw
parents: 13
diff changeset
31 #get rid of the pesky warnings about current paths
f2258de365ee Uploaded
chrisw
parents: 13
diff changeset
32 #and make sure we're not assuming any wrong relative paths
12
849ab444b4f1 Uploaded
chrisw
parents: 11
diff changeset
33 import os
849ab444b4f1 Uploaded
chrisw
parents: 11
diff changeset
34 config['output']=os.path.abspath(config['output'])
13
af1f49e5242d Uploaded
chrisw
parents: 12
diff changeset
35 config['temp']=os.path.abspath(config['temp'])
14
f2258de365ee Uploaded
chrisw
parents: 13
diff changeset
36 config['exon_bed']=os.path.abspath(config['exon_bed'])
f2258de365ee Uploaded
chrisw
parents: 13
diff changeset
37 config['ref']=os.path.abspath(config['ref'])
12
849ab444b4f1 Uploaded
chrisw
parents: 11
diff changeset
38
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
39 import subprocess
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
40 def run_command(cmd_args):
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
41 cmd_args = ' '.join(cmd_args)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
42 try:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
43 subprocess.check_call(args=cmd_args, shell=True)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
44 except subprocess.CalledProcessError as cpe:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
45 sys.stderr.write("error in run_command for command: %s\n" % cmd_args)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
46 raise cpe
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
47
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
48 import re
35
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
49 #limit the outputs/steps to only 1) STAR called junctions 2) all reads per-base coverage (BigWigs) 3) all reads exon summarized coverage 4) AUC (for QC)
37
5656cfea6d97 Uploaded
chrisw
parents: 35
diff changeset
50 STEPS_FILES_FILTER=re.compile(r'(unmapped)|(download)|(salmon)|(extract_jx)|(jx_bed)|(manifest)|(nonref)|(Chimeric)|(fastq_check)|(frag)|(unique)')
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
51 def remove_steps_files():
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
52 #modify STEP and FILES
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
53 #so we don't run download or unmapped steps
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
54 global FILES
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
55 global STEPS
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
56 for i in reversed(range(0,len(STEPS))):
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
57 f = STEPS[i]
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
58 if STEPS_FILES_FILTER.search(f):
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
59 del(STEPS[i])
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
60 for i in reversed(range(0,len(FILES))):
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
61 f = FILES[i]
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
62 if STEPS_FILES_FILTER.search(f):
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
63 del(FILES[i])
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
64
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
65
11
35ed7314038d Uploaded
chrisw
parents: 10
diff changeset
66 FASTQ_PATT=re.compile(r'([^_\.]+)(_(\d+))?\.((fastq)|fq)(\.gz)?$')
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
67 def prep_for_galaxy_run():
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
68 remove_steps_files()
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
69 try:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
70 os.mkdir(config['temp'])
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
71 except OSError as ose:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
72 pass
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
73 fastqs = config['inputs'].split(',')
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
74 m = FASTQ_PATT.search(fastqs[0])
11
35ed7314038d Uploaded
chrisw
parents: 10
diff changeset
75 run_acc = 'sample'
35ed7314038d Uploaded
chrisw
parents: 10
diff changeset
76 if m is not None:
35ed7314038d Uploaded
chrisw
parents: 10
diff changeset
77 run_acc = m.group(1)
12
849ab444b4f1 Uploaded
chrisw
parents: 11
diff changeset
78 study_acc = 'study'
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
79 if 'study' in config:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
80 study_acc = config['study']
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
81 genome = 'hg38'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
82 if 'genome' in config:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
83 genome = config['genome']
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
84 method = 'sra'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
85 # SRR,SRP,genome
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
86 # e.g. SRR1557855,SRP045778,ce10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
87 #create links which will be used in the align step
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
88 i = 1
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
89 for f in fastqs:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
90 newf = '%s/%s_%s_%s_%s_%d.fastq' % (config['temp'], run_acc, study_acc, genome, method, i)
15
3fa68a0d59c5 Uploaded
chrisw
parents: 14
diff changeset
91 if 'compressed' in config:
3fa68a0d59c5 Uploaded
chrisw
parents: 14
diff changeset
92 run_command(['zcat',f,'>',newf])
3fa68a0d59c5 Uploaded
chrisw
parents: 14
diff changeset
93 else:
3fa68a0d59c5 Uploaded
chrisw
parents: 14
diff changeset
94 os.symlink(os.path.abspath(f), newf)
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
95 #create fastq 0
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
96 if i == 1:
15
3fa68a0d59c5 Uploaded
chrisw
parents: 14
diff changeset
97 os.symlink(os.path.abspath(newf), '%s/%s_%s_%s_%s_%d.fastq' % (config['temp'], run_acc, study_acc, genome, method, 0))
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
98 i += 1
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
99 #create fastq 2 if not paired
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
100 if i == 2:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
101 open('%s/%s_%s_%s_%s_%d.fastq' % (config['temp'], run_acc, study_acc, genome, method, 2), "w").close()
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
102 return([run_acc, study_acc, genome, method])
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
103
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
104
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
105 def get_accessions(wildcards):
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
106 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
107 Grouping of SRRs with the same SRP could happen here
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
108 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
109 #if running under galaxy where the user will input the
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
110 #FASTQs, study, and genome directly
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
111 if 'inputs' in config:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
112 (run_acc, study_acc, genome, method) = prep_for_galaxy_run()
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
113 for ext in FILES:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
114 yield os.path.join(config['output'], '%s_%s_%s_%s.%s' % (run_acc, study_acc, genome, method, ext))
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
115 #here to get the make_galaxy_links rule to fire
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
116 yield os.path.join(config['output'], '%s_%s_%s_%s.done' % (run_acc, study_acc, genome, method))
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
117 #not running under galaxy, takes a list of accessions
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
118 else:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
119 for fn in config['input'].split():
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
120 with open(fn, 'r') as fh:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
121 for ln in fh:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
122 if ln.count(',') < 2:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
123 continue
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
124 toks = ln.rstrip().split(',')
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
125 assert 3 <= len(toks) <= 4
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
126 method = 'sra'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
127 if len(toks) == 4:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
128 method = toks[3]
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
129 # SRR,SRP,genome
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
130 # e.g. SRR1557855,SRP045778,ce10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
131 for ext in FILES:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
132 yield os.path.join(config['output'], '%s_%s_%s_%s.%s' % (toks[0], toks[1], toks[2], method, ext))
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
133
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
134 rule all:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
135 input:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
136 get_accessions
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
137
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
138 rule make_manifest:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
139 input:
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
140 config['output'] + '/{quad}.salmon.tsv.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
141 config['output'] + '/{quad}.sjout.zst',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
142 config['output'] + '/{quad}.jx_bed.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
143 config['output'] + '/{quad}.Chimeric.out.junction.zst',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
144 config['output'] + '/{quad}.unmapped.bam',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
145 config['output'] + '/{quad}.unmapped.fastq.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
146 config['output'] + '/{quad}.bamcount_nonref.csv.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
147 config['output'] + '/{quad}.bamcount_auc.tsv',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
148 config['output'] + '/{quad}.bamcount_frag.tsv',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
149 config['output'] + '/{quad}.fastq_check.tsv.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
150 config['output'] + '/{quad}.all.exon_bw_count.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
151 config['output'] + '/{quad}.unique.exon_bw_count.zst',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
152 config['output'] + '/{quad}.all.bw.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
153 config['output'] + '/{quad}.unique.bw.zst',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
154 config['output'] + '/{quad}.align.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
155 config['output'] + '/{quad}.extract_jx.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
156 config['output'] + '/{quad}.bamcount.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
157 config['output'] + '/{quad}.align_unmapped.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
158 config['output'] + '/{quad}.download.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
159 config['output'] + '/{quad}.fastq_check.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
160 config['output'] + '/{quad}.sort.log',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
161 config['output'] + '/{quad}.salmon.log'
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
162 output:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
163 config['output'] + '/{quad}.manifest'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
164 params:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
165 quad=lambda wildcards: wildcards.quad
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
166 run:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
167 with open(output[0], 'wt') as fh:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
168 for fn in FILES:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
169 fh.write(params.quad + "." + fn + '\n')
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
170
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
171 def galaxy_link_files(op):
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
172 remove_steps_files()
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
173 a = [op + '/' + f for f in FILES]
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
174 return a
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
175
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
176 rule make_galaxy_links:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
177 input:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
178 config['output'] + '/{quad}.sjout.zst',
35
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
179 #config['output'] + '/{quad}.fastq_check.tsv.zst',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
180 config['output'] + '/{quad}.bamcount_auc.tsv',
35
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
181 #config['output'] + '/{quad}.bamcount_frag.tsv',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
182 config['output'] + '/{quad}.all.exon_bw_count.zst',
35
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
183 #config['output'] + '/{quad}.unique.exon_bw_count.zst',
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
184 config['output'] + '/{quad}.all.bw.zst',
35
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
185 #config['output'] + '/{quad}.unique.bw.zst',
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
186 #config['output'] + '/{quad}.fastq_check.log',
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
187 #config['output'] + '/{quad}.align.log',
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
188 #config['output'] + '/{quad}.sort.log',
e4dc3d0c31de Uploaded
chrisw
parents: 32
diff changeset
189 #config['output'] + '/{quad}.bamcount.log',
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
190 output:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
191 config['output'] + '/{quad}.done'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
192 params:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
193 quad=lambda wildcards: wildcards.quad,
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
194 out=galaxy_link_files(config['output'])
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
195 run:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
196 for (i,fn) in enumerate(input):
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
197 os.symlink(os.path.abspath(fn), params.out[i])
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
198 os.symlink(os.path.abspath(input[-1]), output[0])
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
199
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
200
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
201 rule bamcount:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
202 input:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
203 bam=config['temp'] + '/{quad}-sorted.bam',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
204 bamidx=config['temp'] + '/{quad}-sorted.bam.bai',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
205 bed=lambda wildcards: '%s/%s/gtf/%s' % (config['ref'], wildcards.quad.split('_')[2], config.get('bw_bed', 'exons.bed'))
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
206 output:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
207 nonref=config['output'] + '/{quad}.bamcount_nonref.csv.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
208 auc=config['output'] + '/{quad}.bamcount_auc.tsv',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
209 frag=config['output'] + '/{quad}.bamcount_frag.tsv',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
210 all_bw=config['output'] + '/{quad}.all.bw.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
211 unique_bw=config['output'] + '/{quad}.unique.bw.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
212 all_bw_count=config['output'] + '/{quad}.all.exon_bw_count.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
213 unique_bw_count=config['output'] + '/{quad}.unique.exon_bw_count.zst'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
214 log:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
215 config['output'] + '/{quad}.bamcount.log'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
216 params:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
217 srr=lambda wildcards: wildcards.quad.split('_')[0],
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
218 uniq_qual=config.get('unique_qual', 10)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
219 threads: 4
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
220 shell:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
221 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
222 TMP={config[temp]}/{params.srr}_bamcount
14
f2258de365ee Uploaded
chrisw
parents: 13
diff changeset
223 bamcount {input.bam} \
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
224 --threads {threads} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
225 --coverage \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
226 --no-head \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
227 --require-mdz \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
228 --min-unique-qual {params.uniq_qual} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
229 --frag-dist ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
230 --bigwig ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
231 --annotation {input.bed} ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
232 --auc ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
233 --alts ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
234 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
235
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
236 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
237 # --alts
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
238 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
239
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
240 (time zstd ${{TMP}}.alts.tsv -o {output.nonref}) 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
241 size=$(wc -c < {output.nonref})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
242 echo "COUNT_NonrefSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
243 rm -f ${{TMP}}.alts.tsv
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
244
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
245 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
246 # --auc
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
247 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
248 mv ${{TMP}}.auc.tsv {output.auc}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
249 size=$(wc -c < {output.auc})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
250 echo "COUNT_AucSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
251 rm -f ${{TMP}}.auc.tsv
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
252
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
253 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
254 # --frag-dist
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
255 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
256 mv ${{TMP}}.frags.tsv {output.frag}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
257 size=$(wc -c < {output.frag})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
258 echo "COUNT_FragDistSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
259 rm -f ${{TMP}}.frags.tsv
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
260
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
261 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
262 # --bigwig
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
263 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
264
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
265 (time zstd ${{TMP}}.all.bw -o {output.all_bw}) 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
266 size=$(wc -c < {output.all_bw})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
267 echo "COUNT_BwSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
268 rm -f ${{TMP}}.all.bw
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
269
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
270 (time zstd ${{TMP}}.unique.bw -o {output.unique_bw}) 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
271 size=$(wc -c < {output.unique_bw})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
272 echo "COUNT_BwSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
273 rm -f ${{TMP}}.unique.bw
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
274
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
275 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
276 # --annotation
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
277 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
278
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
279 (time zstd ${{TMP}}.all.tsv -o {output.all_bw_count}) 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
280 size=$(wc -c < {output.all_bw_count})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
281 echo "COUNT_BwQuantSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
282 rm -f ${{TMP}}.all.tsv
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
283
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
284 (time zstd ${{TMP}}.unique.tsv -o {output.unique_bw_count}) 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
285 size=$(wc -c < {output.unique_bw_count})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
286 echo "COUNT_BwQuantSize ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
287 rm -f ${{TMP}}.unique.tsv
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
288
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
289 # Check that all temporaries were properly purged
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
290 set +o pipefail ; num_files=$(ls -d ${{TMP}}* 2>/dev/null | wc -l)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
291 if (( $num_files > 0 )) ; then
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
292 echo "Failed to purge files (ignore . and ..): $(ls -ad ${{TMP}}*)"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
293 exit 1
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
294 fi
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
295
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
296 echo "COUNT_BamcountComplete 1"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
297 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
298
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
299 rule bw_zstd:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
300 input:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
301 config['temp'] + '/{prefix}.bw'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
302 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
303 config['output'] + '/{prefix}.bw.zst'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
304 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
305 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
306 zstd {input} -o {output}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
307 size=$(wc -c < {output})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
308 echo "COUNT_BwBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
309 echo "COUNT_BwZstdComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
310 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
311
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
312 rule sort:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
313 input:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
314 config['temp'] + '/{quad}.bam'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
315 wildcard_constraints:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
316 quad="[^-]+"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
317 output:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
318 bam=temp(config['temp'] + '/{quad}-sorted.bam'),
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
319 bai=temp(config['temp'] + '/{quad}-sorted.bam.bai')
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
320 log:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
321 config['output'] + '/{quad}.sort.log'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
322 params:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
323 srr=lambda wildcards: wildcards.quad.split('_')[0]
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
324 threads: 8
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
325 shell:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
326 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
327 TMP="{config[temp]}/sort_temp.{params.srr}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
328 mkdir -p ${{TMP}}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
329 time samtools sort \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
330 -T ${{TMP}}/samtools_temp \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
331 -@ {threads} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
332 -m 64M \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
333 -o {output.bam} {input} 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
334 rm -rf ${{TMP}}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
335 size=$(wc -c < {output.bam})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
336 echo "COUNT_SortedBAMBytes ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
337
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
338 time samtools index -@ {threads} {output.bam} 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
339 echo "COUNT_SortComplete 1"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
340 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
341
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
342 rule salmon:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
343 input:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
344 reads0=config['temp'] + '/{quad}_0.fastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
345 reads1=config['temp'] + '/{quad}_1.fastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
346 reads2=config['temp'] + '/{quad}_2.fastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
347 index1=lambda wildcards: '%s/%s/salmon_index/hash.bin' % (config['ref'], wildcards.quad.split('_')[2]),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
348 index2=lambda wildcards: '%s/%s/salmon_index/sa.bin' % (config['ref'], wildcards.quad.split('_')[2])
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
349 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
350 config['output'] + '/{quad}.salmon.tsv.zst'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
351 log:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
352 config['output'] + '/{quad}.salmon.log'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
353 params:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
354 index_base=lambda wildcards: '%s/%s/salmon_index' % (config['ref'], wildcards.quad.split('_')[2]),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
355 salmon_args=config.get('salmon_args', '')
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
356 threads: 8
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
357 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
358 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
359 READ_FILES="-r {input.reads0}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
360 if [[ -s {input.reads2} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
361 READ_FILES="-1 {input.reads1} -2 {input.reads2}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
362 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
363 if set -o pipefail && time salmon quant \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
364 --libType U \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
365 --quiet \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
366 --validateMappings \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
367 -i {params.index_base} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
368 -p {threads} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
369 {params.salmon_args} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
370 ${{READ_FILES}} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
371 --output salmon_quant \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
372 --minAssignedFrags 1 \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
373 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
374 then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
375 echo "COUNT_SalmonSuccess 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
376
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
377 time zstd salmon_quant/quant.sf -o {output} 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
378 size=$(wc -c < {output})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
379 echo "COUNT_SalmonQuantBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
380 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
381 touch {output}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
382 echo "COUNT_SalmonFailure 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
383 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
384
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
385 rm -rf salmon_quant
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
386 echo "COUNT_SalmonComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
387 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
388
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
389 rule align_unmapped:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
390 input:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
391 unmapped1=config['temp'] + '/{quad}_1.unmappedfastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
392 unmapped2=config['temp'] + '/{quad}_2.unmappedfastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
393 index=lambda wildcards: '%s/%s/unmapped_hisat2_idx/genome.1.ht2' % (config['ref'], wildcards.quad.split('_')[2])
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
394 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
395 bam=config['output'] + '/{quad}.unmapped.bam',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
396 sample=config['output'] + '/{quad}.unmapped.fastq.zst'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
397 log:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
398 config['output'] + '/{quad}.align_unmapped.log'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
399 params:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
400 index_base=lambda wildcards: '%s/%s/unmapped_hisat2_idx/genome' % (config['ref'], wildcards.quad.split('_')[2]),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
401 srr=lambda wildcards: wildcards.quad.split('_')[0],
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
402 hisat2_params=config.get('hisat2', ''),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
403 max_unalign=config.get('max_unalign', 100000)
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
404 threads: 16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
405 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
406 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
407 TMP="{config[temp]}/align_unmapped_temp.{params.srr}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
408 READ_FILES="-1 {input.unmapped1} -2 {input.unmapped2}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
409 if [[ ! -s {input.unmapped2} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
410 READ_FILES="-U {input.unmapped1}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
411 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
412 time hisat2 \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
413 $READ_FILES \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
414 -t --mm \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
415 -x {params.index_base} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
416 --threads {threads} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
417 {params.hisat2_params} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
418 --un ${{TMP}}.un \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
419 --un-conc ${{TMP}}.un_conc \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
420 -S ${{TMP}}.sam \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
421 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
422
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
423 #
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
424 # Make BAM file out of aligned reads
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
425 #
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
426 time samtools view \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
427 -b -F 4 \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
428 -o {output.bam} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
429 ${{TMP}}.sam \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
430 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
431 rm -f ${{TMP}}.sam
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
432
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
433 #
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
434 # Save a subset of the doubly unaligned reads
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
435 #
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
436 if [[ ! -s {input.unmapped2} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
437 # unpaired
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
438 fastq-sample \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
439 -n {params.max_unalign} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
440 -o ${{TMP}}.samp \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
441 ${{TMP}}.un
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
442 rm -f ${{TMP}}.un
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
443 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
444 # paired-end
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
445 fastq-sample \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
446 -n {params.max_unalign} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
447 -o ${{TMP}}.samp \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
448 ${{TMP}}.1.un_conc ${{TMP}}.2.un_conc
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
449 rm -f ${{TMP}}.1.un_conc ${{TMP}}.2.un_conc
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
450
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
451 # interleave the two output fastqs into single file
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
452 paste ${{TMP}}.samp.1.fastq ${{TMP}}.samp.2.fastq \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
453 | paste - - - - \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
454 | awk -v OFS="\n" -v FS="\t" '{{print($1,$3,$5,$7,$2,$4,$6,$8)}}' \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
455 > ${{TMP}}.samp.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
456 rm -f ${{TMP}}.samp.1.fastq ${{TMP}}.samp.2.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
457 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
458
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
459 test -f ${{TMP}}.samp.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
460 time zstd ${{TMP}}.samp.fastq -o {output.sample} 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
461 size=$(wc -c < {output.sample})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
462 echo "COUNT_UnmappedSampleBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
463 rm -f ${{TMP}}.samp.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
464
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
465 size=$(wc -c < {output.bam})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
466 echo "COUNT_UnmappedBamBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
467
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
468 echo "COUNT_AlignUnmappedComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
469 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
470
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
471 rule extract_jx:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
472 input:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
473 bam=config['temp'] + '/{quad}-sorted.bam',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
474 bamidx=config['temp'] + '/{quad}-sorted.bam.bai',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
475 fa=lambda wildcards: '%s/%s/fasta/genome.fa' % (config['ref'], wildcards.quad.split('_')[2]),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
476 gtf=lambda wildcards: '%s/%s/gtf/genes.gtf' % (config['ref'], wildcards.quad.split('_')[2])
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
477 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
478 config['output'] + '/{quad}.jx_bed.zst'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
479 params:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
480 srr=lambda wildcards: wildcards.quad.split('_')[0]
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
481 log:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
482 config['output'] + '/{quad}.extract_jx.log'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
483 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
484 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
485 TMP="{config[temp]}/extract_jx.{params.srr}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
486 time regtools junctions extract \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
487 -i 20 -a 1 \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
488 -o ${{TMP}}.jx_tmp \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
489 {input.bam} 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
490 time zstd ${{TMP}}.jx_tmp -o {output} 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
491 rm -f ${{TMP}}.jx_tmp
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
492
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
493 size=$(wc -c < {output})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
494 echo "COUNT_ExtractJxBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
495
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
496 echo "COUNT_ExtractJxComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
497 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
498
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
499 rule align:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
500 input:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
501 reads0=config['temp'] + '/{quad}_0.fastq',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
502 reads1=config['temp'] + '/{quad}_1.fastq',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
503 reads2=config['temp'] + '/{quad}_2.fastq',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
504 index1=lambda wildcards: '%s/%s/star_idx/SAindex' % (config['ref'], wildcards.quad.split('_')[2]),
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
505 index2=lambda wildcards: '%s/%s/star_idx/SA' % (config['ref'], wildcards.quad.split('_')[2])
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
506 wildcard_constraints:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
507 quad="[^-]+"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
508 output:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
509 bam=temp(config['temp'] + '/{quad}.bam'),
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
510 jxs=config['output'] + '/{quad}.sjout.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
511 chimeric=config['output'] + '/{quad}.Chimeric.out.junction.zst',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
512 unmapped1=config['temp'] + '/{quad}_1.unmappedfastq',
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
513 unmapped2=config['temp'] + '/{quad}_2.unmappedfastq'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
514 log:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
515 config['output'] + '/{quad}.align.log'
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
516 params:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
517 index_base=lambda wildcards: '%s/%s/star_idx' % (config['ref'], wildcards.quad.split('_')[2]),
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
518 srr=lambda wildcards: wildcards.quad.split('_')[0],
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
519 star_params="%s %s" % (config.get('star', ''), '--genomeLoad LoadAndRemove' if 'inputs' not in config else '')
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
520 threads: 16
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
521 shell:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
522 """
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
523 READ_FILES="{input.reads0}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
524 if [[ -s {input.reads2} ]] ; then
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
525 READ_FILES="{input.reads1} {input.reads2}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
526 fi
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
527 TMP="{config[temp]}/align_temp.{params.srr}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
528 rm -rf ${{TMP}}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
529 time STAR \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
530 {params.star_params} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
531 --runMode alignReads \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
532 --runThreadN {threads} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
533 --genomeDir {params.index_base} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
534 --readFilesIn ${{READ_FILES}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
535 --twopassMode None \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
536 --outTmpDir ${{TMP}} \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
537 --outReadsUnmapped Fastx \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
538 --outMultimapperOrder Random \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
539 --outSAMreadID Number \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
540 --outSAMtype BAM Unsorted \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
541 --outSAMmode NoQS \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
542 --outSAMattributes NH MD \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
543 --chimOutType Junctions \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
544 --chimOutJunctionFormat 1 \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
545 --chimSegmentReadGapMax 3 \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
546 --chimJunctionOverhangMin 12 \
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
547 --chimSegmentMin 12 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
548
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
549 # Full set of output files:
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
550 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
551 # Aligned.out.bam
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
552 # Chimeric.out.junction
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
553 # Log.final.out
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
554 # Log.out
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
555 # Log.progress.out
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
556 # SJ.out.tab
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
557 # Unmapped.out.mate1
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
558 # Unmapped.out.mate2 (if any reads were paired-end)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
559
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
560 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
561 # Logs
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
562 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
563 rm -rf ${{TMP}}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
564 cat Log.out >> {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
565 cat Log.final.out >> {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
566 rm -f Log*.out
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
567
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
568 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
569 # Junctions
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
570 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
571 test -f SJ.out.tab
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
572 time zstd SJ.out.tab -o {output.jxs} 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
573 rm -f SJ.out.tab
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
574 size=$(wc -c < {output.jxs})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
575 echo "COUNT_CompressedJxBytes ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
576
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
577 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
578 # Chimerics
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
579 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
580 test -f Chimeric.out.junction
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
581 test -s Chimeric.out.junction
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
582 sort -k1,1 -n -k2,2 Chimeric.out.junction > Chimeric.out.junction.sorted
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
583 time zstd Chimeric.out.junction.sorted -o {output.chimeric} 2>&1 | tee -a {log}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
584 rm -f Chimeric.out.junction Chimeric.out.junction.sorted
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
585 size=$(wc -c < {output.chimeric})
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
586 echo "COUNT_ChimericBytes ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
587
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
588 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
589 # Unmapped
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
590 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
591 touch {output.unmapped2}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
592 test -f Unmapped.out.mate1
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
593 mv Unmapped.out.mate1 {output.unmapped1}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
594 if [[ -f Unmapped.out.mate2 ]] ; then
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
595 mv Unmapped.out.mate2 {output.unmapped2}
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
596 fi
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
597
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
598 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
599 # Alignments
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
600 #
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
601 size=$(wc -c < Aligned.out.bam)
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
602 echo "COUNT_BAMBytes ${{size}}"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
603 mv Aligned.out.bam {output.bam}
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
604
10
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
605 echo "COUNT_AlignComplete 1"
f43dd6f7c687 Uploaded
chrisw
parents:
diff changeset
606 """
16
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
607
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
608 rule fastq_check:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
609 input:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
610 reads0=config['temp'] + '/{quad}_0.fastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
611 reads1=config['temp'] + '/{quad}_1.fastq',
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
612 reads2=config['temp'] + '/{quad}_2.fastq'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
613 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
614 config['output'] + '/{quad}.fastq_check.tsv.zst'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
615 log:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
616 config['output'] + '/{quad}.fastq_check.log'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
617 params:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
618 srr=lambda wildcards: wildcards.quad.split('_')[0]
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
619 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
620 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
621 TMP="{config[temp]}/fastq_check-{params.srr}.tsv"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
622 touch ${{TMP}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
623 if [[ -s {input.reads0} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
624 time seqtk fqchk -q0 {input.reads0} >>${{TMP}} 2>>{log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
625 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
626 if [[ -s {input.reads1} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
627 time seqtk fqchk -q0 {input.reads1} >>${{TMP}} 2>>{log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
628 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
629 if [[ -s {input.reads2} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
630 time seqtk fqchk -q0 {input.reads2} >>${{TMP}} 2>>{log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
631 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
632 time zstd ${{TMP}} -o {output} 2>&1 | tee -a {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
633 size=$(wc -c < {output})
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
634 echo "COUNT_FastqCheckBytes ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
635
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
636 echo "COUNT_FastqCheckComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
637 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
638
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
639 rule download:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
640 output:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
641 temp(config['temp'] + '/{quad}_0.fastq'),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
642 temp(config['temp'] + '/{quad}_1.fastq'),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
643 temp(config['temp'] + '/{quad}_2.fastq')
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
644 log:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
645 config['output'] + '/{quad}.download.log'
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
646 params:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
647 srr=lambda wildcards: wildcards.quad.split('_')[0],
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
648 method=lambda wildcards: wildcards.quad.split('_')[3],
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
649 fd_params=config.get('fastq_dump_args', ''),
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
650 retries=config.get('fastq_dump_retries', '5')
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
651 threads: 4
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
652 shell:
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
653 """
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
654 set -x
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
655 SUCCESS=0
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
656 TIMEOUT=10
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
657 PARAMS=""
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
658 TMP="{config[temp]}/dl-{params.srr}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
659 ! test -d ${{TMP}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
660
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
661 if [[ {params.method} == "sra" ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
662 USE_FASTERQ=1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
663 for i in {{ 1..{params.retries} }} ; do
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
664 if time prefetch -t fasp -O ${{TMP}} -L info {params.srr} 2>&1 >> {log} ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
665 SUCCESS=1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
666 break
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
667 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
668 echo "COUNT_SraRetries 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
669 TIMEOUT=$((${{TIMEOUT}} * 2))
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
670 sleep ${{TIMEOUT}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
671 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
672 done
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
673 if (( $SUCCESS == 0 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
674 echo "COUNT_SraFailures 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
675 exit 1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
676 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
677 test -f ${{TMP}}/*.sra
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
678 size=$(cat ${{TMP}}/*.sra | wc -c)
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
679 echo "COUNT_SraBytesDownloaded ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
680 if (( ${{USE_FASTERQ}} == 1 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
681 time fasterq-dump ${{TMP}}/*.sra \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
682 -e {threads} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
683 -t ${{TMP}} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
684 -L info \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
685 --split-files \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
686 --skip-technical \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
687 -o {params.srr}.fastq \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
688 2>&1 >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
689 test -f {params.srr}_2.fastq || mv {params.srr}.fastq {params.srr}_0.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
690 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
691 time fastq-dump ${{TMP}}/*.sra \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
692 -L info \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
693 --split-files \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
694 --skip-technical \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
695 -O . \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
696 2>&1 >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
697 test -f {params.srr}_2.fastq || mv {params.srr}_1.fastq {params.srr}_0.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
698 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
699 rm -rf ${{TMP}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
700 elif [[ {params.method} == "gdc" ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
701 TOKEN=~/gdc/latest.txt
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
702 if [[ ! -f ${{TOKEN}} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
703 echo "ERROR: no GDC token file found at ${{TOKEN}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
704 exit 1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
705 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
706 for i in {{ 1..{params.retries} }} ; do
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
707 if time gdc-client download \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
708 -t ${{TOKEN}} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
709 --log-file {{TMP}}/log.txt \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
710 -d {{TEMP}} \
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
711 {params.srr} 2>&1 >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
712 then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
713 SUCCESS=1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
714 break
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
715 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
716 echo "COUNT_GdcRetries 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
717 TIMEOUT=$((${{TIMEOUT}} * 2))
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
718 sleep ${{TIMEOUT}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
719 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
720 done
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
721 if (( $SUCCESS == 0 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
722 echo "COUNT_GdcFailures 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
723 exit 1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
724 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
725 test -d {{TEMP}}/{params.srr}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
726 test -f {{TEMP}}/{params.srr}/*.tar.gz
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
727
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
728 echo "=== gdc-client log.txt begin ===" >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
729 cat {{TMP}}/log.txt >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
730 echo "=== gdc-client log.txt end===" >> {log}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
731
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
732 size=$(cat {{TEMP}}/{params.srr}/*.tar.gz | wc -c)
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
733 echo "COUNT_GdcBytesDownloaded ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
734
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
735 tar zxvf {{TEMP}}/{params.srr}/*.tar.gz
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
736 rm -rf {{TEMP}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
737
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
738 num_1s=$(ls -1 *_1.fastq | wc -l)
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
739 num_2s=$(ls -1 *_2.fastq | wc -l)
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
740 if (( ${{num_1s}} == 0 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
741 echo "ERROR: No _1.fastq files output"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
742 exit 1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
743 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
744 if (( ${{num_1s}} > 1 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
745 echo "ERROR: More than one _1.fastq file found"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
746 exit 1
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
747 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
748 if (( ${{num_2s}} == 0 )) ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
749 # unpaired
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
750 mv *_1.fastq {params.srr}_0.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
751 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
752 # paired-end
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
753 mv *_1.fastq {params.srr}_1.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
754 mv *_2.fastq {params.srr}_2.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
755 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
756 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
757
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
758 # Next chunk expects the FASTQ files to exist in the current directory
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
759 # named {{params.srr}}_{{0,1,2}}.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
760 size=0
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
761 for i in {{0..2}} ; do
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
762 fn={params.srr}_${{i}}.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
763 if [[ -f ${{fn}} ]] ; then
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
764 echo "COUNT_FilesDownloaded 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
765 else
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
766 touch ${{fn}}
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
767 fi
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
768 size=$((${{size}} + $(wc -c < ${{fn}})))
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
769 mv ${{fn}} {config[temp]}/{wildcards.quad}_${{i}}.fastq
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
770 done
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
771 echo "COUNT_BytesDownloaded ${{size}}"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
772 echo "COUNT_DownloadComplete 1"
d2770bc432e1 Uploaded
chrisw
parents: 15
diff changeset
773 """