Domanda:
Unisci centinaia di piccoli file BAM in un unico file BAM
Scott Gigante
2017-05-19 10:50:24 UTC
view on stackexchange narkive permalink

Sto lavorando con oltre un milione di letture (lunghe) e allineandole a un genoma di grandi dimensioni. Sto valutando di eseguire i miei lavori di allineamento in parallelo, distribuendoli orizzontalmente su centinaia di nodi piuttosto che provare a eseguire un singolo lavoro con dozzine di core.

Vorrei unire i file BAM ordinati insieme per ulteriori analisi a valle . Qual è il modo più efficiente per farlo mantenendo un'intestazione di file valida e sfruttando il fatto che i file bam di input sono già ordinati?

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

samtools merge merged.bam * .bam è abbastanza efficiente poiché i file di input sono ordinati. Puoi diventare un po 'più veloce con sambamba e / o biobambam, ma in genere non sono già installati e l'IO diventa comunque un collo di bottiglia.

Qualche idea di come questo sia paragonabile alla fusione di bamtools?
Samtools tende ad essere un po 'più lento di altri strumenti poiché è l'implementazione di riferimento, quindi mi aspetto che bamtools sia un po' più veloce.
Bamtools è solitamente più lento perché non è ottimizzato e ora non viene più mantenuto. Sambamba ecc. Sono sviluppati con l'obiettivo specifico di essere più veloci.
#2
+8
John Marshall
2017-05-19 12:18:49 UTC
view on stackexchange narkive permalink

L'unione di file ordinati è un'operazione lineare, quindi qualsiasi strumento ben implementato che lo fa lo farà con approssimativamente la stessa efficienza. Quindi samtools merge (usa la versione più aggiornata, poiché ci sono stati miglioramenti nella gestione delle intestazioni di unione nelle versioni 1.3.xe 1.4.x), picard MergeSamFiles , ecc.

Questi strumenti devono tenere aperti tutti i file BAM di input contemporaneamente, quindi a seconda di quante centinaia di file di input hai potresti incorrere nel limite di sistema sui descrittori di file aperti. Usa ulimit per ingrandirlo prima; se ce ne sono ancora troppi, potrebbe essere necessario unire i primi 500 file, quindi unire i successivi 500 in quello, ecc. Samtools non lo fa internamente; Non sono sicuro che le altre implementazioni di unione lo facciano.

Forse l'unione graduale come hai menzionato nel tuo secondo paragrafo potrebbe accelerare le cose così come non si raggiungono i limiti di IO?
No, alcuni dati vengono ora scritti e letti più di una volta, quindi deve essere più lento. Con un uso furbo di pipe e la sostituzione del processo (`samtools merge ... <(samtools merge ...) ...`) questo può essere minimizzato ed evitare di colpire il disco, quindi il rallentamento può essere banale (a costo di usare qualche core in più).


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...