Bölüm 3: Çok-örnekli paired-end uygulaması¶
Yapay Zeka Destekli Çeviri - daha fazla bilgi ve iyileştirme önerileri
Bu kursun son 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 değiştireceğiz.
Bunu üç aşamada yapacağız:
- İş akışının birden fazla girdi örneğini kabul etmesini ve yürütmeyi paralelleştirmesini sağlama
- Kapsamlı QC raporu oluşturma ekleme
- Paired-end RNAseq verilerine geçiş
1. İş akışının birden fazla girdi örneğini kabul etmesini ve yürütmeyi paralelleştirmesini sağlama¶
Girdileri nasıl yönettiğimizi değiştirmemiz gerekecek.
1.1. Birincil girdiyi tek bir dosya yerine dosya yollarının CSV'si olacak şekilde değiştirme¶
data/ dizininde örnek ID'leri ve FASTQ dosya yollarını içeren bir CSV dosyası sağlıyoruz.
Bu CSV dosyası bir başlık satırı içerir.
FASTQ dosya yollarının mutlak yollar olduğuna dikkat edin.
Birincil girdi parametresini input_csv olarak yeniden adlandıralım ve varsayılanı single-end.csv dosyasının yolu olacak şekilde değiştirelim.
| rnaseq.nf | |
|---|---|
1.2. Girdi olarak bir CSV'yi işlemek için girdi kanalı fabrikasını güncelleme¶
Dosyanın içeriğini sadece dosya yolu yerine kanala yüklemek isteyeceğiz, bu nedenle CSV formatını ayrıştırmak için .splitCsv() operatörünü, ardından istediğimiz belirli bilgi parçasını (FASTQ dosya yolunu) almak için .map() operatörünü kullanıyoruz.
| rnaseq.nf | |
|---|---|
1.3. İş akışının çalıştığını test etmek için çalıştırma¶
Komut çıktısı
Bu sefer her adımın sağladığımız 6 veri dosyasının her birinde 6 kez çalıştırıldığını görüyoruz.
İş 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.
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!
2.1. QC toplama işlemi için bir modül oluşturma¶
MULTIQC işlemini barındırmak için modules/multiqc.nf adlı bir modül dosyası oluşturalım:
Dosyayı kod düzenleyicide açın ve aşağıdaki kodu içine kopyalayın:
2.2. Modülü iş akışı dosyasına aktarma¶
rnaseq.nf dosyasına include { MULTIQC } from './modules/multiqc.nf' ifadesini ekleyin:
| rnaseq.nf | |
|---|---|
2.3. Bir report_id parametresi ekleme ve mantıklı bir varsayılan değer verme¶
| rnaseq.nf | |
|---|---|
2.4. İşlemi önceki adımların çıktıları üzerinde çağırma¶
MULTIQC işlemine önceki adımlardan gelen tüm QC ile ilgili çıktıları vermemiz gerekiyor.
Bunun için, birden fazla kanalı tek bir kanalda toplayan .mix() operatörünü kullanacağız.
A, B, C ve D adlı dört işlemimiz olsaydı ve her birinin basit bir .out kanalı olsaydı, sözdizimi şöyle görünürdü: A.out.mix( B.out, C.out, D.out ). Gördüğünüz gibi, onu birleştirmek istediğiniz kanalların ilkine (hangisi olduğu önemli değil) uyguluyorsunuz ve virgülle ayrılmış diğerlerini takip eden parantez içine ekliyorsunuz.
İş akışımızda, toplanması gereken şu çıktılar var:
FASTQC.out.zipFASTQC.out.htmlTRIM_GALORE.out.trimming_reportsTRIM_GALORE.out.fastqc_reportsHISAT2_ALIGN.out.log
Yani sözdizimi örneği şu hale geliyor:
FASTQC.out.zip.mix(
FASTQC.out.html,
TRIM_GALORE.out.trimming_reports,
TRIM_GALORE.out.fastqc_reports,
HISAT2_ALIGN.out.log
)
Bu, örnek başına QC raporlarını toplayacak.
Ancak bunları tüm örnekler arasında toplamak istediğimiz için, tüm örneklere ait raporları tek bir MULTIQC çağrısında toplamak amacıyla collect() operatörünü eklememiz gerekiyor.
Ayrıca ona report_id parametresini de vermemiz gerekiyor.
Bu bize şunu verir:
| Tamamlanmış MULTIQC çağrısı | |
|---|---|
Tam iş akışı bloğu bağlamında, sonuç şöyle görünüyor:
2.5. İş akışının çalıştığını test etmek için çalıştırma¶
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 ✔
Bu sefer önbelleğe alınmış işlem çağrılarından sonra eklenen tek bir MULTIQC çağrısı görüyoruz:
Çıktıları TRIM_GALORE işleminde publishDir yönergesi tarafından belirtildiği gibi results/trimming altında 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.
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. rnaseq_pe.nf adlı bir iş akışı kopyası oluşturma¶
3.2. Varsayılan input_csv'yi paired-end verilere işaret edecek şekilde değiştirme¶
data/ dizininde örnek ID'leri ve paired FASTQ dosya yollarını içeren ikinci bir CSV dosyası sağlıyoruz
input_csv varsayılanını paired-end.csv dosyasının yolu olacak şekilde değiştirelim.
| rnaseq_pe.nf | |
|---|---|
3.3. Kanal fabrikasını güncelleme¶
.map() operatörüne artık her iki FASTQ dosya yolunu da almasını söylememiz gerekiyor.
Yani row -> file(row.fastq_path), row -> [file(row.fastq_1), file(row.fastq_2)] olur
| rnaseq_pe.nf | |
|---|---|
3.4. FASTQC işleminin paired-end versiyonunu oluşturma¶
Her iki versiyonu da elimizde bulundurmak için modülün bir kopyasını oluşturalım.
Yeni fastqc_pe.nf modül dosyasını kod düzenleyicide açın ve aşağıdaki kod değişikliklerini yapın:
scriptbloğunda (satır 17)fastqc $reads'ifastqc ${reads}olarak değiştirin, böylecereadsgirdisi artık tek bir yol yerine iki yoldan oluşan bir demet olduğu için açılacaktır.- Çıktı dosyalarını ayrı ayrı işlemek zorunda kalmamak için
${reads.simpleName}'i bir joker karakterle (*) değiştirin.
| modules/fastqc_pe.nf | |
|---|---|
Teknik olarak bu, FASTQC işlemini single-end veya paired-end RNAseq verilerinden birini işleyebilecek şekilde genelleştirir.
Son olarak, modülün paired-end versiyonunu kullanmak için modül içe aktarma ifadesini güncelleyin.
| rnaseq_pe.nf | |
|---|---|
3.5. TRIM_GALORE işleminin paired-end versiyonunu oluşturma¶
Her iki versiyonu da elimizde bulundurmak için modülün bir kopyasını oluşturun.
Yeni trim_galore_pe.nf modül dosyasını kod düzenleyicide açın ve aşağıdaki kod değişikliklerini yapın:
- Girdi bildirimini
path reads'tentuple path(read1), path(read2)olarak değiştirin scriptbloğundaki komutu güncelleyin,$reads'i--paired ${read1} ${read2}ile değiştirin- Eklenen dosyaları ve farklı adlandırma kurallarını yansıtacak şekilde çıktı bildirimlerini güncelleyin, her şeyi listelemek zorunda kalmamak için joker karakterler kullanın.
Son olarak, modülün paired-end versiyonunu kullanmak için modül içe aktarma ifadesini güncelleyin.
| rnaseq_pe.nf | |
|---|---|
3.6. MULTIQC işlemine yapılan çağrıyı TRIM_GALORE'dan iki rapor bekleyecek şekilde güncelleme¶
TRIM_GALORE işlemi artık ek bir çıktı kanalı üretiyor, bu yüzden bunu MultiQC'ye beslememiz gerekiyor.
TRIM_GALORE.out.fastqc_reports,'i TRIM_GALORE.out.fastqc_reports_1, artı TRIM_GALORE.out.fastqc_reports_2, ile değiştirin:
| rnaseq_pe.nf | |
|---|---|
MultiQC üzerindeyken, report_id parametresinin varsayılanını da "all_single-end"'den "all_paired-end"'e güncelleyelim.
| rnaseq_pe.nf | |
|---|---|
3.7. HISAT2_ALIGN işleminin paired-end versiyonunu oluşturma¶
Her iki versiyonu da elimizde bulundurmak için modülün bir kopyasını oluşturun.
Yeni hisat2_align_pe.nf modül dosyasını kod düzenleyicide açın ve aşağıdaki kod değişikliklerini yapın:
- Girdi bildirimini
path reads'tentuple path(read1), path(read2)olarak değiştirin scriptbloğundaki komutu güncelleyin,-U $reads'i-1 ${read1} -2 ${read2}ile değiştirin${reads.simpleName}'in tüm örnekleriniscriptbloğundaki komutta ve çıktı bildirimlerinde${read1.simpleName}ile değiştirin.
Son olarak, modülün paired-end versiyonunu kullanmak için modül içe aktarma ifadesini güncelleyin.
| rnaseq_pe.nf | |
|---|---|
3.8. İş akışının çalıştığını test etmek için ç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ı
İşte bu kadar! Ş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ımlar¶
Tek örnekli bir iş akışını birden fazla örneğin işlenmesini paralelleştirmek, kapsamlı bir QC raporu oluşturmak ve gerekirse iş akışını paired-end okuma verilerini kullanacak şekilde uyarlamak için nasıl uyarlayacağınızı biliyorsunuz.
Sırada ne var?¶
Tebrikler, Nextflow For RNAseq mini-kursunu tamamladınız! Başarınızı kutlayın ve hak ettiğiniz bir mola verin!
Ardından, bu eğitim kursu hakkındaki deneyiminizle ilgili çok kısa bir anketi tamamlamanızı rica ediyoruz, sonra sizi daha fazla eğitim kaynağı ve yararlı bağlantılara sahip bir sayfaya götüreceğiz.