Vraag:
Voeg honderden kleine BAM-bestanden samen tot één BAM-bestand
Scott Gigante
2017-05-19 10:50:24 UTC
view on stackexchange narkive permalink

Ik werk met meer dan een miljoen (lange) reads en stem ze af op een groot genoom. Ik overweeg om mijn uitlijntaken parallel uit te voeren, horizontaal te verdelen over honderden knooppunten in plaats van te proberen een enkele taak met tientallen kernen uit te voeren.

Ik zou de gesorteerde BAM-bestanden willen samenvoegen voor verdere stroomafwaartse analyse . Wat is de meest efficiënte manier om dit te doen terwijl u een geldige bestandskop behoudt en profiteert van het feit dat de ingevoerde bam-bestanden al zijn gesorteerd?

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

samtools merge merged.bam * .bam is efficiënt genoeg omdat de invoerbestanden gesorteerd zijn. Je kunt een beetje sneller worden met sambamba en / of biobambam, maar ze zijn meestal niet al geïnstalleerd en IO wordt sowieso al snel een bottleneck.

Enig idee hoe dit zich verhoudt tot het samenvoegen van bamtools?
Samtools is meestal een beetje langzamer dan andere tools, omdat het de referentie-implementatie is, dus ik verwacht dat bamtools iets sneller zijn.
Bamtools is meestal langzamer omdat het niet is geoptimaliseerd en nu niet meer wordt onderhouden. Sambamba etc zijn ontwikkeld met een specifiek doel om sneller te zijn.
#2
+8
John Marshall
2017-05-19 12:18:49 UTC
view on stackexchange narkive permalink

Het samenvoegen van gesorteerde bestanden is een lineaire bewerking, dus alle goed geïmplementeerde tools die dit doen, doen het met ongeveer dezelfde efficiëntie. Dus samtools merge (gebruik de meest up-to-date versie, aangezien er verbeteringen zijn in de verwerking van merge header in de 1.3.x en 1.4.x versies), picard MergeSamFiles , etc.

Deze tools moeten alle invoer-BAM-bestanden tegelijkertijd open houden, dus afhankelijk van hoeveel honderden invoerbestanden je hebt, kun je tegen de systeembeperking aanlopen voor open bestandsdescriptors. Gebruik ulimit om dit eerst te maximaliseren; als het er nog steeds te veel zijn, moet je misschien de eerste 500 bestanden samenvoegen, daarna de volgende 500 daarin samenvoegen, enz. Samtools doet dit niet intern; Ik weet niet zeker of een van de andere implementaties van samenvoegen dit doet.

Misschien kan stapsgewijs samenvoegen, zoals u in uw tweede alinea vermeldt, de zaken versnellen en raakt men de IO-beperkingen niet?
Nee, sommige gegevens worden nu meer dan eens geschreven en gelezen, dus het moet langzamer zijn. Met slim gebruik van pipes en procesvervanging (`samtools merge ... <(samtools merge ...) ...`) kan dit worden geminimaliseerd en voorkomen dat de schijf wordt geraakt, dus de vertraging kan triviaal zijn (ten koste van het gebruik van een paar cores).


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...