Pitanje:
Spojite stotine malih BAM datoteka u jednu BAM datoteku
Scott Gigante
2017-05-19 10:50:24 UTC
view on stackexchange narkive permalink

Radim s više od milijun (dugih) čitanja i poravnavam ih s velikim genomom. Razmišljam o paralelnom pokretanju mojih poslova poravnanja, vodoravnoj distribuciji na stotine čvorova, umjesto da pokušavam pokrenuti jedan posao s desecima jezgri.

Želio bih spojiti razvrstane BAM datoteke za daljnju analizu nizvodno . Koji je to najučinkovitiji način zadržavajući važeće zaglavlje datoteke i koristeći činjenicu da su ulazne bam datoteke već sortirane?

Dva odgovori:
#1
+13
Devon Ryan
2017-05-19 12:06:36 UTC
view on stackexchange narkive permalink

samtools spajanje merged.bam * .bam dovoljno je učinkovit jer su ulazne datoteke sortirane. Sa sambambom i / ili biobambamom možete postati malo brži, ali oni obično nisu već instalirani i IO ionako brzo postaje usko grlo.

Znate li kako se ovo uspoređuje s spajanjem bamtools-a?
Samtools je obično nešto sporiji od ostalih alata jer je to referentna implementacija, pa bih očekivao da će bamtools biti malo brži.
Bamtools je obično sporiji jer nije optimiziran i sada se ne održava. Sambamba itd. Razvijeni su s određenim ciljem da budu brži.
#2
+8
John Marshall
2017-05-19 12:18:49 UTC
view on stackexchange narkive permalink

Spajanje razvrstanih datoteka linearna je operacija, pa će svi dobro implementirani alati koji to rade to učiniti s približno jednakom učinkovitošću. Dakle, samtools merge (koristite najnoviju verziju, jer je došlo do poboljšanja u rukovanju zaglavljem spajanja u verzijama 1.3.x i 1.4.x), picard MergeSamFiles itd.

Ovi alati moraju istovremeno držati otvorenima sve ulazne BAM datoteke, pa ovisno o tome koliko stotina ulaznih datoteka imate, možete naići na ograničenje sustava na deskriptorima otvorenih datoteka. Koristite ulimit da biste prvo maksimizirali ovo; ako ih je još previše, možda ćete trebati spojiti prvih 500 datoteka, a zatim spojiti sljedećih 500 u tu itd. Samtools to ne radi interno; Nisam siguran da li to čini bilo koja druga implementacija spajanja.

Možda bi postupno spajanje kao što spominjete u svom drugom odlomku moglo ubrzati stvari, kao što jedno ne pogađa IO ograničenja?
Ne, neki se podaci više puta zapisuju i čitaju, pa moraju biti sporiji. Lukavom upotrebom cijevi i zamjenom procesa (`samtools spajaju ... <(samtools spajaju ...) ...`) to se može svesti na minimum i izbjeći udaranje na disk, tako da usporavanje može biti trivijalno (po cijenu upotrebe još nekoliko jezgri).


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...