Bölüm 3: Çok-örnekli paired-end uygulaması¶
Yapay zeka destekli çeviri - daha fazla bilgi ve iyileştirme önerileri
Daha önce, her örneğin verilerini bağımsız olarak işleyen örnek başına bir varyant çağırma boru hattı oluşturdunuz. Bu kursun bu bölümünde, basit iş akışımızı bir üst seviyeye taşıyarak keyfi sayıda örneği işleyebilen güçlü bir toplu otomasyon aracına dönüştüreceğiz. Bunu yaparken, aynı zamanda yeni çalışmalarda daha yaygın olan paired-end verileri kabul edecek şekilde de güncelleyeceğiz.
Bu bölümden nasıl başlanır
Kursun bu bölümü, Bölüm 1: Yönteme Genel Bakış ve Bölüm 2: Tek-örnekli uygulama bölümlerini tamamladığınızı ve doldurulmuş modül dosyalarına sahip çalışan bir rnaseq.nf boru hattınız olduğunu varsayar.
Bölüm 2'yi tamamlamadıysanız veya bu bölüm için yeni başlamak istiyorsanız, Bölüm 2 çözümünü başlangıç noktanız olarak kullanabilirsiniz.
Bu komutları nf4-science/rnaseq/ dizininin içinden çalıştırın:
cp solutions/part2/rnaseq-2.nf rnaseq.nf
cp solutions/part2/modules/fastqc.nf modules/
cp solutions/part2/modules/trim_galore.nf modules/
cp solutions/part2/modules/hisat2_align.nf modules/
cp solutions/part2/nextflow.config .
Bu size tam bir tek-örnekli işleme iş akışı verir. Başarıyla çalıştığını test edebilirsiniz:
Görev¶
Kursun bu bölümünde, iş akışını aşağıdakileri yapacak şekilde genişleteceğiz:
- Örnek bilgilerini bir CSV örnek tablosundan okuma
- Tüm örnekler üzerinde örnek başına QC, kırpma ve hizalama işlemlerini paralel olarak çalıştırma
- Tüm QC raporlarını kapsamlı bir MultiQC raporunda toplama
Bu, Bölüm 1: Yönteme genel bakış bölümünün ikinci kısmındaki adımları otomatikleştirir; burada bu komutları konteynırlarında manuel olarak çalıştırmıştınız.
Ders planı¶
Bunu üç aşamaya ayırdık:
- İş akışının birden fazla girdi örneğini kabul etmesini sağlama.
Bu, tek bir dosya yolundan CSV örnek tablosuna geçişi,
splitCsv()ile ayrıştırmayı ve mevcut tüm süreçleri birden fazla örnek üzerinde çalıştırmayı kapsar. - Kapsamlı QC raporu oluşturma ekleme.
Bu, örnekler arasında çıktıları toplamak için
collect()operatörünü tanıtır ve birleşik bir rapor üretmek için bir MultiQC süreci ekler. - Paired-end RNAseq verilerine geçiş. Bu, paired-end girdiler için süreçleri uyarlamayı (demetler kullanarak), paired-end modülleri oluşturmayı ve ayrı bir test profili kurmayı kapsar.
Bu, Bölüm 1: Yönteme Genel Bakış'ta açıklanan yöntemi uygular (çok-örnekli kullanım durumunu kapsayan ikinci bölüm) ve doğrudan Bölüm 2 tarafından üretilen iş akışı üzerine inşa edilir.
İpucu
Doğru çalışma dizininde olduğunuzdan emin olun:
cd /workspaces/training/nf4-science/rnaseq
1. İş akışının birden fazla girdi örneğini kabul etmesini sağlama¶
Birden fazla örnek üzerinde çalıştırmak için, girdiyi nasıl yönettiğimizi değiştirmemiz gerekiyor: tek bir dosya yolu sağlamak yerine, örnek bilgilerini bir CSV dosyasından okuyacağız.
data/ dizininde örnek ID'leri ve FASTQ dosya yollarını içeren bir CSV dosyası sağlıyoruz.
Bu CSV dosyası, sütunları adlandıran bir başlık satırı içerir.
Bunun hala single-end okuma verisi olduğuna dikkat edin.
Uyarı
CSV'deki dosya yolları, ortamınızla eşleşmesi gereken mutlak yollardır. Bunu sağladığımız eğitim ortamında çalıştırmıyorsanız, yolları sisteminize uyacak şekilde güncellemeniz gerekecektir.
1.1. Test profilinde birincil girdiyi dosya yollarının CSV'si olacak şekilde değiştirme¶
İlk olarak, tek FASTQ yolu yerine CSV dosya yolunu sağlamak için nextflow.config dosyasındaki test profilini güncellememiz gerekiyor.
Ardından, bu CSV'den okumak için kanal oluşturmayı güncellememiz gerekecek.
1.2. CSV girdisini ayrıştırmak için kanal fabrikasını güncelleme¶
Dosyanın içeriğini sadece dosya yolu yerine kanala yüklememiz gerekiyor.
Bunu Hello Nextflow'un Bölüm 2'sinde kullandığımız aynı kalıbı kullanarak yapabiliriz: dosyayı ayrıştırmak için splitCsv() operatörünü uygulayarak, ardından her satırdan FASTQ dosya yolunu çıkarmak için bir map işlemi.
Hello Nextflow kursunda karşılaştığınız şeye kıyasla yeni olan bir şey, bu CSV'nin bir başlık satırına sahip olmasıdır, bu yüzden splitCsv() çağrısına header: true ekliyoruz.
Bu, map işleminde sütunlara ada göre başvurmamızı sağlar: row.fastq_path, her satırın fastq_path sütunundan dosya yolunu çıkarır.
Girdi işleme güncellendi ve iş akışı test edilmeye hazır.
1.3. İş akışını çalıştırma¶
İş akışı artık örnek bilgilerini bir CSV dosyasından okur ve tüm örnekleri paralel olarak işler.
Komut çıktısı
Bu sefer her adım 6 kez çalıştırılıyor, CSV dosyasındaki her örnek için bir kez.
İş akışını birden fazla dosya üzerinde çalıştırmak için gereken tek şey buydu. Nextflow tüm paralelliği bizim için yönetiyor.
Çıkarım¶
Tek dosyalı girdiden, Nextflow'un paralel olarak işlediği CSV tabanlı çok-örnekli girdiye nasıl geçeceğinizi biliyorsunuz.
Sırada ne var?¶
Tüm örneklerden metrikleri birleştiren bir QC raporu toplama adımı ekleyin.
2. Ön işleme QC metriklerini tek bir MultiQC raporunda toplama¶
Tüm bunlar çok sayıda QC raporu üretiyor ve bireysel raporları incelemek zorunda kalmak istemiyoruz. Bu, bir MultiQC raporu toplama adımı eklemek için mükemmel bir nokta.
Bölüm 1'den multiqc komutunu hatırlayın:
Komut, tanınan QC çıktı dosyaları için geçerli dizini tarar ve bunları tek bir HTML raporunda toplar.
Konteyner URI'si community.wave.seqera.io/library/pip_multiqc:a3c26f6199d64b7c idi.
Ek bir parametre kurmamız, girdileri hazırlamamız, süreci yazmamız, bağlamamız ve çıktı işlemeyi güncellememiz gerekiyor.
2.1. Girdileri kurma¶
MultiQC süreci bir rapor adı parametresine ve önceki tüm adımlardan toplanan QC çıktılarına ihtiyaç duyar.
2.1.1. Bir report_id parametresi ekleme¶
Çıktı raporunu adlandırmak için bir parametre ekleyin.
Rapor ID'si varsayılanını test profiline ekleyin:
Ardından, MultiQC süreci için girdileri hazırlamamız gerekecek.
2.1.2. Önceki adımlardan QC çıktılarını toplama ve birleştirme¶
MULTIQC sürecine önceki adımlardan gelen tüm QC ile ilgili çıktıları bir arada vermemiz gerekiyor.
Bunun için, birden fazla kanalı tek bir kanalda toplayan .mix() operatörünü kullanıyoruz.
channel.empty()'den başlıyoruz ve birleştirmek istediğimiz tüm çıktı kanallarını karıştırıyoruz.
Bu, .mix()'i doğrudan çıktı kanallarından birine zincirleme yapmaktan daha temizdir, çünkü tüm girdileri simetrik olarak ele alır.
İş akışımızda, toplanması gereken QC ile ilgili çıktılar şunlardır:
FASTQC.out.zipFASTQC.out.htmlTRIM_GALORE.out.trimming_reportsTRIM_GALORE.out.fastqc_reportsHISAT2_ALIGN.out.log
Bunları tek bir kanalda karıştırıyoruz, ardından raporları tüm örnekler arasında tek bir listeye toplamak için .collect() kullanıyoruz.
Bu satırları HISAT2_ALIGN çağrısından sonra iş akışı gövdesine ekleyin:
Ara değişkenleri kullanmak her adımı netleştirir: multiqc_files_ch tüm bireysel QC dosyalarını tek bir kanalda karıştırılmış olarak içerir ve multiqc_files_list, MultiQC'ye geçmeye hazır toplanan pakettir.
2.2. QC toplama sürecini yazma ve iş akışında çağırma¶
Daha önce olduğu gibi, süreç tanımını doldurmamız, modülü içe aktarmamız ve süreç çağrısını eklememiz gerekiyor.
2.2.1. QC toplama süreci için modülü doldurma¶
modules/multiqc.nf dosyasını açın ve süreç tanımının ana hatlarını inceleyin.
Devam edin ve yukarıda sağlanan bilgileri kullanarak süreç tanımını kendiniz doldurun, ardından çalışmanızı aşağıdaki "Sonra" sekmesindeki çözümle karşılaştırın.
Bu süreç, QC dosyaları için girdi niteleyicisi olarak path '*' kullanır.
'*' joker karakteri, Nextflow'a toplanan tüm dosyaları belirli adlar gerektirmeden çalışma dizinine yerleştirmesini söyler.
val output_name girdisi, rapor dosya adını kontrol eden bir dizedir.
multiqc . komutu geçerli dizini (tüm yerleştirilmiş QC dosyalarının bulunduğu yer) tarar ve raporu oluşturur.
Bunu tamamladığınızda, süreç kullanıma hazırdır.
2.2.2. Modülü dahil etme¶
İçe aktarma ifadesini rnaseq.nf dosyasına ekleyin:
Şimdi süreç çağrısını iş akışına ekleyin.
2.2.3. Süreç çağrısını ekleme¶
Toplanan QC dosyalarını ve rapor ID'sini MULTIQC sürecine geçirin:
MultiQC süreci artık iş akışına bağlandı.
2.3. Çıktı işlemeyi güncelleme¶
MultiQC çıktılarını yayınlama bildirimine eklememiz ve nereye gideceklerini yapılandırmamız gerekiyor.
2.3.1. MultiQC çıktıları için yayınlama hedefleri ekleme¶
MultiQC çıktılarını publish: bölümüne ekleyin:
| rnaseq.nf | |
|---|---|
Ardından, Nextflow'a bu çıktıları nereye koyacağını söylememiz gerekecek.
2.3.2. Yeni çıktı hedeflerini yapılandırma¶
output {} bloğunda MultiQC hedefleri için girdiler ekleyin, bunları bir multiqc/ alt dizinine yayınlayın:
Çıktı yapılandırması tamamlandı.
2.4. İş akışını çalıştırma¶
Önceki işleme adımlarının önbelleğe alınması ve yalnızca yeni MultiQC adımının çalışması için -resume kullanıyoruz.
Komut çıktısı
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 ✔
Önbelleğe alınmış süreç çağrılarından sonra MULTIQC'ye tek bir çağrı eklenmiştir.
MultiQC çıktılarını sonuçlar dizininde bulabilirsiniz.
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
Son all_single-end.html dosyası, göz atmayı kolaylaştıran tek bir HTML dosyasında pratik bir şekilde paketlenmiş tam toplu rapordur.
Çıkarım¶
Birden fazla kanaldan çıktıları nasıl toplayacağınızı, bunları .mix() ve .collect() ile nasıl paketleyeceğinizi ve bir toplama sürecine nasıl geçireceğinizi biliyorsunuz.
Sırada ne var?¶
İş akışını paired-end RNAseq verilerini işleyecek şekilde uyarlayın.
3. Paired-end RNAseq verilerinin işlenmesini etkinleştirme¶
Şu anda iş akışımız yalnızca single-end RNAseq verilerini işleyebiliyor. Paired-end RNAseq verilerini görmek giderek daha yaygın hale geliyor, bu nedenle bunu da işleyebilmek istiyoruz.
İş akışını veri türünden tamamen bağımsız hale getirmek biraz daha gelişmiş Nextflow dil özelliklerini kullanmayı gerektirecektir, bu yüzden bunu burada yapmayacağız, ancak neyin uyarlanması gerektiğini göstermek için paired-end işleme versiyonu yapabiliriz.
3.1. İş akışını kopyalama ve girdileri güncelleme¶
Single-end iş akışı dosyasını kopyalayarak başlıyoruz ve paired-end veriler için güncelliyoruz.
3.1.1. İş akışı dosyasını kopyalama¶
Paired-end versiyonu için başlangıç noktası olarak kullanmak üzere iş akışı dosyasının bir kopyasını oluşturun.
Şimdi yeni dosyadaki parametreleri ve girdi işlemeyi güncelleyin.
3.1.2. Paired-end test profili ekleme¶
data/ dizininde örnek ID'leri ve paired FASTQ dosya yollarını içeren ikinci bir CSV dosyası sağlıyoruz.
Bu dosyaya işaret eden ve paired-end rapor ID'si kullanan bir test_pe profili nextflow.config dosyasına ekleyin.
Paired-end veriler için test profili hazır.
3.1.3. Kanal fabrikasını güncelleme¶
.map() operatörünün her iki FASTQ dosya yolunu da alması ve bunları bir liste olarak döndürmesi gerekiyor.
Girdi işleme paired-end veriler için yapılandırıldı.
3.2. FASTQC modülünü paired-end veriler için uyarlama¶
Paired-end versiyonu oluşturmak için modülü kopyalayın:
FASTQC sürecinin girdisinin değişmesine gerek yok — Nextflow iki dosyadan oluşan bir liste aldığında, her ikisini de yerleştirir ve reads her iki dosya adına da genişler.
Gereken tek değişiklik çıktı bloğundadır: artık örnek başına iki FastQC raporu aldığımız için, simpleName tabanlı kalıplardan joker karakterlere geçiyoruz.
Bu, süreci single-end veya paired-end verilerden birini işleyebilecek şekilde genelleştirir.
Paired-end versiyonunu kullanmak için rnaseq_pe.nf dosyasındaki içe aktarmayı güncelleyin:
FASTQC modülü ve içe aktarması paired-end veriler için güncellendi.
3.3. TRIM_GALORE modülünü paired-end veriler için uyarlama¶
Paired-end versiyonu oluşturmak için modülü kopyalayın:
Bu modül daha önemli değişiklikler gerektirir:
- Girdi tek bir yoldan iki yoldan oluşan bir demete değişir
- Komut
--pairedbayrağını ekler ve her iki okuma dosyasını da alır - Çıktı, Trim Galore'un paired-end adlandırma kurallarını yansıtacak şekilde değişir ve her okuma dosyası için ayrı FastQC raporları üretir
| modules/trim_galore_pe.nf | |
|---|---|
rnaseq_pe.nf dosyasındaki içe aktarmayı güncelleyin:
TRIM_GALORE modülü ve içe aktarması paired-end veriler için güncellendi.
3.4. HISAT2_ALIGN modülünü paired-end veriler için uyarlama¶
Paired-end versiyonu oluşturmak için modülü kopyalayın:
Bu modül benzer değişiklikler gerektirir:
- Girdi tek bir yoldan iki yoldan oluşan bir demete değişir
- HISAT2 komutu
-U(eşleşmemiş) yerine-1ve-2(eşleşmiş) okuma argümanlarına değişir - Komuttaki ve çıktı bildirimlerindeki
reads.simpleName'in tüm kullanımları, artık çiftin belirli bir üyesine başvurduğumuz içinread1.simpleNameile değişir
rnaseq_pe.nf dosyasındaki içe aktarmayı güncelleyin:
HISAT2_ALIGN modülü ve içe aktarması paired-end veriler için güncellendi.
3.5. MultiQC toplamasını paired-end çıktıları için güncelleme¶
Paired-end TRIM_GALORE süreci artık bir yerine iki ayrı FastQC rapor kanalı (fastqc_reports_1 ve fastqc_reports_2) üretiyor.
Her ikisini de dahil etmek için rnaseq_pe.nf dosyasındaki .mix() bloğunu güncelleyin:
MultiQC toplaması artık her iki paired-end FastQC rapor setini de içeriyor.
3.6. Çıktı işlemeyi paired-end çıktıları için güncelleme¶
publish: bölümü ve output {} bloğu da paired-end TRIM_GALORE sürecinden gelen iki ayrı FastQC rapor kanalını yansıtmalıdır.
rnaseq_pe.nf dosyasındaki publish: bölümünü güncelleyin:
output {} bloğundaki ilgili girdileri güncelleyin:
Paired-end iş akışı artık tamamen güncellendi ve çalıştırılmaya hazır.
3.7. İş akışını çalıştırma¶
Bu önbelleğe almayacağı ve işlenecek verilerin öncekinden iki kat daha fazla olduğu için -resume kullanmıyoruz, ancak yine de bir dakikadan kısa sürede tamamlanması gerekiyor.
Komut çıktısı
Şimdi iş akışımızın biri single-end okuma verileri için, diğeri paired-end veriler için olmak üzere biraz farklılaşan iki versiyonuna sahibiz. Bir sonraki mantıklı adım, iş akışının her iki veri türünü de anında kabul etmesini sağlamak olacaktır; bu, bu kursun kapsamı dışındadır, ancak bunu bir takip kursunda ele alabiliriz.
Çıkarım¶
Tek örnekli bir iş akışını birden fazla örneğin işlenmesini paralelleştirmek, kapsamlı bir QC raporu oluşturmak ve iş akışını paired-end okuma verilerini kullanacak şekilde uyarlamak için nasıl uyarlayacağınızı biliyorsunuz.
Sırada ne var?¶
Kendinize büyük bir alkış verin! Nextflow for RNAseq kursunu tamamladınız.
Öğrendiklerinizi gözden geçirmek ve sırada ne olduğunu öğrenmek için son kurs özetine gidin.