Bölüm 3: Kodu modüllere taşıma¶
Yapay Zeka Destekli Çeviri - daha fazla bilgi ve iyileştirme önerileri
Bu kursun ilk bölümünde, tamamen doğrusal olan ve her örneğin verisini diğerlerinden bağımsız olarak işleyen bir varyant çağırma pipeline'ı oluşturdunuz.
İkinci bölümde, Bölüm 1'deki pipeline üzerine inşa ederek GATK ile ortak varyant çağırmayı uygulamak için kanalları ve kanal operatörlerini nasıl kullanacağınızı gösterdik.
Bu bölümde, o workflow'daki kodu modüllere nasıl dönüştüreceğinizi göstereceğiz. Bu eğitim bölümünü takip etmek için Bölüm 1 ve Bölüm 2'yi ve modüllerin temellerini kapsayan Merhaba Modüller bölümünü tamamlamış olmanız gerekir.
0. Isınma¶
Workflow'umuzu geliştirmeye başladığımızda, her şeyi tek bir kod dosyasına koyduk. Şimdi kodumuzu modülerleştirme zamanı, yani process tanımlarını modüllere çıkarma.
Bölüm 2'deki ile aynı workflow ile başlayacağız, bunu sizin için genomics-3.nf dosyasında sağladık.
Not
Doğru çalışma dizininde olduğunuzdan emin olun:
cd /workspaces/training/nf4-science/genomics
Başlangıç noktasını doğrulamak için workflow'u çalıştırın:
N E X T F L O W ~ version 25.10.2
Launching `genomics-3.nf` [serene_borg] DSL2 - revision: 0cbebb67a1
executor > local (7)
[6f/83ee72] SAMTOOLS_INDEX (3) | 3 of 3 ✔
[53/b9d342] GATK_HAPLOTYPECALLER (1) | 3 of 3 ✔
[0c/fa6d15] GATK_JOINTGENOTYPING | 1 of 1 ✔
Proje dizininizin içinde artık bir work dizini ve bir results_genomics dizini olacak.
Çıkarım¶
Workflow'unuzu modülerleştirmeye başlamaya hazırsınız.
Sırada ne var?¶
Genomics workflow'unun process'lerini modüllere taşıyın.
1. Process'leri modüllere taşıma¶
Merhaba Modüller bölümünde öğrendiğiniz gibi, process tanımını herhangi bir dizindeki kendi dosyasına kopyalayarak bir modül oluşturabilirsiniz ve bu dosyaya istediğiniz adı verebilirsiniz.
Daha sonra (özellikle teste geldiğimizde) netleşecek nedenlerle, bu eğitimde dosyayı main.nf olarak adlandırma ve araç kiti ile komuttan sonra adlandırılmış bir dizin yapısına yerleştirme konvansiyonunu takip edeceğiz.
1.1. SAMTOOLS_INDEX process'i için bir modül oluşturma¶
SAMTOOLS_INDEX process'i durumunda, 'samtools' araç kiti ve 'index' komuttur. Bu yüzden, modules/samtools/index dizin yapısını oluşturacağız ve SAMTOOLS_INDEX process tanımını bu dizinin içindeki main.nf dosyasına koyacağız.
main.nf dosyasını açın ve SAMTOOLS_INDEX process tanımını içine kopyalayın.
| modules/samtools/index/main.nf | |
|---|---|
Ardından, SAMTOOLS_INDEX process tanımını genomics-3.nf dosyasından kaldırın ve bir sonraki process tanımından önce modül için bir import bildirimi ekleyin, şu şekilde:
Artık workflow'u tekrar çalıştırabilirsiniz ve öncekiyle aynı şekilde çalışması gerekir. -resume bayrağını sağlarsanız, hiçbir yeni görevin çalıştırılması bile gerekmez:
Komut çıktısı
1.2. GATK_HAPLOTYPECALLER ve GATK_JOINTGENOTYPING process'leri için modüller oluşturma¶
Kalan process'ler için aynı adımları tekrarlayın. Her process için:
- Dizin yapısını oluşturun (
modules/gatk/haplotypecaller/vemodules/gatk/jointgenotyping/) - Process tanımını içeren bir
main.nfdosyası oluşturun - Process tanımını
genomics-3.nfdosyasından kaldırın - Modül için bir import bildirimi ekleyin
İşiniz bittiğinde, şunu çalıştırarak modüller dizin yapınızın doğru olduğunu kontrol edin:
Dizin içeriği
Ana workflow dosyasında, parametreler bölümünden sonra şuna benzer bir şey de olmalıdır:
include { SAMTOOLS_INDEX } from './modules/samtools/index/main.nf'
include { GATK_HAPLOTYPECALLER } from './modules/gatk/haplotypecaller/main.nf'
include { GATK_JOINTGENOTYPING } from './modules/gatk/jointgenotyping/main.nf'
workflow {
Çıkarım¶
Genomics workflow'u örnek olarak kullanarak bir workflow'u modülerleştirme pratiği yaptınız.
Sırada ne var?¶
Modülerleştirilmiş workflow'u test edin.
2. Modülerleştirilmiş workflow'u test etme¶
Her şeyin hala çalıştığını doğrulamak için modülerleştirilmiş workflow'u çalıştırın.
N E X T F L O W ~ version 25.10.2
Launching `genomics-3.nf` [astonishing_venter] DSL2 - revision: ca27264c13
[6f/83ee72] SAMTOOLS_INDEX (3) | 3 of 3, cached: 3 ✔
[53/b9d342] GATK_HAPLOTYPECALLER (3) | 3 of 3, cached: 3 ✔
[0c/fa6d15] GATK_JOINTGENOTYPING | 1 of 1, cached: 1 ✔
Her şey hala çalışıyor, pipeline'ın yeniden başlatılabilirliği dahil.
Sonuçlar results_genomics dizinine yayınlanmaya devam ediyor.
results_genomics/
├── family_trio.joint.vcf
├── family_trio.joint.vcf.idx
├── gvcf
│ ├── reads_father.bam.g.vcf
│ ├── reads_father.bam.g.vcf.idx
│ ├── reads_mother.bam.g.vcf
│ ├── reads_mother.bam.g.vcf.idx
│ ├── reads_son.bam.g.vcf
│ └── reads_son.bam.g.vcf.idx
└── indexed_bam
├── reads_father.bam
├── reads_father.bam.bai
├── reads_mother.bam
├── reads_mother.bam.bai
├── reads_son.bam
└── reads_son.bam.bai
Çıkarım¶
Bir workflow'u modülerleştirdiniz ve öncekiyle aynı şekilde çalıştığını doğruladınız.
Sırada ne var?¶
Öğrendiklerinizi gözden geçirin ve teste ilerleyin.
3. Özet¶
Workflow'u modülerleştirdiniz ve pipeline'ın çalışma şeklinde hiçbir şey değişmedi. Bu kasıtlıdır: kodu işlevselliğini etkilemeden yeniden yapılandırdınız.
Modüller yalnızca process mantığını içerir, bu da onları temiz ve yeniden kullanılabilir yapar. Ana betik neyin nereye yayınlanacağını kontrol ederken, modüller hesaplama görevi üzerine odaklanmış kalır.
Kodunuzu sürdürmeyi kolaylaştıracak şeyler için bir temel oluşturdunuz. Örneğin, artık nf-test framework'ü kullanarak pipeline'ınıza testler ekleyebilirsiniz. Bu kursun bir sonraki bölümünde bakacağımız şey budur.