diff --git a/sc-preprocess.snake b/sc-preprocess.snake index 353a15c..f0b59e9 100644 --- a/sc-preprocess.snake +++ b/sc-preprocess.snake @@ -41,6 +41,9 @@ if config["action"]["clean"]: clean_files = expand('{o}/{s}.clean.fastq.gz', o = config['dirs']['fastq'], s = SAMPLE_NAMES) output_files.extend(clean_files) +quant_files = expand('{o}/{s}/quant.sf', o = config['dirs']['quant'], s = SAMPLE_NAMES) +output_files.extend(quant_files) + #-------------------------------------------------------------------------------# #---------------------------------- RUN :-) ------------------------------------# #-------------------------------------------------------------------------------# @@ -49,6 +52,7 @@ include: "src/auxiliary.snake" #include: "src/demultiplex.snake" # not yet implemented include: "src/reference.snake" include: "src/clean.snake" +include: "src/salmon.snake" if config["debug"]: print_debug() diff --git a/src/salmon.snake b/src/salmon.snake new file mode 100644 index 0000000..73b16ed --- /dev/null +++ b/src/salmon.snake @@ -0,0 +1,51 @@ +# vim: syntax=python tabstop=4 expandtab +# coding: utf-8 + +''' +@author: jpreuss + +Provides Salmon alignment-free quantification +''' + +SALMON_VERSION = subprocess.check_output("salmon -v", shell=True) + +rule salmon_index: + input: + REFERENCE_FASTA + output: + join(config['dirs']['ref'], 'salmon', basename(REFERENCE_FASTA).rstrip(".fa")) + threads: 30 + params: + flags = config['salmon']['index_flags'] if 'index_flags' in config.get('salmon', {}) else '' + log: + 'logs/salmon_index.log' + message: 'Creating Salmon index for {input}.' + version: SALMON_VERSION + shell: + """ + salmon index -p {threads} -t {input} -i {output} {params.flags} &> {log} + """ + +def salmon_input_r1(wildcards): + if config['action']['clean']: + return('{o}/{s}.clean.fastq.gz'.format(o = config['dirs']['fastq'], s = wildcards.sample)) + else: + return(SAMPLES[wildcards.sample]['URL_r1']) + +rule salmon_quant_se: + input: + r1 = salmon_input_r1, + index = rules.salmon_index.output + output: + config['dirs']['quant'] + '/{sample}/quant.sf' + params: + flags = config['salmon']['quant_flags'] if 'quant_flags' in config.get('salmon', {}) else '' + log: + 'logs/salmon_quant_{sample}.log' + message: 'Quantifying {wildcards.sample} with Salmon using {threads} threads.' + threads: 30 + version: SALMON_VERSION + shell: + """ + salmon quant -p {threads} -i {input.index} -l ISR -r {input.r1} -o {config[dirs][quant]}/{wildcards.sample} {params.flags} &> {log} + """