भाग 4: Hello Modules - वीडियो ट्रांसक्रिप्ट¶
AI-सहायता प्राप्त अनुवाद - अधिक जानें और सुधार सुझाएं
महत्वपूर्ण नोट्स
यह पेज केवल ट्रांसक्रिप्ट दिखाता है। पूर्ण चरण-दर-चरण निर्देशों के लिए, कोर्स सामग्री पर वापस जाओ।
ट्रांसक्रिप्ट में दिखाए गए सेक्शन नंबर केवल संकेत के उद्देश्य से दिए गए हैं और हो सकता है कि सामग्री में सभी सेक्शन नंबर शामिल न हों।
स्वागत¶
नमस्ते, और Hello Nextflow के भाग चार में वापस स्वागत है। यह सेक्शन पूरी तरह से modules के बारे में है, और यह कोर्स का काफी छोटा सेक्शन है। हम वास्तव में बहुत ज्यादा कोड नहीं लिखने वाले हैं, यह ज्यादातर इस बारे में है कि हम अपनी pipeline में कोड को कैसे व्यवस्थित करते हैं।
अब तक, हम सब कुछ एक ही फ़ाइल में डाल रहे थे, जो ठीक है, और वास्तव में पुराने दिनों में हम इसी तरह Nextflow pipelines बनाते थे।
लेकिन जैसे-जैसे वह pipeline बढ़ती है, स्क्रिप्ट लंबी और लंबी और लंबी होती जाती है और नेविगेट करना, मेंटेन करना कठिन होता जाता है, और इसका मतलब यह भी है कि हम वास्तव में कोड को शेयर नहीं कर सकते।
Nextflow modules हमें उस मुख्य स्क्रिप्ट से processes को बाहर निकालने और फिर उन्हें import करने की अनुमति देते हैं। इसका मतलब है कि कोड को नेविगेट करना आसान है और इसका मतलब यह भी है कि हम उस module कोड को विभिन्न pipelines के बीच शेयर कर सकते हैं।
docs के मुख्य पेज पर यह छोटा डायग्राम इस concept को अच्छी तरह से दिखाता है। एक विशाल स्क्रिप्ट के बजाय, हम इन अलग module फ़ाइलों को, विभिन्न module स्क्रिप्ट्स से include करने जा रहे हैं, और यह सब workflow में खींचा जाएगा, लेकिन यह अभी भी बिल्कुल उसी तरह चलने वाला है।
तो चलो GitHub Codespaces में जाते हैं और थोड़ा देखते हैं। पहले की तरह, मैंने यहां अपने workspace को थोड़ा साफ कर दिया है। पुरानी Nextflow directories और work directory आदि को हटा दिया है। लेकिन कोई बात नहीं अगर तुम्हारे पास अभी भी वे फ़ाइलें हैं।
मैं hello modules फ़ाइल में काम करना शुरू करने वाला हूं, जो मूल रूप से वहीं है जहां हमने पिछले अध्याय के अंत में इसे छोड़ा था। हमारे पास यहां तीन processes हैं। हमारे पास कुछ params हैं, workflow ब्लॉक है, जहां हम उन तीन processes को चला रहे हैं और उन्हें channels के साथ जोड़ रहे हैं। फिर हम output channels को publish करते हैं और हमारे पास output ब्लॉक है जो बताता है कि उन फ़ाइलों को कैसे publish करना है।
1. modules को स्टोर करने के लिए एक directory बनाओ¶
अब, जैसा कि मैं कह रहा हूं, हम वास्तव में बहुत ज्यादा कोड लिखने या edit करने वाले नहीं हैं। हम बस उस कोड को इधर-उधर करने वाले हैं जो हमारे पास पहले से है। Nextflow module फ़ाइलों में आमतौर पर एक single process होती है, और परंपरा के अनुसार हम आम तौर पर उन्हें modules नाम की directory में रखते हैं। लेकिन तुम इसे जो चाहो कह सकते हो। लेकिन मैं यहां अपनी repository में एक modules directory रखने वाला हूं, और फिर मैं प्रत्येक process के लिए एक फ़ाइल बनाने वाला हूं। तो मैं कहूंगा new file, sayHello.nf।
2. sayHello() के लिए एक module बनाओ¶
अब मैं अपनी process लेने वाला हूं और मैं बस इस कोड को select करूंगा, इसे मुख्य hello modules फ़ाइल से cut करूंगा और इसे यहां paste करूंगा।
जाहिर है कि यह अपने आप कुछ नहीं करता। हमारी मुख्य स्क्रिप्ट को अभी भी उस process की जरूरत है, इसलिए हमें इसे किसी तरह वापस खींचना होगा। और हम इसे include statement के साथ करते हैं।
तो मैं include टाइप करता हूं और कुछ curly brackets, और फिर मैं process का नाम लेता हूं। और मैं from कहता हूं, और फिर मैं इसे एक relative file path देता हूं। तो यह कहता है, ./ से शुरू होता है क्योंकि यह relative है जहां से यह स्क्रिप्ट save की गई है। तो यह modules sayHello.nf है।
ध्यान दो कि VS code extension यहां काफी helpful है। यह हमें बताता है, अगर यह इस फ़ाइल को ढूंढ सकता है और अगर यह एक process ढूंढ सकता है, जिसे मैं नाम दे रहा हूं। अगर मैं जानबूझकर यहां एक typo डालता हूं, तो यह मुझे तुरंत एक error देता है और यह मुझे बताएगा कि यह उस process को नहीं ढूंढ सकता जिसे मैं import करने की कोशिश कर रहा हूं। तो बस किसी भी error पर नजर रखो जो तुम्हें मिले।
और बस यही है। हमारे पास अभी भी हमारी process यहां है। यहां नीचे कोई बदलाव की जरूरत नहीं है। process का नाम वही है और यह बिल्कुल उसी तरह execute होती है। बस process का वास्तविक कोड अब एक अलग फ़ाइल में है।
हम Nextflow workflow को फिर से चला सकते हैं, यह बिल्कुल उसी तरह काम करने वाला है। और यह मूल रूप से कोर्स के इस अध्याय का बाकी हिस्सा है बस इन तीन processes को उनकी अपनी फ़ाइलों में ले जाना।
तो चलो अब ऐसा करते हैं। मैं दूसरी process के लिए जल्दी से एक नई module फ़ाइल बनाने वाला हूं: convertToUpper.nf। मैं उस कोड को cut करूंगा, इसे यहां paste करूंगा। और फिर मैं उसे include करूंगा। चलो बस, बढ़िया।
और फिर मैं collectGreetings.nf के लिए एक नई फ़ाइल बनाने वाला हूं। उसे cut करो।
बहुत सारा cut करना, cutting और copying और pasting।
और अब हमारी मुख्य workflow स्क्रिप्ट अचानक बहुत, बहुत छोटी दिख रही है, बहुत अधिक approachable और पढ़ने में बहुत आसान।
और तुम देख सकते हो कि अब project हमारी विभिन्न फ़ाइलों के साथ कैसे बनना शुरू होता है। हम उन जगहों पर detail में जा सकते हैं जहां हम चाहते हैं। pipeline में specific steps को ढूंढने के लिए अपने रास्ते को बहुत आसानी से navigate कर सकते हैं, और जल्दी से एक overview प्राप्त कर सकते हैं कि pipeline क्या कर रही है।
VS Code के साथ modules को navigate करना¶
अब, निश्चित रूप से, ऐसा करने का नुकसान यह है कि अगर तुम्हारे पास एक बड़ी pipeline है, तो तुम्हारे पास बहुत सारी module फ़ाइलें होंगी और वे कई sub directories में व्यवस्थित हो सकती हैं या सभी प्रकार की चीजें। अब, फिर से, यहां एक छोटा सा tip। VS Code extension तुम्हारे लिए तुम्हारे code base को navigate करने में काफी अच्छा है और तुम्हें वहां के कोड के बारे में भी बताता है।
तुम देख सकते हो VS Code समझता है कि यह process क्या है और जब मैं hover करता हूं तो मुझे इसका एक छोटा overview देता है ताकि मैं बिना जाए और source code को ढूंढे, देख सकूं कि inputs और outputs क्या हैं, जो आमतौर पर सबसे महत्वपूर्ण चीज है जब मैं इसे एक workflow में उपयोग कर रहा हूं।
और अगर मैं command hold करता हूं, मैं Mac पर हूं, और मैं process के नाम पर क्लिक करता हूं, तो यह फ़ाइल को सीधे तुरंत खोलता है। इसे खींचता है। तो मैं बिना यह सोचे कि वास्तविक file paths क्या हैं, सीधे वहां जा सकता हूं। और यह कहीं भी काम करता है, मैं यह भी कर सकता हूं, चाहे processes को कहीं भी call किया जा रहा हो। तो यह वास्तव में तेज बनाता है।
4.4. workflow को चलाओ¶
ठीक है, चलो बस जांच लेते हैं कि pipeline अभी भी उम्मीद के मुताबिक चलती है। तो terminal लाओ। चलो "nextflow run hello modules" करते हैं, और देखते हैं कि क्या यह बिना किसी समस्या के execute होती है।
उम्मीद है कि इसका पूरा point यह है कि pipeline मूल रूप से unchanged है, इसलिए तुम्हें वास्तव में पहले जब हमने इसे चलाया था तब से कोई बदलाव नहीं दिखना चाहिए। यहां output बिल्कुल वैसा ही दिखता है, और तुम हमारी results directory को सभी समान फ़ाइलों के साथ देख सकते हो, तो यह बढ़िया है। कोई बदलाव नहीं अच्छा है।
nf-core/modules पर एक नोट¶
इससे पहले कि हम wrap up करें, मैं modules के संबंध में collaboration की शक्ति पर जल्दी से touch करना चाहता हूं। ये फ़ाइलें मेरी repository में बैठी हैं, इसलिए यह तुरंत स्पष्ट नहीं है कि हम उन पर कैसे collaborate कर सकते हैं। और ऐसा करने के कई अलग-अलग तरीके हैं, लेकिन शायद इसका सबसे बड़ा और सबसे प्रसिद्ध उदाहरण nf-core है।
अगर मैं nf-core website पर जाता हूं, मैं resources पर जाता हूं, और modules। तुम देख सकते हो कि nf-core के पास modules की एक विशाल library है, जब मैं इसे देखता हूं तो लगभग 1700 modules के ठीक नीचे। और इसलिए मैं अपने किसी भी पसंदीदा tools का नाम टाइप कर सकता हूं, जा सकता हूं और पता लगा सकता हूं कि क्या किसी और ने पहले से ही इसके लिए एक module लिखा है, और यहां इस pre-written module process को सभी inputs, outputs, software containers, इस सारी जानकारी के साथ देख सकता हूं, और तुम यहां side पर देख सकते हो, कितनी विभिन्न nf-core pipelines सभी इस single shared process का उपयोग कर रही हैं।
यह थोड़ा extreme उदाहरण है, लेकिन तुम देख सकते हो यह वास्तव में इस कोड को reuse कर रहा है। और अगर मैं इसके लिए GitHub source पर क्लिक करता हूं, तो यह बिल्कुल वैसा ही है जैसा हम कर रहे हैं। यह बस एक फ़ाइल में एक बड़ी process है।
अब nf-core की तरफ, हम उन फ़ाइलों को share करने और उन्हें विभिन्न repositories में लाने में सक्षम होने के लिए कुछ tricks करते हैं। और अगर तुम इसके बारे में अधिक जानना चाहते हो, तो जाओ और विशेष रूप से nf-core के साथ उपयोग और निर्माण के बारे में हमारे पास जो कोर्स है उसे देखो। लेकिन मैं बस तुम्हें एक idea देना चाहता था कि code reuse की यह concept कितनी शक्तिशाली हो सकती है।
समाप्ति¶
ठीक है, modules के लिए बस इतना ही। मैंने तुमसे कहा था कि यह कोर्स का एक छोटा सेक्शन था। quiz देखो, सुनिश्चित करो कि तुम इसे समझते हो और सुनिश्चित करो कि सब कुछ अभी भी ठीक से काम कर रहा है। और मैं तुम्हें अगले वीडियो में वापस मिलूंगा, जो पूरी तरह से software containers के बारे में है। बहुत-बहुत धन्यवाद।