基因體 / 台大基因定序案 (NTUH Projects) === ###### tags: `基因體`, `生物資訊, `台大基因定序案` - NTUH: National Taiwan University Hospital <br> [TOC] <br> ## README ### 執行環境建置 ``` $ apt-get update $ apt-get install openjdk-8-jdk # optional $ update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java $ apt-get install -y numactl graphviz parallel ``` <br> ### 認識測試資料 - SureSelection script + D15780 (測試的小資料) - SureSelection script + WES-EDA-013A (中資料) - WGS script + WGS-LIS-AI018A (大資料) ### 執行環境配置 1. 重新定義資料夾路徑,解壓縮放到 ```misc``` 下 ```everythings-misc.zip -> ./Everything/misc``` 2. 在 ```Everything``` 資料夾下,建立任意專案名稱,如 ```tj_project``` ```./Everything/tj_project``` 3. 在 ```tj_project``` 資料夾下,建立 reads,來放置測試資料 ``` └── Everything └── tj_project ├── my.ntuh.pipeline.b37.SureSelect.benchmark.haplotypecaller.spark.sh └── reads ├── D15780_S13_L001_R1.fastq.gz └── D15780_S13_L001_R2.fastq.gz ``` <br> 其中 xxx.gz 取自如下,選擇想要測試的資料; (可以先選擇小資料進行環境測試) ``` └── work ├── D15780_S13_L001_R1.fastq.gz (測試的小資料) <--- ├── D15780_S13_L001_R2.fastq.gz (測試的小資料) <--- ├── WES-EDA-013A_R1.fastq.gz (中資料) ├── WES-EDA-013A_R2.fastq.gz (中資料) ├── WGS-LIS-AI018A_R1.fastq.gz (大資料) └── WGS-LIS-AI018A_R2.fastq.gz (大資料) ``` <br> benchmark script 取自如下: ``` └── script ├── ntuh.pipeline.b37.SureSelect.benchmark.deepvariant.sh ├── ntuh.pipeline.b37.SureSelect.benchmark.haplotypecaller.spark.sh <--- ├── ntuh.pipeline.b37.WGS.benchmark.deepvariant.sh └── ntuh.pipeline.b37.WGS.benchmark.haplotypecaller.spark.sh ``` <br> 4. 回到 ```Everythings``` 目錄下,使用 soft link 建立絕對路徑,讓 script 可以跑 > 因為所寫的 script,是用絕對路徑寫死: > /Everythings/misc/nextflow-v18.10.1/nextflow run ... ``` Everythings$ sudo ln -s `pwd` /Everythings ``` <br> 5. 在剛剛建立的 ```tj_project``` 目錄下,執行 benchmark ``` Everythings/tj_project$ sh ntuh.pipeline.b37.SureSelect.benchmark.haplotypecaller.spark.sh & ``` bwa 會用掉 5.3GB java x 4 會用掉 1 GB <br> 6. 執行完,執行目錄下會有 report.html - 若成功,則沒有 error - terminal log 會顯示: ``` Success : true Exit status : 0 Error report: - ``` - report.html 會顯示: Nextflow workflow report Workflow execution completed successfully! - 各程序所花的時間 | process | duration | duration(%) | | -------- | -------- | -------- | | runBWA | 51.3s | 6.22% | | runSortSam | 1m 57s | 14.19% | | runMarkDuplicates | 1m 57s | 14.19% | | runBaseRecalibrator | 4m 49s | 35.06% | | runApplyBQSR | 1m 57s | 14.19% | | runHaplotypeCaller | 2m 13s | 16.13% | | TOTAL | 13m 44s | 100% | <br> ## Nextflow workflow report - Nextflow command ```bash nextflow run /Everythings/misc/config/ntuh.benchmark.haplotypecaller.spark.nf -c /Everythings/misc/config/config.nf --reads reads/*R{1,2}.fastq.gz --reference b37 --panel SURESELECT -w /tmp -with-dag flowchart.png ``` - each process - ### runBWA ``` numactl --interleave=all /Everythings/misc/bwa/bwa mem -M -R '@RG\tID:D15780_S13_L001\tSM:D15780_S13_L001\tPL:Illumina' -t 2 /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta D15780_S13_L001_R1.fastq.gz D15780_S13_L001_R2.fastq.gz | /Everythings/misc/samtools/samtools view -@ 2 -1 -o D15780_S13_L001.bam ``` <br> - ### runSortSam ``` /Everythings/misc/gatk-4.1.0.0/gatk SortSamSpark --input D15780_S13_L001.bam --output D15780_S13_L001.sorted.bam --sort-order coordinate --java-options "-XX:+UseNUMA -Xmx16G" --tmp-dir . -- --spark-runner LOCAL --spark-master local[4] --conf spark.local.dir=./tmp ``` - 指令說明 - [GATK4 command-line syntax](https://gatk.broadinstitute.org/hc/en-us/articles/360035531892-GATK4-command-line-syntax) <br> - ### runMarkDuplicates ([summary](https://gatk.broadinstitute.org/hc/en-us/articles/360036897012-MarkDuplicatesSpark-BETA-)) ``` /Everythings/misc/gatk-4.1.0.0/gatk MarkDuplicatesSpark --input D15780_S13_L001.sorted.bam --output D15780_S13_L001.sorted.dedup.bam --metrics-file D15780_S13_L001.markDuplicates.metrics --read-index D15780_S13_L001.sorted.bam.sbi --java-options "-XX:+UseNUMA" --tmp-dir . -- --spark-runner LOCAL --spark-master local[4] --conf spark.local.dir=./tmp ``` - 討論 - [Question: Why Do We Need Markduplicates For Variants Detection In Gatk Processing Pipeline? ](https://www.biostars.org/p/18784/) <br> - ### runBaseRecalibrator ([summary](https://gatk.broadinstitute.org/hc/en-us/articles/360036898312-BaseRecalibrator)) ``` /Everythings/misc/gatk-4.1.0.0/gatk BaseRecalibratorSpark --input D15780_S13_L001.sorted.dedup.bam --known-sites /Everythings/misc/bundle/b37/dbsnp_138.b37.vcf --known-sites /Everythings/misc/bundle/b37/1000G_phase1.indels.b37.vcf --known-sites /Everythings/misc/bundle/b37/Mills_and_1000G_gold_standard.indels.b37.vcf --output D15780_S13_L001.recal_data.grp --reference /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta --intervals /Everythings/misc/bed/b37/Agilent_SureSelect_Human_All_Exon_V7_S31285117_Regions.b37.bed --read-index D15780_S13_L001.sorted.dedup.bam.sbi --java-options "-XX:+UseNUMA" --tmp-dir . -- --spark-runner LOCAL --spark-master local[4] --conf spark.local.dir=./tmp ``` <br> argument details: ``` /Everythings/misc/gatk-4.1.0.0/gatk BaseRecalibratorSpark --input D15780_S13_L001.sorted.dedup.bam --known-sites /Everythings/misc/bundle/b37/dbsnp_138.b37.vcf --known-sites /Everythings/misc/bundle/b37/1000G_phase1.indels.b37.vcf --known-sites /Everythings/misc/bundle/b37/Mills_and_1000G_gold_standard.indels.b37.vcf --output D15780_S13_L001.recal_data.grp --reference /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta --intervals /Everythings/misc/bed/b37/Agilent_SureSelect_Human_All_Exon_V7_S31285117_Regions.b37.bed --read-index D15780_S13_L001.sorted.dedup.bam.sbi --java-options "-XX:+UseNUMA" --tmp-dir . -- --spark-runner LOCAL --spark-master local[4] --conf spark.local.dir=./tmp ``` - ```--intervals```: - [Interval-related arguments and syntax](https://software.broadinstitute.org/gatk/documentation/article?id=11009) - ```--java-options```: - [4. Adding Java arguments](https://software.broadinstitute.org/gatk/documentation/article?id=11050) - [Java8 JVM参数解读](https://www.zybuluo.com/changedi/note/975529) - empty - 15.0 min - ```-Xmn2g``` - 15.82 min - ```-Xmn2g -Xms2g``` - 13.68, 14.43, 15.05, 13.74, 14.52, 13.43 min - ```-XX:+UseNUMA``` >使用NUMA[5]开启性能优化。默认不开启,该项只有在开启了-XX:+UseParallelGC后才有效。 - 15.11, 15.42, 14.92 min - ```-XX:+AggressiveHeap -XX:+UseParallelGC -XX:+UseNUMA``` - 15.27 min - ```-XX:+AggressiveHeap -XX:+UseParallelGC -XX:+UseNUMA``` - 16.33, 13.97, 15.90 min <br> 單獨執行指令時,若遇到底下錯誤,請把檔案路徑改成絕對路徑 > A USER ERROR has occurred: Failed to read bam header from D15780_S13_L001.sorted.dedup.bam Caused by:File D15780_S13_L001.sorted.dedup.bam does not exist - **```--input```** ``` --input D15780_S13_L001.sorted.dedup.bam ``` 改成(舉例) ``` --input /home/tj/Asus/workplace/Gene/Everythings/myproject/OUTPUT/1.ALIGNMENT/D15780_S13_L001.sorted.dedup.bam ``` - **```--read-index```** ``` --read-index D15780_S13_L001.sorted.dedup.bam.sbi ``` 改成(舉例) ``` --read-index /home/tj/Asus/workplace/Gene/Everythings/myproject/OUTPUT/1.ALIGNMENT/D15780_S13_L001.sorted.dedup.bam.sbi ``` - **testing reports:** - Elapsed time: 14.12, 13.67, 14.07 (min) - CPU: low <br> - ### runApplyBQSR ([summary](https://gatk.broadinstitute.org/hc/en-us/articles/360037268511-ApplyBQSR)) BQSR: Base Quality Score Recalibration ``` /Everythings/misc/gatk-4.1.0.0/gatk ApplyBQSRSpark --bqsr-recal-file D15780_S13_L001.recal_data.grp --input D15780_S13_L001.sorted.dedup.bam --output D15780_S13_L001.sorted.dedup.recal.bam --intervals /Everythings/misc/bed/b37/Agilent_SureSelect_Human_All_Exon_V7_S31285117_Regions.b37.bed --reference /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta --read-index D15780_S13_L001.sorted.dedup.bam.sbi --java-options "-XX:+UseNUMA" --tmp-dir . -- --spark-runner LOCAL --spark-master local[4] --conf spark.local.dir=./tmp ``` <br> - ### runHaplotypeCaller ``` if grep -q "avx" /proc/cpuinfo; then HMM=AVX_LOGLESS_CACHING_OMP else HMM=LOGLESS_CACHING fi if grep -q "avx2" /proc/cpuinfo; then SW=AVX_ENABLED else SW=JAVA fi numactl --interleave=all /Everythings/misc/gatk-4.1.0.0/gatk HaplotypeCaller -R /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta -I D15780_S13_L001.sorted.dedup.recal.bam -L /Everythings/misc/bed/b37/Agilent_SureSelect_Human_All_Exon_V7_S31285117_Regions.b37.bed --dbsnp /Everythings/misc/bundle/b37/dbsnp_138.b37.vcf -O D15780_S13_L001.vcf --read-index D15780_S13_L001.sorted.dedup.recal.bam.bai --tmp-dir . --smith-waterman $SW --pair-hmm-implementation $HMM --native-pair-hmm-threads 2 ``` <br> argument details: ``` numactl --interleave=all /Everythings/misc/gatk-4.1.0.0/gatk HaplotypeCaller -R /Everythings/misc/bundle/b37/human_g1k_v37_decoy.fasta -I D15780_S13_L001.sorted.dedup.recal.bam -L /Everythings/misc/bed/b37/Agilent_SureSelect_Human_All_Exon_V7_S31285117_Regions.b37.bed --dbsnp /Everythings/misc/bundle/b37/dbsnp_138.b37.vcf -O D15780_S13_L001.vcf --read-index D15780_S13_L001.sorted.dedup.recal.bam.bai --tmp-dir . --smith-waterman $SW --pair-hmm-implementation $HMM --native-pair-hmm-threads 2 ``` <br> <br> ## 從 ESC4000(10.78.26.241) 下載資料的速度 ``` $ scp diatango_lin@10.78.26.241:/Everythings/dataset/* . D15780_S13_L001_R1.fastq.gz 100% 58MB 3.4MB/s 00:17 D15780_S13_L001_R2.fastq.gz 100% 64MB 3.4MB/s 00:19 WES-EDA-013A_R1.fastq.gz 100% 2536MB 3.2MB/s 13:06 WES-EDA-013A_R2.fastq.gz 100% 2751MB 3.2MB/s 14:08 WGS-LIS-AI018A_R1.fastq.gz 100% 33GB 3.3MB/s 2:50:09 WGS-LIS-AI018A_R2.fastq.gz 100% 34GB 3.3MB/s 2:56:59 ``` ``` ├── [ 60858292] D15780_S13_L001_R1.fastq.gz ├── [ 66890769] D15780_S13_L001_R2.fastq.gz ├── [ 2658993692] WES-EDA-013A_R1.fastq.gz ├── [ 2884234372] WES-EDA-013A_R2.fastq.gz ├── [35314302136] WGS-LIS-AI018A_R1.fastq.gz └── [36820690257] WGS-LIS-AI018A_R2.fastq.gz ``` - 檔案大小,全部共 77805969518 bytes (=72.46 GB) - 下載時間,全部共 6h:14m:58s - 內網平均下載速度: 77805969518 / ((6*60+14)*60+58) / 1024 / 1024 = 3.2981 (MB/s)