भाग 2: एकल-नमूना कार्यान्वयन¶
AI-सहायता प्राप्त अनुवाद - अधिक जानें और सुधार सुझाएं
कोर्स के इस भाग में, हम सबसे सरल संभव workflow लिखने जा रहे हैं जो भाग 1 में चलाए गए सभी commands को wrap करता है ताकि उन्हें चलाना automate हो सके, और हम एक बार में सिर्फ एक नमूना प्रोसेस करने का लक्ष्य रखेंगे।
पूर्वापेक्षा
इस पाठ को शुरू करने से पहले तुम्हें भाग 1: विधि अवलोकन पर काम करना होगा।
विशेष रूप से, section 1.2.3 पर काम करने से genome index फ़ाइल (data/genome_index.tar.gz) बनती है जो इस पाठ में alignment step के लिए आवश्यक है।
असाइनमेंट¶
कोर्स के इस भाग में, हम एक workflow विकसित करने जा रहे हैं जो निम्नलिखित करता है:
- इनपुट reads पर quality control (FastQC) चलाएं
- Adapters को trim करें और post-trimming QC (Trim Galore) चलाएं
- Trimmed reads को reference genome (HISAT2) से align करें
यह भाग 1: विधि अवलोकन के पहले section के steps को automate करता है, जहां तुमने इन commands को manually उनके containers में चलाया था।
शुरुआती बिंदु के रूप में, हम तुम्हें एक workflow फ़ाइल, rnaseq.nf, प्रदान करते हैं, जो workflow के मुख्य भागों की रूपरेखा देती है, साथ ही modules/ डायरेक्टरी में चार मॉड्यूल फ़ाइलें (fastqc.nf, trim_galore.nf, hisat2_align.nf, और multiqc.nf) जो प्रत्येक process की संरचना की रूपरेखा देती हैं।
Scaffold फ़ाइलें
#!/usr/bin/env nextflow
// Module INCLUDE statements
/*
* Pipeline parameters
*/
// Primary input
workflow {
main:
// Create input channel
// Call processes
publish:
// Declare outputs to publish
}
output {
// Configure publish targets
}
#!/usr/bin/env nextflow
/*
* Run FastQC on input reads
*/
process FASTQC {
container
input:
output:
script:
"""
"""
}
#!/usr/bin/env nextflow
/*
* Trim adapters and run post-trimming QC
*/
process TRIM_GALORE {
container
input:
output:
script:
"""
"""
}
ये फ़ाइलें functional नहीं हैं; इनका उद्देश्य सिर्फ scaffolds के रूप में काम करना है जिन्हें तुम code के interesting भागों से भर सकते हो।
पाठ योजना¶
Development process को अधिक शैक्षिक बनाने के लिए, हमने इसे तीन चरणों में विभाजित किया है:
- एक single-stage workflow लिखें जो शुरुआती QC step चलाता है। यह CLI पैरामीटर सेट करना, इनपुट channel बनाना, process मॉड्यूल लिखना, और आउटपुट publishing को configure करना cover करता है।
- Adapter trimming और post-trimming QC जोड़ें। यह एक process के आउटपुट को दूसरे के इनपुट से जोड़कर processes को chain करना introduce करता है।
- Reference genome के लिए alignment जोड़ें। यह अतिरिक्त reference इनपुट को handle करना और compressed archives के साथ काम करना cover करता है।
प्रत्येक step workflow development के एक विशिष्ट पहलू पर focus करता है।
सुझाव
सुनिश्चित करो कि तुम सही working डायरेक्टरी में हो:
cd /workspaces/training/nf4-science/rnaseq
1. एक single-stage workflow लिखें जो शुरुआती QC चलाता है¶
यह पहला step basics पर focus करता है: एक FASTQ फ़ाइल को load करना और उस पर quality control चलाना।
भाग 1 से fastqc कमांड को याद करो:
कमांड इनपुट के रूप में एक FASTQ फ़ाइल लेता है और एक quality control report को .zip archive और एक .html summary के रूप में produce करता है।
Container URI था community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18।
हम इस जानकारी को लेने जा रहे हैं और इसे Nextflow में तीन चरणों में wrap करेंगे:
- इनपुट को सेट करें
- QC process लिखें और इसे workflow में call करें
- आउटपुट handling को configure करें
1.1. इनपुट को सेट करें¶
हमें एक इनपुट पैरामीटर declare करना होगा, एक सुविधाजनक default value प्रदान करने के लिए एक test profile बनाना होगा, और एक इनपुट channel बनाना होगा।
1.1.1. एक इनपुट पैरामीटर declaration जोड़ें¶
rnaseq.nf में, Pipeline parameters section के तहत, input नाम का एक पैरामीटर Path type के साथ declare करो।
यह CLI पैरामीटर को सेट करता है, लेकिन हम development के दौरान हर बार workflow चलाते समय फ़ाइल path को type नहीं करना चाहते। Default value प्रदान करने के लिए कई विकल्प हैं; यहां हम एक test profile का उपयोग करते हैं।
1.1.2. nextflow.config में default value के साथ एक test profile बनाएं¶
एक test profile command line पर इनपुट specify किए बिना workflow को try करने के लिए सुविधाजनक default values प्रदान करता है। यह Nextflow ecosystem में एक सामान्य convention है (अधिक विवरण के लिए Hello Config देखें)।
nextflow.config में एक profiles block जोड़ें जिसमें एक test profile हो जो input पैरामीटर को test FASTQ फ़ाइलों में से एक पर सेट करता है।
यहां, हम ${projectDir} का उपयोग कर रहे हैं, एक built-in Nextflow variable जो उस डायरेक्टरी को point करता है जहां workflow script स्थित है।
यह absolute paths को hardcode किए बिना data फ़ाइलों और अन्य resources को reference करना आसान बनाता है।
पैरामीटर के पास अब एक सुविधाजनक default है। अगला, हमें इससे एक channel बनाना होगा।
1.1.3. इनपुट channel को सेट करें¶
Workflow block में, .fromPath channel factory का उपयोग करके पैरामीटर value से एक इनपुट channel बनाएं (Hello Channels में उपयोग किया गया)।
अगला, हमें इस इनपुट पर QC चलाने के लिए process बनाना होगा।
1.2. QC process लिखें और इसे workflow में call करें¶
हमें मॉड्यूल फ़ाइल में process definition को भरना होगा, include statement का उपयोग करके इसे workflow में import करना होगा, और इसे इनपुट पर call करना होगा।
1.2.1. QC process के लिए मॉड्यूल को भरें¶
modules/fastqc.nf खोलें और process definition की रूपरेखा को examine करें।
तुम्हें मुख्य structural elements को पहचानना चाहिए; यदि नहीं, तो refresher के लिए Hello Nextflow पढ़ने पर विचार करो।
आगे बढ़ो और ऊपर दी गई जानकारी का उपयोग करके process definition को खुद भरो, फिर नीचे "बाद में" tab में solution के खिलाफ अपने काम की जांच करो।
simpleName accessor filename से सभी extensions को strip करता है, इसलिए ENCSR000COQ1_1.fastq.gz ENCSR000COQ1_1 बन जाता है।
हम प्रत्येक आउटपुट channel को नाम assign करने के लिए emit: syntax का उपयोग करते हैं, जो outputs को publish block में wire करने के लिए उपयोगी होगा।
एक बार जब तुमने यह पूरा कर लिया, तो process पूरा हो गया है। इसे workflow में उपयोग करने के लिए, तुम्हें मॉड्यूल को import करना होगा और एक process call जोड़ना होगा।
1.2.2. मॉड्यूल को include करें¶
rnaseq.nf में, process को workflow के लिए उपलब्ध कराने के लिए एक include statement जोड़ें:
Process अब workflow scope में उपलब्ध है।
1.2.3. इनपुट पर QC process को call करें¶
Workflow block में FASTQC के लिए एक call जोड़ें, इनपुट channel को argument के रूप में pass करते हुए।
Workflow अब इनपुट को load करता है और उस पर QC process चलाता है। अगला, हमें configure करना होगा कि आउटपुट कैसे publish किया जाता है।
1.3. आउटपुट handling को configure करें¶
हमें declare करना होगा कि कौन से process outputs को publish करना है और specify करना होगा कि उन्हें कहां जाना चाहिए।
1.3.1. publish: section में outputs को declare करें¶
Workflow block के अंदर publish: section declare करता है कि कौन से process outputs को publish किया जाना चाहिए।
FASTQC के outputs को named targets को assign करें।
अगला, हमें Nextflow को बताना होगा कि published outputs को कहां रखना है।
1.3.2. output {} block में आउटपुट targets को configure करें¶
output {} block workflow के बाहर बैठता है और specify करता है कि प्रत्येक named target को कहां publish किया जाता है।
दोनों targets को fastqc/ subdirectory में publish करने के लिए configure करें।
नोट
डिफ़ॉल्ट रूप से, Nextflow आउटपुट फ़ाइलों को symbolic links के रूप में publish करता है, जो अनावश्यक duplication से बचता है।
भले ही हम यहां जो data फ़ाइलें उपयोग कर रहे हैं वे बहुत छोटी हैं, genomics में वे बहुत बड़ी हो सकती हैं।
Symlinks टूट जाएंगे जब तुम अपनी work डायरेक्टरी को साफ करोगे, इसलिए production workflows के लिए तुम default publish mode को 'copy' में override करना चाह सकते हो।
1.4. Workflow को चलाएं¶
इस बिंदु पर, हमारे पास एक one-step QC workflow है जो पूरी तरह से functional होना चाहिए।
हम test profile में सेट किए गए default value का उपयोग करने के लिए -profile test के साथ चलाते हैं, command line पर path लिखने की आवश्यकता से बचते हुए।
कमांड आउटपुट
यह बहुत जल्दी चलना चाहिए अगर तुमने भाग 1 पर काम किया है और पहले से ही कंटेनर को pull कर लिया है। यदि तुमने इसे छोड़ दिया है, तो Nextflow तुम्हारे लिए कंटेनर को pull करेगा; इसके होने के लिए तुम्हें कुछ भी करने की आवश्यकता नहीं है, लेकिन तुम्हें एक मिनट तक प्रतीक्षा करने की आवश्यकता हो सकती है।
तुम results डायरेक्टरी में outputs की जांच कर सकते हो।
नमूने के लिए QC reports अब fastqc/ subdirectory में publish हैं।
सारांश¶
तुम जानते हो कि एक process युक्त मॉड्यूल कैसे बनाएं, इसे workflow में import करें, इसे इनपुट channel के साथ call करें, और workflow-level output block का उपयोग करके results को publish करें।
आगे क्या है?¶
Workflow में दूसरे step के रूप में post-trimming QC के साथ adapter trimming जोड़ें।
2. Adapter trimming और post-trimming QC जोड़ें¶
अब जब हमारे पास शुरुआती QC है, तो हम अपने built-in post-trimming QC के साथ adapter trimming step जोड़ सकते हैं।
भाग 1 से trim_galore कमांड को याद करो:
कमांड एक FASTQ फ़ाइल से adapters को trim करता है और trimmed आउटपुट पर FastQC चलाता है।
यह trimmed reads, एक trimming report, और trimmed reads के लिए FastQC reports produce करता है।
Container URI था community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18।
हमें बस process definition लिखना है, इसे import करना है, इसे workflow में call करना है, और आउटपुट handling को update करना है।
2.1. Trimming process लिखें और इसे workflow में call करें¶
पहले की तरह, हमें process definition को भरना होगा, मॉड्यूल को import करना होगा, और process call जोड़ना होगा।
2.1.1. Trimming process के लिए मॉड्यूल को भरें¶
modules/trim_galore.nf खोलें और process definition की रूपरेखा को examine करें।
आगे बढ़ो और ऊपर दी गई जानकारी का उपयोग करके process definition को खुद भरो, फिर नीचे "बाद में" tab में solution के खिलाफ अपने काम की जांच करो।
इस process के तीन named outputs हैं: trimmed reads जो alignment step में feed होते हैं, trimming report, और post-trimming FastQC reports।
--fastqc flag Trim Galore को trimmed आउटपुट पर automatically FastQC चलाने के लिए कहता है।
2.1.2. मॉड्यूल को include करें¶
नए मॉड्यूल को import करने के लिए rnaseq.nf को update करें:
अगला, हम workflow में process call जोड़ेंगे।
2.1.3. इनपुट पर trimming process को call करें¶
Workflow block में process call जोड़ें:
| rnaseq.nf | |
|---|---|
Trimming process अब workflow में wired है।
2.2. आउटपुट handling को update करें¶
हमें trimming outputs को publish declaration में जोड़ना होगा और configure करना होगा कि वे कहां जाते हैं।
2.2.1. Trimming outputs के लिए publish targets जोड़ें¶
publish: section में trimming outputs जोड़ें:
अगला, हमें Nextflow को बताना होगा कि इन outputs को कहां रखना है।
2.2.2. नए आउटपुट targets को configure करें¶
output {} block में trimming targets के लिए entries जोड़ें, उन्हें trimming/ subdirectory में publish करते हुए:
आउटपुट configuration पूरा हो गया है।
2.3. Workflow को चलाएं¶
Workflow में अब शुरुआती QC और adapter trimming दोनों शामिल हैं।
कमांड आउटपुट
यह भी बहुत जल्दी चलना चाहिए, क्योंकि हम इतनी छोटी इनपुट फ़ाइल पर चला रहे हैं।
तुम results डायरेक्टरी में trimming outputs पा सकते हो।
ENCSR000COQ1_1.fastq.gz_trimming_report.txt ENCSR000COQ1_1_trimmed_fastqc.zip
ENCSR000COQ1_1_trimmed_fastqc.html ENCSR000COQ1_1_trimmed.fq.gz
Trimming outputs और post-trimming QC reports अब trimming/ subdirectory में हैं।
सारांश¶
तुम जानते हो कि एक दूसरा processing step कैसे जोड़ें जो same इनपुट पर independently चलता है, कई named outputs produce करते हुए।
आगे क्या है?¶
Alignment step जोड़ें जो trimmed reads आउटपुट से chain off करता है।
3. Reference genome के लिए alignment जोड़ें¶
अंत में हम HISAT2 का उपयोग करके genome alignment step जोड़ सकते हैं।
भाग 1 से alignment कमांड को याद करो:
hisat2 -x <genome_index> -U <reads> \
--new-summary --summary-file <reads>.hisat2.log | \
samtools view -bS -o <reads>.bam
कमांड reads को reference genome से align करता है और आउटपुट को BAM format में convert करता है।
इसे एक pre-built genome index archive की आवश्यकता होती है और एक BAM फ़ाइल और एक alignment summary log produce करता है।
Container URI था community.wave.seqera.io/library/hisat2_samtools:5e49f68a37dc010e।
इस process को एक अतिरिक्त इनपुट (genome index archive) की आवश्यकता है, इसलिए हमें पहले इसे सेट करना होगा, फिर process को लिखना और wire करना होगा।
3.1. इनपुट को सेट करें¶
हमें genome index archive के लिए एक पैरामीटर declare करना होगा।
3.1.1. Genome index के लिए एक पैरामीटर जोड़ें¶
rnaseq.nf में genome index archive के लिए एक पैरामीटर declaration जोड़ें:
3.1.2. Test profile में genome index default जोड़ें¶
जैसा कि हमने section 1.1.2 में input के लिए किया था, nextflow.config में test profile में genome index के लिए एक default value जोड़ें:
पैरामीटर तैयार है; अब हम alignment process बना सकते हैं।
3.2. Alignment process लिखें और इसे workflow में call करें¶
पहले की तरह, हमें process definition को भरना होगा, मॉड्यूल को import करना होगा, और process call जोड़ना होगा।
3.2.1. Alignment process के लिए मॉड्यूल को भरें¶
modules/hisat2_align.nf खोलें और process definition की रूपरेखा को examine करें।
आगे बढ़ो और ऊपर दी गई जानकारी का उपयोग करके process definition को खुद भरो, फिर नीचे "बाद में" tab में solution के खिलाफ अपने काम की जांच करो।
यह process दो इनपुट लेता है: reads और genome index archive।
Script block पहले archive से index को extract करता है, फिर HISAT2 alignment को samtools view में pipe करता है ताकि आउटपुट को BAM format में convert किया जा सके।
index_zip पर simpleName accessor archive के base name (genome_index) को extract करता है ताकि इसे index prefix के रूप में उपयोग किया जा सके।
3.2.2. मॉड्यूल को include करें¶
नए मॉड्यूल को import करने के लिए rnaseq.nf को update करें:
अगला, हम workflow में process call जोड़ेंगे।
3.2.3. Alignment process को call करें¶
Trimmed reads पिछले step द्वारा आउटपुट किए गए TRIM_GALORE.out.trimmed_reads channel में हैं।
हम genome index archive प्रदान करने के लिए file(params.hisat2_index_zip) का उपयोग करते हैं।
Alignment process अब workflow में wired है।
3.3. आउटपुट handling को update करें¶
हमें alignment outputs को publish declaration में जोड़ना होगा और configure करना होगा कि वे कहां जाते हैं।
3.3.1. Alignment outputs के लिए publish targets जोड़ें¶
publish: section में alignment outputs जोड़ें:
| rnaseq.nf | |
|---|---|
अगला, हमें Nextflow को बताना होगा कि इन outputs को कहां रखना है।
3.3.2. नए आउटपुट targets को configure करें¶
output {} block में alignment targets के लिए entries जोड़ें, उन्हें align/ subdirectory में publish करते हुए:
| rnaseq.nf | |
|---|---|
आउटपुट configuration पूरा हो गया है।
3.4. Workflow को चलाएं¶
Workflow में अब तीनों processing steps शामिल हैं: QC, trimming, और alignment।
कमांड आउटपुट
तुम results डायरेक्टरी में alignment outputs पा सकते हो।
यह प्रत्येक नमूने पर लागू करने के लिए आवश्यक basic processing को पूरा करता है।
हम भाग 3 में MultiQC report aggregation जोड़ेंगे, जब हम workflow को एक बार में कई नमूने स्वीकार करने योग्य बना लेंगे।
सारांश¶
तुम जानते हो कि single-end RNAseq नमूनों को व्यक्तिगत रूप से प्रोसेस करने के लिए सभी मुख्य steps को कैसे wrap करें।
आगे क्या है?¶
एक break लो! यह बहुत कुछ था।
जब तुम refreshed महसूस करो, तो भाग 3 पर जाओ, जहां तुम सीखोगे कि कैसे workflow को कई नमूनों को parallel में प्रोसेस करने के लिए modify करें, सभी नमूनों के लिए सभी steps में QC reports को aggregate करें, और paired-end RNAseq data पर workflow चलाना enable करें।