Fråga:
Hur konverterar jag GFF3 till GTF2
aechchiki
2017-07-14 18:40:47 UTC
view on stackexchange narkive permalink

Jag vill konvertera en fil i gff3 -format till gtf2.2 -format.

Anledningen till att jag skulle vilja göra detta är: Jag har en uppsättning transkriptioner som samlats av en massa olika programvaror (och använder RNA-seq-data från olika sekvenseringsteknologier) och jag skulle vilja jämföra var och en av dessa uppsättningar med referenstranskriptomanteckningen för den arten ( D . melanogaster ). Jag bad redan om råd från samhället om hur man ska gå vidare med det, men för att köra den föreslagna programvaran ( TACO och manschett) måste jag ha en GTF-fil som innehåller de experimentella transkriptionerna för att jämföra med referensutskrifterna (GTF).

Hittills försökte jag utan framgång :

  1. gffread i paketet Manschettknappar ( gffread input.gff3 -T -o output.gtf ): detta resulterar i en tom -utdata. gtf -fil och en tom -logg -fil (används Manschettknappar v.2.2.1) - Jag kontaktade författarna via deras Google-grupp men har inte hört talas om dem ännu
  2. gff3_to_gtf verktyget i paketet GenomeTools ( gt ) ( gt gff3_to_gtf input.gff3 -o output.gtf ): output skapas inte och loggfilen är inte informativ - jag kontaktade författarna via deras e-postlista men har inte hört talas om dem ändå
  3. GFF3_to_GTF verktyg i t han FML -paketet ( ./gff3_to_gtf_converter.pl input.gff3 output.gtf ): utgången innehåller bara en rubrik ( ## gff-version 2.5 kod >) och -loggen är tom

gff3 -filen skapades som utdata från GMAP och innehåller transkriptionerna som de hittas genom justering till referensen (specificerar alternativet -f gff3_match_cdna ).

[Redigera: vad jag upptäckte en poteriori är att det här formatet inte är en standard gff3, så att konverteringen inte är trivial ...]

Här är början på gff3-fil som jag försökte konvertera:

  $ head r9_gmap_match-cdna.gff ## gff-version 3 # Skapad av GMAP-version 2017-04-24 med hjälp av call: / home / aechchik / software / gmap-2017-04-24 / bin / gmap .sse42 -d gmapidx -D / scratch / beegfs / månatlig / aechchik / isoforms / ref / kromosomer / -f gff3_match_cdna -n 0 -t 20 r9_2d.fasta2L gmapidx cDNA_match 18442664 18443024 79 -. ID = ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1; Namn = ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d; Target = ae6a7818-85b5-475-8031 M4 D2 M5 D3 M34 I3 M6 D1 M7 D1 M5 D1 M30 D2 M16 I1 M8 D3 M10 D1 M5 D1 M6 I1 M8 I1 M8 D1 M33 D3 M33 I1 M28 D3 M25 ### 3R gmapidx cDNA_match 15853880 15855465 96 +. ID = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1; Name = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d; Target = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d 80 1645; Gap = M46 D2 M12 D2 M157 D3 M4 D1 M50 I2 M3 I1 M12 I1 M68 I1 M66 I1 M53 D2 M47 D1 M16 D1 M35 D1 M155 D1 M28 D1 M166 D2 M47 D1 M8 D4 M69 D1 M28 D1 M5 D1 M12 D1 M202 I1 M115 D1 M61 I2 M7 D1 M7 I136 cDNA_match 15855529 15855742 97 +. ID = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1; Name = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d; Target = dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d 1646 1856; Gap = M21 D1 M68 D1 M85 D1 M37 # ## X gmapidx cDNA_match 14837810 14838142 93 -. ID = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1; Namn = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d; Target = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d 74 406; Gap = M13 D1 M182 I1 M14 I2 M56 I1 M30 D2 M21 D1 M13
X gmapidx cDNA_match 14837470 14837753 92 -. ID = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1; Namn = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d; Target = 960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d 407 688; Gap = I2 M5 I1 M64 I1 M44 D1 M9 D5 M31 D3 M23 I1 M19 I1 M25 I1 M26 D1 M19 I1 M9 ###  
Jag kan inte heller få manschettknappar att fungera med det här. Konstig. Kan du förklara vad du behöver, exakt? Jag menar, GTF är i grunden GFF2. Skulle det vara OK att bara ta bort attributen? Vilken information behöver du behålla? I grund och botten, vad ska du använda GTF för? Behöver du fälten 'gen_id' och 'transkript_id' och i så fall var skulle informationen komma ifrån? Det kan vara till hjälp om du kom in i vårt [chattrum] (https://chat.stackexchange.com/rooms/58858/bioinformatics). Om du gör det, ping mig ('@terdon') för att meddela mig.
Jag försökte konvertera detta med `rtracklayer` i R och misslyckades också (rtracklayer vill inte mata ut ordentligt GTF-format) :( Jag undrar om lite python / perl skulle räcka.
Två svar:
Devon Ryan
2017-07-15 16:30:13 UTC
view on stackexchange narkive permalink

Följande bit av pythonkod ska fungera:

  #! / usr / bin / env pythonimport syslastTranscript = [None, None, None, []] # ID, chrom, strand, [(start, slut, poäng), ...] def getID (s): "" "Analysera ID-attributet" "" s = s.split (";") för k i s: om k.startswith ("ID ="): return k [3:] returnera Nonedef dumpLastTranscript (): "" "Skriv ut det sista transkriptet" "" gränser = sorterad (lastTranscript [3]) utskrift (" {} \ tgmapidx \ tgene \ t {} \ t {} \ t. \ t {} \ t. \ tgene_id \ "{} \"; transkript_id \ "{} \"; ". format (lastTranscript [1], gränser [0] [0], gränser [-1] [1], lastTranscript [2], lastTranscript [0], lastTranscript [0])) tryck ("{} \ tgmapidx \ ttranscript \ t {} \ t {} \ t. \ t {} \ t. \ tgene_id \ "{} \"; transkript_id \ "{} \"; ". format (lastTranscript [1], gränser [0] [0], gränser [-1] [ 1], lastTranscript [2], lastTranscript [0], lastTranscript [0])) för start, slut, poäng i gränser: skriv ut ("{} \ tgmapidx \ texon \ t {} \ t {} \ t {} \ t {} \ t. \ tgene_id \ "{} \"; transkript_id \ "{} \" ; ". format (lastTranscript [1], start, slut, poäng, lastTranscript [2], lastTranscript [0], lastTranscript [0])) def handleLine (kol):" "" Hantera en enda rad, lägg till exongränserna till föregående om relevant "" "ID = getID (kol [8]) hävdar (ID är inte Ingen) om lastTranscript [0] inte är None och lastTranscript [0]! = ID: dumpLastTranscript () lastTranscript [3] = [ ] lastTranscript [0] = ID lastTranscript [1] = cols [0] lastTranscript [2] = cols [6] lastTranscript [3] .append ((int (cols [3]), int (cols [4]), cols [5])) f = öppen (sys.argv [1]) för rad i f: om line.startswith ("#"): fortsätt cols = line.strip (). Split ("\ t") handleLine (cols ) dumpLastTranscript () f.close ()  

Om du sparade det som gff2gtf.py och gjorde det körbart skulle användningen vara ./gff2gtf .py foo.gff3 > foo.gtf . Med exemplet som du angav i ditt inlägg är resultatet:

  2L gmapidx-gen 18442664 18443024. -. gene_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; transcript_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; 2L gmapidx transkript 18442664 18443024. -. gene_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; transcript_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; 2L gmapidx exon 18442664 18443024 79 -. gene_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; transcript_id "ae6a7818-85b5-4739-8031-e58f4462ad41_Basecall_2D_2d.path1"; 3R gmapidx-gen 15853880 15855742. +. gene_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; transcript_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; 3R gmapidx-transkript 15853880 15855742. +. gene_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; transcript_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; 3R gmapidx exon 15853880 15855465 96 +. gene_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; transcript_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; 3R gmapidx exon 15855529 15855742 97 +. gene_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; transcript_id "dd2444cf-34d6-4cd3-87ab-0ae1f3cb1f96_Basecall_2D_2d.path1"; X gmapidx-gen 14837470 14838142. -. gene_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; transcript_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; X gmapidx transkript 14837470 14838142. -. gene_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; transcript_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1";
X gmapidx exon 14837470 14837753 92 -. gene_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; transcript_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; X gmapidx exon 14837810 14838142 93 -. gene_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1"; transcript_id "960b50cd-945e-4c12-b9bc-367f965575bb_Basecall_2D_2d.path1";  

Det ser åtminstone ut som rätt gtf 2.2-format för mig.

Dan
2017-07-14 18:46:53 UTC
view on stackexchange narkive permalink

GenomeTools -paketet har många små applikationer som låter dig massera GFF3. Det kan ha en omvandlare, eller så kan du justera din befintliga GFF3 så att gffread fungerar

Åh ... jag borde läsa förbi det första objektet i listan ... Försök använda gt gff3 för att transformera och mata ut GFF3-filer?
ja @Dan, Jag försökte gt (Genome Tools-paketet) - se punkt 2 i min fråga, och den fungerar inte som den är.
Redigera din fråga och inkludera ett exempel på hur OP kan använda det föreslagna verktyget för att göra vad de ställer. Som det ser ut är detta mer en kommentar än ett svar. Se även https://meta.stackexchange.com/q/225370/203101
@terdon Menar du svaret?
@KamilSJaron d'oh! Ja, förlåt, jag bad Dan redigera detta svar, inte frågan.


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...