懂得了那么多道理,卻依然過不好這一生。
所以理論歸理論,最終要落實到分析代碼上,咱們從這一篇開始,介紹一套擴增子數據分析流程。
閑話少敘,首先介紹一下項目背景:
- 測序平臺: Illumina MiSeq,雙端(Paired-end)測序
- 服務器:CentOS 7操作系統,128G內存,CPU 48線程
- 編程語言:Bash script、Python
NGS測序項目大致分為二個部分:
- 濕實驗部分,即取樣、提取、建庫以及上機測序
- 干實驗部分,即測序數據的生物信息分析
測序儀運行結束,就完成了生物樣本的數字化過程,但此時核酸的信息,具體來說是DNA的序列信息(RNA樣本的話會先反轉錄成DNA再測序),是保存在稱為BCL(Binary Base Call)的文件中的,而生物信息分析工作即是從這里開始。
首先,要將BCL文件轉化成FASTQ文件格式,過程并不復雜,一條命令就夠了。
/path-to/bcl2fastq_V219 \
-R /path-to/200821_M06862_0006_000000000-C9TL7 \
--sample-sheet /path-to/SampleSheet.csv \
--output-dir /path-to/Demultiplexed \
--barcode-mismatches 1 \
--use-bases-mask Y75n,I8,I8,Y75n
bcl2fastq_V219,是illumina官方提供的BCL轉FASTQ格式的軟件,這里用的版本是v2.19。
-R參數
,是下機數據所在的目錄,內容如下,其中的RunInfo.xml文件記錄了測序的一些重要信息,如總共運行了多少個循環等。
200821_M06862_0006_000000000-C9TL7
├── AnalysisError.txt
├── AnalysisLog.txt
├── Basecalling_Netcopy_complete_Read1.txt
├── Basecalling_Netcopy_complete_Read2.txt
├── Basecalling_Netcopy_complete_Read3.txt
├── Basecalling_Netcopy_complete_Read4.txt
├── Basecalling_Netcopy_complete.txt
├── CompletedJobInfo.xml
├── Config
├── Data
├── GenerateFASTQRunStatistics.xml
├── ImageAnalysis_Netcopy_complete_Read1.txt
├── ImageAnalysis_Netcopy_complete_Read2.txt
├── ImageAnalysis_Netcopy_complete_Read3.txt
├── ImageAnalysis_Netcopy_complete_Read4.txt
├── ImageAnalysis_Netcopy_complete.txt
├── InterOp
├── Logs
├── QueuedForAnalysis.txt
├── Recipe
├── RTAComplete.txt
├── RunCheckDetail.txt
├── RunInfo.xml
├── runParameters.xml
├── SampleSheet.csv
└── Thumbnail_Images
--sample-sheet參數
,樣本清單,內容如下:
[Header],,,,,,,,,
IEMFileVersion,5,,,,,,,,
Date,7/30/2020,,,,,,,,
Workflow,GenerateFASTQ,,,,,,,,
Application,FASTQ Only,,,,,,,,
Instrument Type,MiSeq,,,,,,,,
Assay,Nextera DNA,,,,,,,,
Index Adapters,"Nextera Index Kit (24 Indexes, 96 Samples)",,,,,,,,
Description,,,,,,,,,
Chemistry,Amplicon,,,,,,,,
,,,,,,,,,
[Reads],,,,,,,,,
76,,,,,,,,,
76,,,,,,,,,
,,,,,,,,,
[Settings],,,,,,,,,
ReverseComplement,0,,,,,,,,
Adapter,CTGTCTCTTATACACATCT,,,,,,,,
,,,,,,,,,
[Data],,,,,,,,,
Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,Description
wenku1,,,,D701,ATTACTCG,D504,GGCTCTGA,,
wenku2,,,,D702,TCCGGAGA,D504,GGCTCTGA,,
wenku3,,,,D703,CGCTCATT,D504,GGCTCTGA,,
wenku4,,,,D704,GAGATTCC,D504,GGCTCTGA,,
wenku5,,,,D705,ATTCAGAA,D504,GGCTCTGA,,
這是一個每行都用逗號,
隔開的SampleSheet.csv文件,可以用Excel或WPS軟件編輯成新的,也可以用Illumina Experiment Manager軟件來制作清單文件。
由于測序儀的通量比較大,如果一次只測一個樣本,會造成非常大的浪費,因此實際測序過程中都是多個樣本混合在一起測,那么后期怎么把各個樣本的數據(即大量的reads)分開呢,這就要涉及到建庫的原理了,需要較大的篇幅才能說清,在此不便展開。
簡單來說,就是各個樣本都加了自己特有的條碼(barcode),就是SampleSheet文件中的index和index2序列,如wenku1的index序列ATTACTCG
,以及index2序列GGCTCTGA
,它們的組合與其他所有文庫的都不一樣,依據這些條碼就能實現數據的拆分,[Data]部分一行是一個樣本,每行最低限度只需要填寫Sample_ID和index就可以了,如果是雙端index測序,再填上index2即可。
--output-dir參數
,結果文件保存的目錄。
--barcode-mismatches參數
,拆分時允許上述index序列錯配的堿基個數,通常設為1。
--use-bases-mask參數
,用于指導哪些測序循環的數據要保留,哪些要丟棄,示例中Y75n,I8,I8,Y75n
的含義是:第一輪測序的前75個循環要保留,之后的循環丟棄,index的8個循環全部保留,index2的8個循環全部保留,第四輪測序的前75個循環要保留,之后的循環丟棄,這樣我們拆分出的數據是雙端75bp,當然這個參數并非必需。
以上,就是illumina數據拆分的基本過程,結果得到FASTQ文件(每個樣本2個),后續分析都是基于這些文件的。
Demultiplexed/
├── wenku1_S1_L001_R1_001.fastq.gz
├── wenku1_S1_L001_R2_001.fastq.gz
├── wenku2_S2_L001_R1_001.fastq.gz
├── wenku2_S2_L001_R2_001.fastq.gz
├── wenku3_S3_L001_R1_001.fastq.gz
├── wenku3_S3_L001_R2_001.fastq.gz
├── wenku4_S4_L001_R1_001.fastq.gz
├── wenku4_S4_L001_R2_001.fastq.gz
├── wenku5_S5_L001_R1_001.fastq.gz
└── wenku5_S5_L001_R2_001.fastq.gz
數據分析任重道遠,正如莎士比亞的詠嘆:
自然啊,你是充滿無窮神秘的書!而我,只能讀懂些許部分!