Fråga:
Hur man slår ihop sam-filer tillsammans med att lägga till läsgrupper
Kamil S Jaron
2017-06-26 13:06:52 UTC
view on stackexchange narkive permalink

Jag har tre sekvenseringsbibliotek av enskild individ mappad till en referens med bwa-mem . Jag skulle vilja slå samman de tre osorterade .sam -filerna jag har så jag kan ringa varianter och heterozygosity-uppskattningar med atlas. Atlas kräver en inmatningsmappningsfil ( bam ) med definierade läsgrupper eftersom den uppskattar felprofilerna för olika bibliotek separat.

Hur kan jag slå samman flera samfiler? Undvik helst java (Picard-verktyg).

Jag försökte räkna ut en lösning med samtools 1.3 . Jag sorterade enskilda filer med samtools sort , sedan använde jag samtools merge -r merged.bam s1.sort.sam s2.sort.sam s3.sort.sam för att slå samman sorterade filer. Men läsgruppen kom inte till rubriken (och den variant som ringer jag använder klagar på det), även läsgruppen är dumt filnamnet.

Jag försökte definiera meningsfulla läsgruppsnamn med hjälp av proceduren som beskrivs på BioStars, men jag fann att detta bara kommer att ändra rubriken, det justerar inte namnen på läsgrupper som definierats av samtools merge (filnamnen).

Efter denna relaterade tråd på SeqAnswers försökte jag definiera rätt rubrik med läsgrupper som motsvarar sammanslagna filnamn:

  samtools -rh rg.txt merged.bam s1.sort.sam s2.sort.sam s3.sort.sam  

där rg.txt är en fil med rubrik

  @RG s1.sort@RG s2.sort@RG s3.sort ... output of samtools view -H s1.sort  

Men rubriken hade fortfarande inte läsgruppen, antar jag att eftersom samhuvud endast accepterar märkta objekt som ska specificeras (något som @RG XY: s1.sort ). Så jag tittade på den sammanslagna bam och jag upptäckte att taggen för RG är Z: . Så jag försökte bara byta namn på rubriken för den sammanslagna filen med samtools reheader , men sedan klagar samtools över det faktum att en tagg måste ha längd 2:

  Felaktig nyckel: värdepar vid rad 123: "@RG Z: s1.sort" Segmenteringsfel (kärndumpad)  

Jag har öppnat ett problem för att rapportera denna konstiga inkompatibilitet för läsgrupper som genereras av samtools merge med samtools reheader .

Jag vill ha lösning på:

  • skapa lite mer standardiserade läsgruppnamn ( SM: Exempel \ tLB: bibliotek -format)
  • undvik meningslös skrivning till disk som i sam -> sorterad. sam -> merged.bam case (kan antagligen uppnås genom "rör och tees", tack @bli)

Jag vet också att jag kan ange RG till bwa, så sam-filerna kommer har läst grupper definierade i första hand. Men jag gillar inte tanken på att mappa om tre bibliotek bara för att skapa korrekt formatering av läsgrupper.

Jag vet inte om det här kan användas för att lösa problemet med "löjligt mycket utrymme": kan du använda namngivna pipor och tees för att undvika att skriva mellanfiler till disk?
Jag vet att detta inte handlar om den fråga du specifikt tar upp, dvs hur man effektivt slår ihop samfiler, men kan du utarbeta varför du skulle vilja att dessa filer slogs samman om du vill behandla läsgrupperna helt separat Kan du köra din analys och sedan slå samman resultaten separat eller planerar du att gå med i läsgrupper för några av de olika samtalen?
@bli Ja, jag tänkte på det, men jag vet inte hur jag ska göra det med tre filer som ska slås ihop (jag använde faktiskt aldrig tees). Hur som helst, jag kommer att försöka lösa problemet när jag har minst en fungerande lösning.
@amblina För alla typer av slutsatsproblem från en enskild individ är det en bra idé att använda all information samtidigt och så vitt jag känner till arbetar dessa verktyg (som atlas eller GATK) med läsgrupper för att spåra ett ursprung av läsningar ( du kan inte bara mata den med fler filer).
Två svar:
Bioathlete
2017-06-27 09:10:48 UTC
view on stackexchange narkive permalink

Jag har använt https://github.com/ekg/bamaddrg för att snabbt lägga till läsgrupper i flera samfiler. Och sedan kan du göra en samtools sammanslagning av de taggade filerna.

Det här ser ut som en elegant och snabbare version av `awk`. Jag måste ta en titt!
Kamil S Jaron
2017-06-26 21:50:19 UTC
view on stackexchange narkive permalink

Inte så elegant men fungerande lösning

Jag hittade en lösning som uppfyller flera av mina villkor, i grund och botten måste jag bara tilldela läsgrupper till enskilda kartfiler, vilket kan vara precis lagt till i sorteringsprocessen och slå sedan ihop de sorterade samfilerna med läsgrupper.

  funktion sort_and_assign_RG {# $ 1 inmatningsfil # $ 2 läs grupp-id # $ 3 bibliotek OFILE = $ (basnamn $ 1 .sam) .sort.RG.sam HEADER = $ (basnamn $ 1 .sam) .header.sam # eftersom jag tar rubrik från osorterad fil, så jag måste lägga till den här informationen i rubriken samt läsgruppsekot -e "@HD \ tVN: 1.3 \ tSO: koordinat" > $ HEADER # lägg till läsgrupp i rubrikeko -e "@RG \ tID:" $ 2 "\ tLB:" "$ 3" >> $ HEADER # och resten av sidhuvudet samtoolsvy -H $ 1 >> $ HEADER # nu sorterar ingångssam, tar bort rubrik, # bifogar till varje inriktning läsgrupp-ID (RGID) # och kattrubrik och alignmen t tillsammans samtools sortera - $ 1 | samtoolsvy - | \ awk -v RGID = "$ 2" '{printf "% s \ tRG: Z:% s \ n", $ 0, RGID; } '| \ cat $ HEADER - > $ OFILE # ta bort temp header rm $ HEADER} sort_and_assign_RG s1.sam s1 is180sort_and_assign_RG s2.sam s2 is350sort_and_assign_RG s3.sam s3 is550samtools merge merged.bam. 

Det skulle vara trevligt att undvika att skapa tre sam -filer på vägen, men åtminstone får jag standardiserade läsgrupper i en sammanslagen bamplatta.

--- redigera ---

Jag hittade också var min förvirring kommer ifrån. Läsgruppen i rubriken är i format

  @RG ID: foo LB: lib_foo ... `@RG ID: bar LB: lib_bar ...`  

där ID läses grupp-ID (inte prov-ID som jag trodde) och andra taggar är bara specifikationer för läsgruppen. Sedan har enskild mappning läst grupp tilldelad i olika format

  {aliment1} RG: Z: foo {aliment2} RG: Z: bar  

där RG bara är en tagg för läsgrupp och Z är bara ett märke som säger att den här taggen bara är en "utskrivbar sträng". Därför tror jag att en annan lösning bara skulle slå samman dessa sorterade filer och sedan bara lägga till tre korrekta ​​strong> rader i rubriken.

Jag måste säga, .sam är ett otroligt intuitivt format.

Du kan försöka använda namngivna rör istället för filer för dina samfiler: 'mkfifo $ OFILE' före 'samtools sort'. Sedan ringer du din "sort_and_assign_RG" i bakgrunden med "&" och gör "rm -f s {1,2,3} .sort.RG.sam" efter "samtools merge". Jag är inte säker på att detta verkligen kommer att fungera parallellt, dock: Jag misstänker att de namngivna rören endast kan skrivas när `samtools sort 'är klar.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...