भाग 3: बहु-नमूना युग्मित-अंत कार्यान्वयन¶
AI-सहायता प्राप्त अनुवाद - अधिक जानें और सुधार सुझाएं
इस पाठ्यक्रम के इस अंतिम भाग में, हम अपने सरल workflow को अगले स्तर पर ले जाने वाले हैं और इसे एक शक्तिशाली बैच ऑटोमेशन टूल में बदलने वाले हैं ताकि यह मनमाने संख्या के नमूनों को संभाल सके। और जब हम यह कर रहे हैं, हम इसे युग्मित-अंत डेटा की अपेक्षा करने के लिए भी स्विच करने वाले हैं, जो नए अध्ययनों में अधिक सामान्य है।
हम यह तीन चरणों में करेंगे:
- workflow को कई इनपुट नमूने स्वीकार करने योग्य बनाएं और निष्पादन को समानांतरित करें
- व्यापक QC रिपोर्ट जनरेशन जोड़ें
- युग्मित-अंत RNAseq डेटा पर स्विच करें
1. workflow को कई इनपुट नमूने स्वीकार करने योग्य बनाएं और निष्पादन को समानांतरित करें¶
हमें इनपुट को प्रबंधित करने के तरीके को बदलना होगा।
1.1. प्राथमिक इनपुट को एकल फ़ाइल के बजाय फ़ाइल पथों के CSV में बदलें¶
हम data/ डायरेक्टरी में नमूना IDs और FASTQ फ़ाइल पथों वाली एक CSV फ़ाइल प्रदान करते हैं।
यह CSV फ़ाइल एक हेडर लाइन शामिल करती है।
ध्यान दें कि FASTQ फ़ाइल पथ पूर्ण पथ हैं।
आइए प्राथमिक इनपुट पैरामीटर का नाम बदलकर input_csv करें और डिफ़ॉल्ट को single-end.csv फ़ाइल के पथ में बदलें।
| rnaseq.nf | |
|---|---|
1.2. इनपुट channel फ़ैक्टरी को CSV को इनपुट के रूप में संभालने के लिए अपडेट करें¶
हम फ़ाइल के सामग्री को केवल फ़ाइल पथ के बजाय channel में लोड करना चाहते हैं, इसलिए हम CSV प्रारूप को पार्स करने के लिए .splitCsv() ऑपरेटर का उपयोग करते हैं, फिर जानकारी के विशिष्ट टुकड़े को पकड़ने के लिए .map() ऑपरेटर का उपयोग करते हैं (FASTQ फ़ाइल पथ)।
| rnaseq.nf | |
|---|---|
1.3. workflow को चलाएं और परीक्षण करें कि यह काम करता है¶
कमांड आउटपुट
इस बार हम देखते हैं कि हर चरण 6 बार चलता है, हर उस 6 डेटा फ़ाइलों पर जो हमने प्रदान की थीं।
बस इतना ही काफी था workflow को कई फ़ाइलों पर चलाने के लिए! Nextflow हमारे लिए सभी समानांतरता को संभालता है।
2. प्री-प्रोसेसिंग QC मेट्रिक्स को एकल MultiQC रिपोर्ट में एकत्रित करें¶
यह सब बहुत सारी QC रिपोर्ट उत्पन्न करता है, और हम व्यक्तिगत रिपोर्टों को खोदना नहीं चाहते। यह MultiQC रिपोर्ट एकत्रीकरण चरण लगाने के लिए एकदम सही बिंदु है!
2.1. QC एकत्रीकरण process के लिए एक मॉड्यूल बनाएं¶
आइए MULTIQC process को रखने के लिए modules/multiqc.nf नामक एक मॉड्यूल फ़ाइल बनाएं:
कोड एडिटर में फ़ाइल खोलें और निम्नलिखित कोड को इसमें कॉपी करें:
2.2. मॉड्यूल को workflow फ़ाइल में आयात करें¶
rnaseq.nf फ़ाइल में स्टेटमेंट include { MULTIQC } from './modules/multiqc.nf' जोड़ें:
| rnaseq.nf | |
|---|---|
2.3. एक report_id पैरामीटर जोड़ें और इसे एक उचित डिफ़ॉल्ट दें¶
| rnaseq.nf | |
|---|---|
2.4. पिछले चरणों के आउटपुट पर process को कॉल करें¶
हमें MULTIQC process को पिछले चरणों से सभी QC-संबंधित आउटपुट देने की आवश्यकता है।
इसके लिए, हम .mix() ऑपरेटर का उपयोग करने वाले हैं, जो कई channels को एक में एकत्रित करता है।
यदि हमारे पास A, B, C और D नामक चार processes थे जिनमें प्रत्येक में एक सरल .out channel था, तो सिंटैक्स कुछ इस तरह दिखेगा: A.out.mix( B.out, C.out, D.out )। जैसा कि आप देख सकते हैं, आप इसे पहले channel पर लागू करते हैं जिसे आप संयोजित करना चाहते हैं (कोई फर्क नहीं पड़ता कि कौन सा) और बाकी सभी को, कॉमा से अलग करके, कोष्ठक में जोड़ते हैं।
हमारे workflow के मामले में, हमारे पास एकत्रित करने के लिए निम्नलिखित आउटपुट हैं:
FASTQC.out.zipFASTQC.out.htmlTRIM_GALORE.out.trimming_reportsTRIM_GALORE.out.fastqc_reportsHISAT2_ALIGN.out.log
तो सिंटैक्स उदाहरण बन जाता है:
FASTQC.out.zip.mix(
FASTQC.out.html,
TRIM_GALORE.out.trimming_reports,
TRIM_GALORE.out.fastqc_reports,
HISAT2_ALIGN.out.log
)
यह प्रति नमूना QC रिपोर्ट एकत्र करेगा।
लेकिन चूंकि हम उन्हें सभी नमूनों में एकत्रित करना चाहते हैं, हमें सभी नमूनों के लिए रिपोर्ट को MULTIQC के एक कॉल में खींचने के लिए collect() ऑपरेटर जोड़ना होगा।
और हमें इसे report_id पैरामीटर भी देना होगा।
यह हमें निम्नलिखित देता है:
| पूर्ण MULTIQC कॉल | |
|---|---|
पूर्ण workflow ब्लॉक के संदर्भ में, यह इस तरह दिखता है:
2.5. workflow को चलाएं और परीक्षण करें कि यह काम करता है¶
कमांड आउटपुट
N E X T F L O W ~ version 24.10.0
Launching `rnaseq.nf` [modest_pare] DSL2 - revision: fc724d3b49
executor > local (1)
[07/3ff9c5] FASTQC (6) [100%] 6 of 6, cached: 6 ✔
[2c/8d8e1e] TRIM_GALORE (5) [100%] 6 of 6, cached: 6 ✔
[a4/7f9c44] HISAT2_ALIGN (6) [100%] 6 of 6, cached: 6 ✔
[56/e1f102] MULTIQC [100%] 1 of 1 ✔
इस बार हम कैश किए गए process कॉलों के बाद MULTIQC के लिए एक एकल कॉल देखते हैं:
आप TRIM_GALORE process में publishDir निर्देश द्वारा निर्दिष्ट results/trimming के अंतर्गत आउटपुट पा सकते हैं।
results/multiqc
├── all_single-end_data
│ ├── cutadapt_filtered_reads_plot.txt
│ ├── cutadapt_trimmed_sequences_plot_3_Counts.txt
│ ├── cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt
│ ├── fastqc_adapter_content_plot.txt
│ ├── fastqc_overrepresented_sequences_plot.txt
│ ├── fastqc_per_base_n_content_plot.txt
│ ├── fastqc_per_base_sequence_quality_plot.txt
│ ├── fastqc_per_sequence_gc_content_plot_Counts.txt
│ ├── fastqc_per_sequence_gc_content_plot_Percentages.txt
│ ├── fastqc_per_sequence_quality_scores_plot.txt
│ ├── fastqc_sequence_counts_plot.txt
│ ├── fastqc_sequence_duplication_levels_plot.txt
│ ├── fastqc_sequence_length_distribution_plot.txt
│ ├── fastqc-status-check-heatmap.txt
│ ├── fastqc_top_overrepresented_sequences_table.txt
│ ├── hisat2_se_plot.txt
│ ├── multiqc_citations.txt
│ ├── multiqc_cutadapt.txt
│ ├── multiqc_data.json
│ ├── multiqc_fastqc.txt
│ ├── multiqc_general_stats.txt
│ ├── multiqc_hisat2.txt
│ ├── multiqc.log
│ ├── multiqc_software_versions.txt
│ └── multiqc_sources.txt
└── all_single-end.html
वह अंतिम all_single-end.html फ़ाइल पूर्ण एकत्रित रिपोर्ट है, जो एक आसान ब्राउज़ करने योग्य HTML फ़ाइल में सुविधाजनक रूप से पैक की गई है।
3. युग्मित-अंत RNAseq डेटा प्रोसेसिंग सक्षम करें¶
अभी हमारा workflow केवल single-end RNAseq डेटा को संभाल सकता है। युग्मित-अंत RNAseq डेटा देखना तेजी से सामान्य हो रहा है, इसलिए हम इसे संभालने में सक्षम होना चाहते हैं।
workflow को डेटा प्रकार से पूरी तरह अज्ञेयवादी बनाने के लिए थोड़ा अधिक उन्नत Nextflow भाषा सुविधाओं का उपयोग करने की आवश्यकता होगी, इसलिए हम यहां ऐसा नहीं करने वाले हैं, लेकिन हम यह प्रदर्शित करने के लिए एक युग्मित-अंत प्रोसेसिंग संस्करण बना सकते हैं कि क्या अनुकूलित करने की आवश्यकता है।
3.1. workflow की एक प्रति बनाएं जिसे rnaseq_pe.nf कहा जाता है¶
3.2. डिफ़ॉल्ट input_csv को युग्मित-अंत डेटा की ओर इंगित करने के लिए संशोधित करें¶
हम data/ डायरेक्टरी में नमूना IDs और युग्मित FASTQ फ़ाइल पथों वाली दूसरी CSV फ़ाइल प्रदान करते हैं
आइए input_csv डिफ़ॉल्ट को paired-end.csv फ़ाइल का पथ बनाएं।
| rnaseq_pe.nf | |
|---|---|
3.3. channel फ़ैक्टरी को अपडेट करें¶
हमें .map() ऑपरेटर को दोनों FASTQ फ़ाइल पथ अब पकड़ने के लिए बताना होगा।
तो row -> file(row.fastq_path) बन जाता है row -> [file(row.fastq_1), file(row.fastq_2)]
| rnaseq_pe.nf | |
|---|---|
3.4. FASTQC process का एक युग्मित-अंत संस्करण बनाएं¶
आइए मॉड्यूल की एक प्रति बनाएं ताकि हम दोनों संस्करणों को हाथ में रख सकें।
कोड एडिटर में नई fastqc_pe.nf मॉड्यूल फ़ाइल खोलें और निम्नलिखित कोड परिवर्तन करें:
scriptब्लॉक (पंक्ति 17) मेंfastqc $readsकोfastqc ${reads}में बदलें ताकिreadsइनपुट अनपैक हो जाए, क्योंकि यह अब एकल पथ के बजाय दो पथों का एक टपल है।- आउटपुट फ़ाइलों को व्यक्तिगत रूप से संभालने से बचने के लिए
${reads.simpleName}को वाइल्डकार्ड (*) से बदलें।
| modules/fastqc_pe.nf | |
|---|---|
तकनीकी रूप से यह FASTQC process को इस तरह से सामान्यीकृत करता है कि यह single-end या युग्मित-अंत RNAseq डेटा को संभालने में सक्षम हो जाता है।
अंत में, मॉड्यूल के युग्मित-अंत संस्करण का उपयोग करने के लिए मॉड्यूल आयात स्टेटमेंट को अपडेट करें।
| rnaseq_pe.nf | |
|---|---|
3.5. TRIM_GALORE process का एक युग्मित-अंत संस्करण बनाएं¶
मॉड्यूल की एक प्रति बनाएं ताकि हम दोनों संस्करणों को हाथ में रख सकें।
कोड एडिटर में नई trim_galore_pe.nf मॉड्यूल फ़ाइल खोलें और निम्नलिखित कोड परिवर्तन करें:
- इनपुट घोषणा को
path readsसेtuple path(read1), path(read2)में बदलें scriptब्लॉक में कमांड को अपडेट करें,$readsको--paired ${read1} ${read2}से बदलें- जोड़ी गई फ़ाइलों और विभिन्न नामकरण परंपराओं को प्रतिबिंबित करने के लिए आउटपुट घोषणाओं को अपडेट करें, सब कुछ सूचीबद्ध करने से बचने के लिए वाइल्डकार्ड का उपयोग करें।
अंत में, मॉड्यूल के युग्मित-अंत संस्करण का उपयोग करने के लिए मॉड्यूल आयात स्टेटमेंट को अपडेट करें।
| rnaseq_pe.nf | |
|---|---|
3.6. MULTIQC process के कॉल को TRIM_GALORE से दो रिपोर्ट अपेक्षित करने के लिए अपडेट करें¶
TRIM_GALORE process अब एक अतिरिक्त आउटपुट channel उत्पन्न करती है, इसलिए हमें इसे MultiQC को फीड करना होगा।
TRIM_GALORE.out.fastqc_reports, को TRIM_GALORE.out.fastqc_reports_1, और TRIM_GALORE.out.fastqc_reports_2, से बदलें:
| rnaseq_pe.nf | |
|---|---|
जब हम MultiQC पर हैं, तो आइए report_id पैरामीटर डिफ़ॉल्ट को "all_single-end" से "all_paired-end" में भी अपडेट करें।
| rnaseq_pe.nf | |
|---|---|
3.7. HISAT2_ALIGN process का एक युग्मित-अंत संस्करण बनाएं¶
मॉड्यूल की एक प्रति बनाएं ताकि हम दोनों संस्करणों को हाथ में रख सकें।
कोड एडिटर में नई hisat2_align_pe.nf मॉड्यूल फ़ाइल खोलें और निम्नलिखित कोड परिवर्तन करें:
- इनपुट घोषणा को
path readsसेtuple path(read1), path(read2)में बदलें scriptब्लॉक में कमांड को अपडेट करें,-U $readsको-1 ${read1} -2 ${read2}से बदलेंscriptब्लॉक में कमांड के साथ-साथ आउटपुट घोषणाओं में${reads.simpleName}के सभी उदाहरणों को${read1.simpleName}से बदलें।
अंत में, मॉड्यूल के युग्मित-अंत संस्करण का उपयोग करने के लिए मॉड्यूल आयात स्टेटमेंट को अपडेट करें।
| rnaseq_pe.nf | |
|---|---|
3.8. workflow को चलाएं और परीक्षण करें कि यह काम करता है¶
हम -resume का उपयोग नहीं करते क्योंकि यह कैश नहीं होगा, और पहले की तुलना में दोगुना डेटा प्रोसेस करना है, लेकिन फिर भी यह एक मिनट से कम में पूरा होना चाहिए।
कमांड आउटपुट
और बस इतना ही! अब हमारे पास हमारे workflow के दो थोड़े भिन्न संस्करण हैं, एक single-end रीड डेटा के लिए और एक युग्मित-अंत डेटा के लिए। अगला तार्किक कदम workflow को किसी भी डेटा प्रकार को तुरंत स्वीकार करने योग्य बनाना होगा, जो इस पाठ्यक्रम के दायरे से बाहर है, लेकिन हम इसे एक फॉलो-अप में संभाल सकते हैं।
मुख्य बातें¶
आप जानते हैं कि एकल-नमूना workflow को कई नमूनों की प्रोसेसिंग को समानांतरित करने के लिए कैसे अनुकूलित करें, एक व्यापक QC रिपोर्ट उत्पन्न करें और यदि आवश्यक हो तो युग्मित-अंत रीड डेटा का उपयोग करने के लिए workflow को अनुकूलित करें।
आगे क्या है?¶
बधाई हो, आपने Nextflow For RNAseq मिनी-पाठ्यक्रम पूरा कर लिया है! अपनी सफलता का जश्न मनाएं और एक अच्छा आराम लें!
इसके बाद, हम आपसे इस प्रशिक्षण पाठ्यक्रम के साथ अपने अनुभव के बारे में एक बहुत छोटा सर्वेक्षण पूरा करने के लिए कहते हैं, फिर हम आपको आगे के प्रशिक्षण संसाधनों और सहायक लिंक के साथ एक पेज पर ले जाएंगे।