Fråga:
Vad betyder "att hämta efter region inte är tillgängligt för SAM-filer"?
Kamil S Jaron
2019-04-10 20:51:29 UTC
view on stackexchange narkive permalink

Jag är van vid att gzip / biopython -lösningar när jag hanterar sekvenseringsdata, men nu vill jag byta till mer elegant pysam . Så jag tittade på manualen, men stötte på ganska bisarra problem med de första raderna med min bam-fil

  import pysamsamfile = pysam.AlignmentFile ("3_Tms_1_mapped. bam "," rb ") för läsning i samfile.fetch ('3_Tms_b3v08_scaf000159'): skriv ut (läs) samfile.close ()  

returnerar ValueError: hämtning efter region är inte tillgänglig för SAM-filer . Tja, filen är bam . Jag försökte googla felet men de enda träffarna jag hittade är raderna i källkoden för pysam som kontrollerar om filen är bam / cram eller sam, så på något sätt pysam tycker att min bam är en sam. Hur kan jag övertyga det annars? Jag har också märkt att handboken är för python 2.7, det är kanske där problemet kommer ifrån ...

Två svar:
terdon
2019-04-10 21:10:46 UTC
view on stackexchange narkive permalink

Det är egentligen inte en bam-fil som John Marshall tänkte på. Jag behåller resten av mitt svar eftersom det kan vara användbart för någon annan, men problemet här var att du hade en komprimerad (bgzipped) samfil och inte en egentlig bam-fil och det var därför du fick det felet. När jag sorterade din fil som förberedelse för att indexera den konverterade jag till en bam varför resten av mitt svar fungerade.


Du har inte indexfilen för bam-filen du ' använder igen. Jag använde det här skriptet på filen du länkade till (ändra namnet så att det motsvarar rätt fil och en kontig i den filen):

  #! / Usr / bin / env python3import pysamsamfile = pysam.AlignmentFile ("3_Tce_1_mapped.bam", "rb") för läsning i samfile.fetch ('3_Tce_b3v08_scaf005149'): skriv ut (läs) samfile.close ()  

Katalogen I körde den in hade:

  $ ls 3 * 3_Tce_1_mapped.bam  

Och jag fick det fel du beskrev:

  $ foo.pyTraceback (senaste samtalet senast): Fil "/home/terdon/scripts/foo.py", rad 5, i <module> för läsning i samfile.fetch ('3_Tce_b3v08_scaf005149'): Fil "pysam / lib ", rad 1107, i pysam.libcalignmentfile.AlignmentFile.fetchValueError: hämtning efter region är inte tillgänglig för SAM-filer  

Men indexering av bam-filen fixade den:

   $ samtools sort 3_Tce_1_mapped.bam > 3_Tce_1_m apped.sorted.bam $  mv 3_Tce_1_mapped.sorted.bam 3_Tce_1_mapped.bam  $ samtools index 3_Tce_1_mapped.bam $  ls 3 * 3_Tce_1_mapped.bam 3_Tce_1_mapped.b. bai $ foo.py | wc227 2724 16725  

Så bara sortera och indexera dina filer innan du försöker söka i dem. Vilket är vettigt eftersom indexets uppgift främst är att tillåta sökning.

John Marshall
2019-04-11 01:43:56 UTC
view on stackexchange narkive permalink

Din 3_Tms_1_mapped.bam -fil, trots dess filnamnstillägg, är faktiskt en bgzipped SAM -fil. Du kan verifiera detta med htsfile , som är ett litet verktyg som är förpackat med HTSlib:

  $ htsfile 3_Tms_1_mapped.bam 3_Tms_1_mapped.bam: SAM version 1.3 BGZF-komprimerad sekvensdata  

(För filer som verkligen är i BAM-format rapporterar den BAM version 1 komprimerad sekvensdata .)

Så felmeddelandet är korrekt i detta fall.

Hmm, betyder det att den här länken är fel? http://biopython.org/DIST/docs/api/Bio.bgzf-module.html Jag trodde att det var samma sak ...
Nej. (Var det en viss del av det som du tror kan vara fel?) Men det finns en skillnad mellan BGZF-komprimering av klartextformat och en BAM-fil (vars dekomprimerade underliggande ström är ett skräddarsytt binärt format som skiljer sig från vanlig SAM-text).
Jag tror att jag förstår det nu. Jag blev förvirrad av syftet med den här modulen, de skriver "Förutom att det krävs för slumpmässig åtkomst till och skrivning av BAM-filer", så jag fick ett intryck av att jag helt enkelt kan använda den här modulen för att skriva BAM-filer. Detta var faktiskt riktigt bra svar, tack!
@KamilSJaron du kanske vill överväga att acceptera det här svaret istället för mitt eftersom det var det verkliga problemet.


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 4.0-licensen som det distribueras under.
Loading...