From a36902f0dc50d800d7c06894dcdadda8737f3db2 Mon Sep 17 00:00:00 2001
From: ticlla <monicaroxana.ticllaccenhua@unibas.ch>
Date: Wed, 27 Nov 2019 14:34:15 +0100
Subject: [PATCH] add rule get_human_ref to automatically download human
 reference and place it in the METASNK_DBS directory

---
 Snakefile               |   6 +-
 config.yaml             |  25 ++++----
 images/buildDBS_dag.png | Bin 19257 -> 22977 bytes
 rules/preprocess.smk    | 129 ++++++++++++++++++++--------------------
 rules/setup_rules.smk   |  24 ++++++--
 5 files changed, 101 insertions(+), 83 deletions(-)

diff --git a/Snakefile b/Snakefile
index efb213f..d56cc9b 100644
--- a/Snakefile
+++ b/Snakefile
@@ -77,6 +77,8 @@ SHUB_PREQC_SIF = 'shub://mticlla/MetagenomicSnake:preqc_v0_1'
 SHUB_METAPROF_SIF = 'shub://mticlla/OmicSingularities:metaprof'
 PREQC_SIF = METASNK_DB_DIR+'/singularity/MetagenomicSnake_preqc_v0_1.sif'
 METAPROF_SIF = METASNK_DB_DIR+'/singularity/OmicSingularities_metaprof.sif'
+HUMAN_REF = eval(config['preprocess']['filter_human']['bbmap_reference'])
+
 ##----------------------------------------------------------------------------##
 ## Fastq files to be processed
 ##----------------------------------------------------------------------------##
@@ -127,7 +129,9 @@ rule buildDBS:
         METASNK_DB_DIR+'/strainphlan_markers/all_markers.fasta',
         METASNK_DB_DIR+'/humann2_databases/chocophlan',
         METASNK_DB_DIR+'/humann2_databases/uniref',
-        METASNK_DB_DIR+'/humann2_databases/utility_mapping'
+        METASNK_DB_DIR+'/humann2_databases/utility_mapping',
+        HUMAN_REF
+        #METASNK_DB_DIR+'/ref_genomes/hg19_main_mask_ribo_animal_allplant_allfungus.fa.gz'
 
 rule rawQC:
     input:
diff --git a/config.yaml b/config.yaml
index a165deb..e2a29fd 100644
--- a/config.yaml
+++ b/config.yaml
@@ -3,12 +3,12 @@
 # one row per sample. It can be parsed easily via pandas.
 
 # Set PATHS
-# WARNING: 
+# WARNING:
 #   MetagenomicSnake uses singularity containers to run the workflow.
 #   Bind access to those paths if needed
-#   Singularity's --bind/-B option can be specified multiple times, 
+#   Singularity's --bind/-B option can be specified multiple times,
 #   or a comma-delimited string of bind path specifications can be used.
-#   
+#
 
 # Absolute PATH to folder where to find fastq files
 RAW_DIR: '/home/mticlla/Documents/Git_repositories/metagenomicsnake_testdata/data/raw'
@@ -39,16 +39,21 @@ preprocess:
     bbmap_usemodulo: t
     bbmap_mem: 10
 
-    # PATH to reference(e.g human) genome
-    # -----------------------------------
-    # Masked hg19 kindly provided by Brian Brushnell and 
-    # manually dowloaded from
+    # PATH to reference(e.g human) genome to be removed
+    # -------------------------------------------------
+    # MetaSnk uses by default the masked hg19 genome, kindly provided by Brian Brushnell
+     # and dowloaded from
     # https://drive.google.com/open?id=0B3llHR93L14wd0pSSnFULUlhcUk
     # How the human genome was masked is explained in this SEQanswers entry
     # http://seqanswers.com/forums/archive/index.php/t-42552.html
-    bbmap_reference: '/home/mticlla/Documents/Git_repositories/metagenomicsnake/ref/hg19_main_mask_ribo_animal_allplant_allfungus.fa.gz'
-    bbmap_ref_dir: '/home/mticlla/Documents/Git_repositories/metagenomicsnake/ref/ref_bbsplit'
-    
+    # If you want to use a different human reference genome, provide the absolute path below
+    bbmap_reference: "METASNK_DB_DIR+'/ref_genomes/hg19_main_mask_ribo_animal_allplant_allfungus.fa.gz'"
+
+    # PATH to the folder where to place the indexed human reference genomes
+    # ---------------------------------------------------------------------
+    # The reference genome needs to be indexed, by default the indexed files are
+    # placed in your $METASNK_DBS dir (set during the installation steps of MetaSnk)
+    bbmap_ref_dir: "METASNK_DB_DIR+'/ref_genomes/ref_bbsplit'"
 phlanprof:
     strphlan_clade_profiling:
         metadatas:
diff --git a/images/buildDBS_dag.png b/images/buildDBS_dag.png
index 98b56ebd4a6191fb72d2be93e7be2a71bc2eaede..a00062d63045f65f7a72bd23e4ca24426ac60cdb 100644
GIT binary patch
literal 22977
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
J);T3K0RT8b*lz#;

literal 19257
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
F0szDeX~F;i

diff --git a/rules/preprocess.smk b/rules/preprocess.smk
index 2938d73..0066ba5 100644
--- a/rules/preprocess.smk
+++ b/rules/preprocess.smk
@@ -25,50 +25,48 @@ localrules:
 ##----------------------------------------------------------------------------##
 ## Local variables
 ##----------------------------------------------------------------------------##
-#singularity_img = 'shub://mticlla/MetagenomicSnake:preqc_v0_1'
 singularity_preqc = PREQC_SIF
-BBMAP_REF = config['preprocess']['filter_human']['bbmap_reference']
-BBMAP_REF_DIR = config['preprocess']['filter_human']['bbmap_ref_dir']
-
+BBMAP_REF = HUMAN_REF
+BBMAP_REF_DIR = eval(config['preprocess']['filter_human']['bbmap_ref_dir'])
 ##----------------------------------------------------------------------------##
 ## Helper functions
 ##----------------------------------------------------------------------------##
 # Helper functions to create list of files for MultiQC
 
 def mqc_trim_adapters_inputs(wildcards):
-    list_files = ['{}/{}/preQC/atrimmed/{}.fastp.json'.format(OUT_DIR, 
-                                                            value, 
-                                                            FASTQS[ix]) 
-                for ix,value in enumerate(DATASETSX) 
+    list_files = ['{}/{}/preQC/atrimmed/{}.fastp.json'.format(OUT_DIR,
+                                                            value,
+                                                            FASTQS[ix])
+                for ix,value in enumerate(DATASETSX)
                 if value==wildcards.dataset]
     return(list_files)
 
 def mqc_filter_human_inputs(wildcards):
-    list_files = ['{}/{}/preQC/bfiltered/{}.clean.stats'.format(OUT_DIR, 
-                                                            value, 
-                                                            FASTQS[ix]) 
-                for ix,value in enumerate(DATASETSX) 
+    list_files = ['{}/{}/preQC/bfiltered/{}.clean.stats'.format(OUT_DIR,
+                                                            value,
+                                                            FASTQS[ix])
+                for ix,value in enumerate(DATASETSX)
                 if value==wildcards.dataset]
     return(list_files)
 
 def mqc_trim_3end_inputs(wildcards):
-    list_files = ['{}/{}/preQC/dfinaltrim/{}.clean.nodup.fastp.json'.format(OUT_DIR, 
-                                                                            value, 
+    list_files = ['{}/{}/preQC/dfinaltrim/{}.clean.nodup.fastp.json'.format(OUT_DIR,
+                                                                            value,
                                                                             FASTQS[ix])
-                  for ix,value in enumerate(DATASETSX) 
+                  for ix,value in enumerate(DATASETSX)
                   if value==wildcards.dataset]
     return(list_files)
 
 def list_concatenated_r1_fastqs(wildcards):
     list_r1 = ['{}/{}/preQC/emerged/{}-R1.fastq.gz'.format(OUT_DIR,
                                                           wildcards.dataset,
-                                                          value) 
+                                                          value)
                for ix,value in enumerate(SAMPLES) if DATASETS[ix]==wildcards.dataset]
     return(list_r1)
 def list_concatenated_r2_fastqs(wildcards):
     list_r2 = ['{}/{}/preQC/emerged/{}-R2.fastq.gz'.format(OUT_DIR,
                                                           wildcards.dataset,
-                                                          value) 
+                                                          value)
                for ix,value in enumerate(SAMPLES) if DATASETS[ix]==wildcards.dataset]
     return(list_r2)
 ##----------------------------------------------------------------------------##
@@ -83,14 +81,14 @@ def list_concatenated_r2_fastqs(wildcards):
 #   - limiting the N gase number (-n)
 #   - percentage of unqualified bases (-u)
 #   - average quality score (-e, default 0 means no requirement)
-# - remove adapters: enabled by default, fastp detects adapters by 
-#   per-read overlap analysis (seeks for the overlap of each read pair). 
-#   If fastp fails to find an overlap, It usess the provided the adapter 
-#   sequences (e.g Nextera XT adapters). 
+# - remove adapters: enabled by default, fastp detects adapters by
+#   per-read overlap analysis (seeks for the overlap of each read pair).
+#   If fastp fails to find an overlap, It usess the provided the adapter
+#   sequences (e.g Nextera XT adapters).
 #   Check this page from Illumina to know which adapters to remove:
 #   https://support.illumina.com/bulletins/2016/12/what-sequences-do-i-use-for-adapter-trimming.html
 # - base correction in overlapped regions
-# - trimming of the last base(s) for every read pair(this step preceeds 
+# - trimming of the last base(s) for every read pair(this step preceeds
 #   adapter removal)
 # - length filtering: discard reads shorter than a minimum length, after trimming
 #
@@ -187,8 +185,8 @@ rule filter_human:
 #
 rule index_human_ref:
     input:
-        # Masked hg19 kindly provided by Brian Brushnell and 
-        # manually dowloaded from
+        # Masked hg19 kindly provided by Brian Brushnell and
+        # dowloaded from
         # https://drive.google.com/open?id=0B3llHR93L14wd0pSSnFULUlhcUk
         reference = BBMAP_REF
     output:
@@ -281,7 +279,7 @@ rule trim_3end:
         --thread {threads}) &>{log}
         '''
 ###**THESE TARGET FILES ARE THE FINAL CLEAN**###
-# concatenate quality/length filtered, adapter-trimmed, cleaned, deduplicated and 
+# concatenate quality/length filtered, adapter-trimmed, cleaned, deduplicated and
 # quality-trimmed fastqs from the same samples
 rule concatenate_fastqs:
     input:
@@ -310,15 +308,15 @@ rule check_concatenation:
         inputs_r1 = list_concatenated_r1_fastqs,
         inputs_r2 = list_concatenated_r2_fastqs
     output:
-        concatenated_fastqs_list = OUT_DIR + '/{dataset}/preQC/summary_stats/' + 
+        concatenated_fastqs_list = OUT_DIR + '/{dataset}/preQC/summary_stats/' +
                                     '{dataset}_concatenation_all.done'
     #conda:'../envs/rawQC.yaml'
     run:
         import os
         from pathlib import Path
-        
+
         try:
-            sample_fastqs_exist = [os.path.exists(r1_file) and os.path.exists(r2_file) 
+            sample_fastqs_exist = [os.path.exists(r1_file) and os.path.exists(r2_file)
                                    for r1_file, r2_file in zip(input.inputs_r1,input.inputs_r2)]
             if all(sample_fastqs_exist):
                 Path(output.concatenated_fastqs_list).touch()
@@ -386,12 +384,12 @@ rule mqc_trim_adapters:
     input:
         OUT_DIR +'/{dataset}/preQC/multiqc/atrimmed/multiqc_inputs.txt'
     output:
-        multiqc_data_dir = OUT_DIR + 
+        multiqc_data_dir = OUT_DIR +
                             '/{dataset}/preQC/multiqc/atrimmed'+
                             '/{dataset}_atrimmed_mqc_data/multiqc_data.json',
-        multiqc_report = report(OUT_DIR + 
-                                '/{dataset}/preQC/multiqc/atrimmed' + 
-                                '/{dataset}_atrimmed_mqc.html', 
+        multiqc_report = report(OUT_DIR +
+                                '/{dataset}/preQC/multiqc/atrimmed' +
+                                '/{dataset}_atrimmed_mqc.html',
                                 category='preQC_step1:trim_adapters')
     singularity: singularity_preqc
     shell:
@@ -403,25 +401,25 @@ rule mqc_filter_human:
     input:
         OUT_DIR +'/{dataset}/preQC/multiqc/bfiltered/multiqc_inputs.txt'
     output:
-        mqc_report = report(OUT_DIR + 
-                            '/{dataset}/preQC/multiqc/bfiltered' + 
-                            '/{dataset}_bfiltered_stats.tsv', 
+        mqc_report = report(OUT_DIR +
+                            '/{dataset}/preQC/multiqc/bfiltered' +
+                            '/{dataset}_bfiltered_stats.tsv',
                             category='preQC_step2:filter_human')
     #conda:'../envs/rawQC.yaml'
     run:
         from utils import summarize_filter_human_step
         mqc_stats_data = summarize_filter_human_step('{}'.format(input))
-        mqc_stats_data.to_csv(output.mqc_report, sep='\t', header=True, 
+        mqc_stats_data.to_csv(output.mqc_report, sep='\t', header=True,
                               index=True, index_label='Unit')
 #
 rule multiqc_trim_3end:
     input:
         OUT_DIR+'/{dataset}/preQC/multiqc/dfinaltrim/multiqc_inputs.txt'
     output:
-        multiqc_fastqc = OUT_DIR + 
+        multiqc_fastqc = OUT_DIR +
                             '/{dataset}/preQC/multiqc/dfinaltrim'+
                             '/{dataset}_dfinaltrim_mqc_data/multiqc_data.json',
-        multiqc_report = report(OUT_DIR + 
+        multiqc_report = report(OUT_DIR +
                                 '/{dataset}/preQC/multiqc/dfinaltrim'+
                                 '/{dataset}_dfinaltrim_mqc.html',
                                 category='preQC_step4:trim_3end')
@@ -436,64 +434,64 @@ rule summarize_preQC:
     input:
         trim_adapters_mqc_json = OUT_DIR + '/{dataset}/preQC/multiqc/atrimmed'+
                                  '/{dataset}_atrimmed_mqc_data/multiqc_data.json',
-        filter_human_mqc_stats = OUT_DIR + '/{dataset}/preQC/multiqc/bfiltered' + 
+        filter_human_mqc_stats = OUT_DIR + '/{dataset}/preQC/multiqc/bfiltered' +
                                  '/{dataset}_bfiltered_stats.tsv',
         trim3end_mqc_json = OUT_DIR + '/{dataset}/preQC/multiqc/dfinaltrim'+
                             '/{dataset}_dfinaltrim_mqc_data/multiqc_data.json'
     log:
         OUT_DIR + '/{dataset}/preQC/logs/summarize_preqc.log'
     output:
-        units_summary = report(OUT_DIR + 
-                               '/{dataset}/preQC/summary_stats' + 
-                               '/{dataset}_preqc_units_summary.tsv', 
+        units_summary = report(OUT_DIR +
+                               '/{dataset}/preQC/summary_stats' +
+                               '/{dataset}_preqc_units_summary.tsv',
                                category='preQC:summaries'),
-        samples_summary = report(OUT_DIR + 
+        samples_summary = report(OUT_DIR +
                                  '/{dataset}/preQC/summary_stats' +
-                                 '/{dataset}_preqc_samples_summary.tsv', 
+                                 '/{dataset}_preqc_samples_summary.tsv',
                                  category='preQC:summaries'),
-        units_summary_plot = report(OUT_DIR + 
-                                    '/{dataset}/preQC/summary_stats' + 
-                                    '/{dataset}_preqc_units_barchart.svg', 
+        units_summary_plot = report(OUT_DIR +
+                                    '/{dataset}/preQC/summary_stats' +
+                                    '/{dataset}_preqc_units_barchart.svg',
                                     category='preQC:summaries'),
-        samples_summary_plot = report(OUT_DIR + 
-                                      '/{dataset}/preQC/summary_stats' + 
-                                      '/{dataset}_preqc_samples_barchart.svg', 
-                                      category='preQC:summaries'), 
-        units_summary_pct_plot = report(OUT_DIR + 
-                                        '/{dataset}/preQC/summary_stats' + 
-                                        '/{dataset}_preqc_units_pct_barchart.svg', 
+        samples_summary_plot = report(OUT_DIR +
+                                      '/{dataset}/preQC/summary_stats' +
+                                      '/{dataset}_preqc_samples_barchart.svg',
+                                      category='preQC:summaries'),
+        units_summary_pct_plot = report(OUT_DIR +
+                                        '/{dataset}/preQC/summary_stats' +
+                                        '/{dataset}_preqc_units_pct_barchart.svg',
                                         category='preQC:summaries'),
-        samples_summary_pct_plot = report(OUT_DIR + 
-                                          '/{dataset}/preQC/summary_stats'+ 
-                                          '/{dataset}_preqc_samples_pct_barchart.svg', 
+        samples_summary_pct_plot = report(OUT_DIR +
+                                          '/{dataset}/preQC/summary_stats'+
+                                          '/{dataset}_preqc_samples_pct_barchart.svg',
                                           category='preQC:summaries')
     #conda:'../envs/rawQC.yaml'
     run:
         from utils import summarize_preqc
         from utils import plot_preqc_summary
         import sys
-        
+
         sys.stdout = open(log[0], 'w')
-        
-        
+
+
         try:
             trim_adapters_mqc_json = '{}'.format(input.trim_adapters_mqc_json)
             filter_human_mqc_stats = '{}'.format(input.filter_human_mqc_stats)
             trim3end_mqc_json = '{}'.format(input.trim3end_mqc_json)
             # units summary
-            units_summary_df = summarize_preqc(trim_adapters_mqc_json, filter_human_mqc_stats, 
+            units_summary_df = summarize_preqc(trim_adapters_mqc_json, filter_human_mqc_stats,
                                                trim3end_mqc_json)
         except (TypeError, ValueError) as e:
-            print(e)                            
+            print(e)
         else:
-            units_summary_df.to_csv(output.units_summary, sep='\t', header=True, index=True, 
+            units_summary_df.to_csv(output.units_summary, sep='\t', header=True, index=True,
                                     index_label='Unit')
             # samples summary
             samples_summary_df = units_summary_df.groupby(['Sample']).agg('sum')
-            pct_columns = ['trim_adapters_pct_disc', 'filter_human_pct_disc', 'dedupe_pct_disc', 
+            pct_columns = ['trim_adapters_pct_disc', 'filter_human_pct_disc', 'dedupe_pct_disc',
                            'trim_3end_pct_disc', 'total_pct_disc', 'total_pct_kept']
             samples_summary_df[pct_columns] = units_summary_df[['Sample']+pct_columns].groupby(['Sample']).agg('mean')
-            samples_summary_df.to_csv(output.samples_summary, sep='\t', header=True, index=True, 
+            samples_summary_df.to_csv(output.samples_summary, sep='\t', header=True, index=True,
                                       index_label='Sample')
             # radial barcharts
             #
@@ -510,4 +508,3 @@ rule summarize_preQC:
             fig4.savefig(output.samples_summary_pct_plot, bbox_inches='tight', format='svg')
         finally:
             sys.stdout.close()
- 
\ No newline at end of file
diff --git a/rules/setup_rules.smk b/rules/setup_rules.smk
index f84fd4a..29a61f7 100644
--- a/rules/setup_rules.smk
+++ b/rules/setup_rules.smk
@@ -24,8 +24,9 @@ localrules:
     get_humann2_chocophlan,
     get_humann2_uniref,
     get_humann2_utility,
-    get_humann2_dbs
-    
+    get_humann2_dbs,
+    get_human_ref
+
 ##----------------------------------------------------------------------------##
 ## Rules to download/build container/databases used by MetaSnk
 ##----------------------------------------------------------------------------##
@@ -59,6 +60,17 @@ rule pull_metaprof_sif:
         $(basename {output}) \
         {params.shub_sif}
         '''
+rule get_human_ref:
+    output:
+        # Human reference genome for removal of human DNA
+        human_ref = HUMAN_REF
+    message: "Downloading fasta file of human reference genome ..."
+    shell:
+        '''
+        [ ! -d $(dirname {output.human_ref}) ] && mkdir $(dirname {output.human_ref});
+        cd $(dirname {output.human_ref})
+        wget https://github.com/mticlla/MetaSnk_data/raw/master/ref/hg19_main_mask_ribo_animal_allplant_allfungus.fa.gz
+        '''
 rule get_metaphlan_db:
     output:
         directory(METASNK_DB_DIR+'/metaphlan_databases')
@@ -67,7 +79,7 @@ rule get_metaphlan_db:
     shell:
         '''
         metaphlan2.py --install --bowtie2db {output}
-        '''    
+        '''
 rule get_strphlan_db:
     input:
         metaphlan_db_dir = METASNK_DB_DIR+'/metaphlan_databases'
@@ -81,7 +93,7 @@ rule get_strphlan_db:
 rule get_humann2_chocophlan:
     output:
         humann2_choco_dir = directory(METASNK_DB_DIR+'/humann2_databases/chocophlan')
-    singularity:METAPROF_SIF   
+    singularity:METAPROF_SIF
     shell:
         '''
         bash -c 'source activate humann2 && mkdir -p $(dirname {output.humann2_choco_dir}); \
@@ -95,7 +107,7 @@ rule get_humann2_chocophlan:
 rule get_humann2_uniref:
     output:
         humann2_uniref_dir = directory(METASNK_DB_DIR+'/humann2_databases/uniref')
-    singularity:METAPROF_SIF 
+    singularity:METAPROF_SIF
     shell:
         '''
         bash -c 'source activate humann2 && mkdir -p $(dirname {output.humann2_uniref_dir}); \
@@ -122,4 +134,4 @@ rule get_humann2_dbs:
 
 rule get_panphlan_db:
     output:
-        directory(METASNK_DB_DIR+'/panphlan_databases')
\ No newline at end of file
+        directory(METASNK_DB_DIR+'/panphlan_databases')
-- 
GitLab